Search in sources :

Example 1 with DictValue

use of edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue in project cogtool by cogtool.

the class SNIFACTPredictionAlgo method createSimilarityScoresFile.

protected String createSimilarityScoresFile(ISimilarityDictionary dict) {
    //        if (dict.size() == 0) {
    //            return null; // TODO ask about
    //        }
    OutputStreamWriter fw = null;
    BufferedWriter buffer = null;
    String scoresPath = null;
    try {
        File dest = File.createTempFile("scores", ".lisp");
        dest.deleteOnExit();
        fw = new OutputStreamWriter(new FileOutputStream(dest), "US-ASCII");
        buffer = new BufferedWriter(fw);
        Iterator<DictEntry> entries = dict.getEntries().iterator();
        while (entries.hasNext()) {
            DictEntry entry = entries.next();
            if ((parameters.algorithm == ITermSimilarity.ALL) || entry.algorithm.getClass().isInstance(parameters.algorithm)) {
                DictValue value = dict.getValue(entry);
                double simil = (value.similarity == ITermSimilarity.UNKNOWN) ? 0.0 : value.similarity;
                // escape any \'s and "'s in the input strings
                String quotedGoal = entry.goalWord.replaceAll("\\\\", "\\\\\\\\").replaceAll("\"", "\\\\\"");
                String quotedSearch = entry.searchWord.replaceAll("\\\\", "\\\\\\\\").replaceAll("\"", "\\\\\"");
                buffer.write("(store-score \"" + quotedGoal + "\" \"");
                buffer.write(quotedSearch + "\" " + simil + ")\n");
            }
        }
        scoresPath = dest.getAbsolutePath();
    } catch (IOException e) {
        throw new ComputationException("Writing file failed", e);
    } finally {
        try {
            if (buffer != null) {
                buffer.close();
            }
            if (fw != null) {
                fw.close();
            }
        } catch (IOException e) {
            throw new ComputationException("Closing writer failed", e);
        }
    }
    return scoresPath;
}
Also used : DictValue(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue) FileOutputStream(java.io.FileOutputStream) DictEntry(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictEntry) OutputStreamWriter(java.io.OutputStreamWriter) IOException(java.io.IOException) File(java.io.File) BufferedWriter(java.io.BufferedWriter)

Example 2 with DictValue

use of edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue in project cogtool by cogtool.

the class DictionaryEditorController method setSimilarity.

protected void setSimilarity(final int rowIndex, final double similarity, final ITermSimilarity algorithm, IUndoableEditSequence editSeq) {
    DictEntry entry = dictionary.getEntry(rowIndex);
    final String goal = entry.goalWord;
    final String search = entry.searchWord;
    DictValue oldV = dictionary.getValue(entry);
    final DictValue oldValue = new DictValue(oldV.similarity, oldV.editedDate);
    final DictValue newValue = new DictValue(similarity);
    if (PrecisionUtilities.withinEpsilon(oldValue.similarity, similarity, 0.001)) {
        interaction.setStatusMessage(SIMIL_UNCHANGED);
        return;
    }
    final ITermSimilarity oldAlg = entry.algorithm;
    dictionary.setSimilarity(goal, search, algorithm, newValue, rowIndex);
    editSeq.addEdit(new AUndoableEdit(DictionaryEditorLID.SetSimilarity) {

        @Override
        public String getPresentationName() {
            return SET_SIMILARITY;
        }

        @Override
        public void redo() {
            super.redo();
            dictionary.setSimilarity(goal, search, algorithm, newValue, rowIndex);
        }

        @Override
        public void undo() {
            super.undo();
            dictionary.setSimilarity(goal, search, oldAlg, oldValue, rowIndex);
        }
    });
}
Also used : ITermSimilarity(edu.cmu.cs.hcii.cogtool.model.ITermSimilarity) DictValue(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue) DictEntry(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictEntry) PendingDictEntry(edu.cmu.cs.hcii.cogtool.ui.PendingDictEntry) AUndoableEdit(edu.cmu.cs.hcii.cogtool.util.AUndoableEdit)

Example 3 with DictValue

use of edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue in project cogtool by cogtool.

the class DictionaryEditorController method createDeleteEntryAction.

protected IListenerAction createDeleteEntryAction() {
    return new IListenerAction() {

        public Class<?> getParameterClass() {
            return int[].class;
        }

        public boolean performAction(Object actionParms) {
            final int[] rows = (int[]) actionParms;
            final DictEntry[] deletedEntries = new DictEntry[rows.length];
            final DictValue[] deletedValues = new DictValue[rows.length];
            for (int i = rows.length - 1; i >= 0; i--) {
                deletedEntries[i] = dictionary.getEntry(rows[i]);
                if (deletedEntries[i] == null) {
                    interaction.reportProblem(ERROR_TITLE, NO_ENTRY);
                    continue;
                }
                deletedValues[i] = dictionary.getValue(deletedEntries[i]);
                dictionary.removeEntry(rows[i]);
            }
            undoMgr.addEdit(new AUndoableEdit(DictionaryEditorLID.Delete) {

                @Override
                public String getPresentationName() {
                    return (rows.length == 1) ? DELETE_ROW : DELETE_ROWS;
                }

                @Override
                public void redo() {
                    super.redo();
                    for (int i = rows.length - 1; i >= 0; i--) {
                        dictionary.removeEntry(rows[i]);
                    }
                }

                @Override
                public void undo() {
                    super.undo();
                    for (int i = 0; i < rows.length; i++) {
                        dictionary.insertEntry(deletedEntries[i], deletedValues[i], rows[i]);
                    }
                }
            });
            return true;
        }
    };
}
Also used : IListenerAction(edu.cmu.cs.hcii.cogtool.util.IListenerAction) DictValue(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue) DictEntry(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictEntry) PendingDictEntry(edu.cmu.cs.hcii.cogtool.ui.PendingDictEntry) AUndoableEdit(edu.cmu.cs.hcii.cogtool.util.AUndoableEdit)

Example 4 with DictValue

use of edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue in project cogtool by cogtool.

the class DictEntryGenerator method generateOneEntry.

private void generateOneEntry(String search, String goal, ITermSimilarity alg, ITermSimilarity.Continuable cont, ISimilarityDictionary dict, boolean computeAll, List<String> computeErrors, ProgressCallback progressCallback) {
    // search = clean(search);
    if (search == null || "".equals(search)) {
        return;
    }
    // TODO what if goal is null/empty?
    DictEntry entry = new DictEntry(goal, search, alg);
    // Even if computeAll is true, don't recompute entries that
    // have already been computed during this execution.
    boolean computed = newDictEntries.containsKey(entry) || updatedDictEntries.containsKey(entry);
    if ((!dict.containsEntry(entry) || computeAll) && !computed) {
        double similarity;
        if (alg == ITermSimilarity.MANUAL) {
            if (dict.containsEntry(entry)) {
                // Don't reset a manually entered similarity!
                return;
            }
            similarity = 0.0;
        } else {
            if (progressCallback != null) {
                progressCallback.updateProgress(0.0, goal + " : " + search);
            }
            similarity = alg.determineSimilarity(goal, search, computeErrors, cont);
        }
        DictValue newValue = new DictValue(similarity);
        if (dict.containsEntry(entry) && cont.isContinuing()) {
            DictValue oldValue = dict.getValue(entry);
            oldDictEntries.put(entry, new DictValue(oldValue.similarity, oldValue.editedDate));
            updatedDictEntries.put(entry, newValue);
        } else {
            newDictEntries.put(entry, newValue);
        }
    }
}
Also used : DictValue(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue) DictEntry(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictEntry)

Example 5 with DictValue

use of edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue in project cogtool by cogtool.

the class DictionaryEditorCmd method importDictionary.

/**
     * Replace prevDict with dict after reading the entries from the file.
     * @param csvFile TODO
     */
// I (dfm) believe the above is a lie. I think prevDict was already replaced 
// by dict by the caller, and prevDict is simply a vestigal bit of data that
// is passed around and encapsulated in undo and redo forms for no reason
// at all. But I'm not sufficiently confident of that diagnosis to zap it
// just yet....
public static boolean importDictionary(final Design design, final ISimilarityDictionary dict, final ISimilarityDictionary prevDict, Interaction interaction, IUndoableEditSequence editSeq, String csvFile) {
    File dataFile = (csvFile != null ? new File(csvFile) : interaction.selectCSVFile());
    if (dataFile == null) {
        return false;
    }
    FileReader reader = null;
    List<String> outputLines = new ArrayList<String>();
    try {
        reader = new FileReader(dataFile);
        FileUtil.readLines(reader, outputLines);
    } catch (IOException e) {
        interaction.reportProblem("File I/O Error", e.getMessage());
        return false;
    } finally {
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException e) {
            interaction.reportProblem("File I/O Error on Close", e.getMessage());
            return false;
        }
    }
    if (outputLines.size() == 0) {
        interaction.reportProblem("Empty file", "Requested .csv file is empty");
        return false;
    }
    if (outputLines.size() < 3) {
        interaction.reportProblem("Invalid file", "Requested file is not a valid dictionary file");
        return false;
    }
    String[] headerCol = CSVSupport.getCells(outputLines.get(0));
    if ((headerCol.length != 2) || !(ISimilarityDictionary.COGTOOL_DICT_HEADER.equals(headerCol[0])) || !headerCol[1].equals(DICT_CSV_VERSION_0)) {
        interaction.reportProblem("Invalid file", "Requested file is not a valid dictionary file");
        return false;
    }
    final Map<DictEntry, DictValue> newEntries = new LinkedHashMap<DictEntry, DictValue>();
    for (int i = 2; i < outputLines.size(); i++) {
        String newLine = outputLines.get(i);
        String[] cols = CSVSupport.getCells(newLine);
        // [required] 0 is goal string
        // [required] 1 is search string
        // [required] 2 is algorithm name
        // [optional] 3 is site (for Google algs) or url (for LSA)
        // [optional] 4 is term space (for LSA)
        String site = (cols.length > 3) ? cols[3] : "";
        String space = (cols.length > 4) ? cols[4] : "";
        DictEntry entry = new DictEntry(cols[0], cols[1], getNameAlgorithm(cols[2], site, space));
        double similarity;
        Date editedDate;
        try {
            similarity = parseDouble(cols[4]);
            editedDate = new PersistentDate(PersistentDate.DATE_FORMAT.parse(cols[5]));
        } catch (Exception e) {
            throw new RcvrParsingException("Parsing error", e);
        }
        DictValue value = new DictValue(similarity, editedDate);
        newEntries.put(entry, value);
    }
    dict.insertEntries(newEntries, false);
    if (editSeq != null) {
        editSeq.addEdit(new AUndoableEdit(ProjectLID.ImportDict) {

            @Override
            public String getPresentationName() {
                return IMPORT_DICTIONARY;
            }

            @Override
            public void redo() {
                super.redo();
                if (!NullSafe.equals(prevDict, WidgetAttributes.NO_DICTIONARY)) {
                    design.setAttribute(WidgetAttributes.DICTIONARY_ATTR, dict);
                } else {
                    dict.insertEntries(newEntries, false);
                }
            }

            @Override
            public void undo() {
                super.undo();
                if (!NullSafe.equals(prevDict, WidgetAttributes.NO_DICTIONARY)) {
                    design.setAttribute(WidgetAttributes.DICTIONARY_ATTR, prevDict);
                } else {
                    dict.removeEntries(newEntries);
                }
            }
        });
    }
    if (interaction != null) {
        interaction.setStatusMessage("Import successful");
    }
    return true;
}
Also used : ArrayList(java.util.ArrayList) RcvrParsingException(edu.cmu.cs.hcii.cogtool.util.RcvrParsingException) IOException(java.io.IOException) PersistentDate(edu.cmu.cs.hcii.cogtool.util.PersistentDate) Date(java.util.Date) PersistentDate(edu.cmu.cs.hcii.cogtool.util.PersistentDate) RcvrParsingException(edu.cmu.cs.hcii.cogtool.util.RcvrParsingException) IOException(java.io.IOException) LinkedHashMap(java.util.LinkedHashMap) DictValue(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue) DictEntry(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictEntry) AUndoableEdit(edu.cmu.cs.hcii.cogtool.util.AUndoableEdit) FileReader(java.io.FileReader) File(java.io.File)

Aggregations

DictValue (edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue)8 DictEntry (edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictEntry)7 AUndoableEdit (edu.cmu.cs.hcii.cogtool.util.AUndoableEdit)4 PendingDictEntry (edu.cmu.cs.hcii.cogtool.ui.PendingDictEntry)3 File (java.io.File)3 IOException (java.io.IOException)3 ITermSimilarity (edu.cmu.cs.hcii.cogtool.model.ITermSimilarity)2 IListenerAction (edu.cmu.cs.hcii.cogtool.util.IListenerAction)2 BufferedWriter (java.io.BufferedWriter)2 ISitedTermSimilarity (edu.cmu.cs.hcii.cogtool.model.ISitedTermSimilarity)1 DictionaryEditorUI (edu.cmu.cs.hcii.cogtool.ui.DictionaryEditorUI)1 PersistentDate (edu.cmu.cs.hcii.cogtool.util.PersistentDate)1 RcvrParsingException (edu.cmu.cs.hcii.cogtool.util.RcvrParsingException)1 FileOutputStream (java.io.FileOutputStream)1 FileReader (java.io.FileReader)1 FileWriter (java.io.FileWriter)1 OutputStreamWriter (java.io.OutputStreamWriter)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 LinkedHashMap (java.util.LinkedHashMap)1