Поиск в 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!");
}
Работает отлично.