Поиск в WordNet по синонимам дает только один результат

Я использую java jwi API для поиска в wordnet, чтобы получить синонимы слова. Проблема в том, что он дает мне только один результат - слово, чтобы найти его синонимы. Пожалуйста, ведите меня. Можно ли получить список всех возможных синонимов данного слова? Мой код:

  public void searcher() {
    try {

        url = new URL("file", null, path);


        dict = new Dictionary(url);
        try {
            dict.open();
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, "Dictionary directory does not exist\n" + ex + "\nClass:Meaning Thread", "Dictionary Not Found Error", JOptionPane.ERROR_MESSAGE);

        }

        IIndexWord idxWord = dict.getIndexWord("capacity", POS.NOUN);
        IWordID wordID = idxWord.getWordIDs().get(0);
        IWord word = dict.getWord(wordID);


        //Adding Related Words to List of Realted Words
        ISynset synset = word.getSynset();
        for (IWord w : synset.getWords()) {
            System.out.println(w.getLemma());
        }


    } catch (Exception e) {
    }

}

Выход только:

capacity

сам! Фактические синонимы должны быть:

  capability
  capacitance 
  content
  electrical capacitance
  mental ability...(so on)

Итак, есть ли что-то, что я пропустил в коде, или кто-нибудь может дать мне какие-нибудь идеи, в чем заключается настоящая проблема?

заранее спасибо

3 ответа

Решение

Итак, вот ответ, я использую Java JAWS для поиска в Wordnet! Шаги:

    1- Download WordNet Dictionary from 

Вот

    2- Install WordNet
    3- Go to Installed Directory and copied the WordNet Directory (in my case C:\Program Files (x86) was the Directory for WordNet Folder)
    4- Pasted it into my Java Project (under MyProject>WordNet)
    5- Making Path to the directory as:
       File f=new File("WordNet\\2.1\\dict");
       System.setProperty("wordnet.database.dir", f.toString());
    6- Got Synonyms as:

       public class TestJAWS{
              public static void main(String[] args){
                    String wordForm = "capacity";
                    //  Get the synsets containing the word form=capicity

                   File f=new File("WordNet\\2.1\\dict");
                   System.setProperty("wordnet.database.dir", f.toString());
                   //setting path for the WordNet Directory

                   WordNetDatabase database = WordNetDatabase.getFileInstance();
                   Synset[] synsets = database.getSynsets(wordForm);
                   //  Display the word forms and definitions for synsets retrieved

                   if (synsets.length > 0){
                      ArrayList<String> al = new ArrayList<String>();
                      // add elements to al, including duplicates
                      HashSet hs = new HashSet();
                      for (int i = 0; i < synsets.length; i++){
                         String[] wordForms = synsets[i].getWordForms();
                           for (int j = 0; j < wordForms.length; j++)
                           {
                             al.add(wordForms[j]);
                           }


                      //removing duplicates
                       hs.addAll(al);
                       al.clear();
                       al.addAll(hs);

                      //showing all synsets
                      for (int i = 0; i < al.size(); i++) {
                            System.out.println(al.get(i));
                      }
                   }
              }
              }
              else
              {
               System.err.println("No synsets exist that contain the word form '" + wordForm + "'");
              }
       } 

Дело в том, что вы должны иметь jaws-bin.jar

То, что вы получаете, - это " емкость № 1 ", которая имеет значение "способность выполнять или производить", и у нее действительно есть только один синоним. (Поэкспериментируйте со страницей поиска PWN, чтобы понять, как WordNet организует слова в наборы.)

Похоже, что вы после того, как объединение всех синонимов во всех наборах? Я думаю, что вы либо используете getSenseEntryIterator() или просто поставить петлю idxWord.getWordIDs().get(0);, заменяя 0 со счетчиком цикла, так что вы не только получаете первый элемент в массиве.

Если вы хотите использовать JWI и хотите получить более одного синонима, измените свой код именно с этого места:

IIndexWord idxWord = dict.getIndexWord(inputWord, POS.NOUN);
        try {
            int x = idxWord.getTagSenseCount();
            for (int i = 0; i < x; i++) {
                IWordID wordID = idxWord.getWordIDs().get(i);
                IWord word = dict.getWord(wordID);

                // Adding Related Words to List of Realted Words
                ISynset synset = word.getSynset();
                for (IWord w : synset.getWords()) {
                    System.out.println(w.getLemma());
                    // output.add(w.getLemma());
                }
            }
        } catch (Exception ex) {
            System.out.println("No synonym found!");
        }

Работает отлично.

Другие вопросы по тегам