Сходство Wordnet в Java: JAWS, JWNL или Java WN::Similarity?

Мне нужно использовать Wordnet в приложении на основе Java. Я бы хотел:

  • поиск синсетов

  • найти сходство/родство между синсетами

В моем приложении используются графики RDF, и я знаю, что есть конечные точки SPARQL с Wordnet, но я думаю, что лучше иметь локальную копию набора данных, так как он не слишком велик.

Я нашел следующие банки:

Что бы вы порекомендовали для моего приложения?

Можно ли использовать библиотеку Perl из java-приложения через некоторые привязки?

Спасибо! Мулоне


person Mulone    schedule 12.05.2011    source источник


Ответы (3)


Я использую JAWS для обычных вещей wordnet, потому что он прост в использовании. Однако для показателей сходства я использую библиотеку, расположенную здесь. Вам также потребуется загрузить эту папку, содержащую предварительно обработанные данные WordNet и корпуса, чтобы она работала. Код можно использовать следующим образом, если вы поместили эту папку в другую папку с именем «lib» в папке вашего проекта:

JWS ws = new JWS("./lib", "3.0");
Resnik res = ws.getResnik();
TreeMap<String, Double> scores1 = res.res(word1, word2, partOfSpeech);
for(Entry<String, Double> e: scores1.entrySet())
    System.out.println(e.getKey() + "\t" + e.getValue());
System.out.println("\nhighest score\t=\t" + res.max(word1, word2, partOfSpeech) + "\n\n\n");

Это напечатает что-то вроде следующего, показывающего оценку сходства между каждой возможной комбинацией синсетов, представленных сравниваемыми словами:

hobby#n#1,gardening#n#1 2.6043996588901104
hobby#n#2,gardening#n#1 -0.0
hobby#n#3,gardening#n#1 -0.0
highest score   =   2.6043996588901104

Существуют также методы, которые позволяют указать значение одного или обоих слов: res(String word1, int senseNum1, String word2, partOfSpeech) и т. д. К сожалению, исходная документация не является документом JavaDoc, поэтому вам придется просматривать ее вручную. Исходный код можно загрузить здесь.

Доступные алгоритмы:

JWSRandom(ws.getDictionary(), true, 16.0);//random number for baseline
Resnik res = ws.getResnik();
LeacockAndChodorowlch = ws.getLeacockAndChodorow();
AdaptedLesk adLesk = ws.getAdaptedLesk();
AdaptedLeskTanimoto alt = ws.getAdaptedLeskTanimoto();
AdaptedLeskTanimotoNoHyponyms altnh = ws.getAdaptedLeskTanimotoNoHyponyms();
HirstAndStOnge hso = ws.getHirstAndStOnge();
JiangAndConrath jcn = ws.getJiangAndConrath();
Lin lin = ws.getLin();
WuAndPalmer wup = ws.getWuAndPalmer();

Кроме того, вам потребуется файл jar для JWI MIT.

person Nate Glenn    schedule 18.06.2011
comment
Один пункт на заметку. Я бы получил бета-версию 11.01 вместо 11.02, если вы получите пакет с cogs.susx.ac .uk/users/drh21. - person mj_; 06.08.2011
comment
@mj_: почему 11.01, а не 11.02? - person damned; 12.02.2013
comment
Дает ли приведенный выше код сходство между различными синсетами?? - person Noor; 08.03.2013
comment
@Noor Я отредактировал ответ, чтобы дать вам необходимую информацию. - person Nate Glenn; 08.03.2013
comment
Это старый поток, но я получаю сообщение об ошибке сборки в eclipse, в котором говорится, что библиотека jwi имеет конфликтующие версии scala. Пожалуйста, порекомендуйте.. - person kavita; 10.10.2016
comment
Извините, без понятия. Я никогда раньше не использовал Scala, а этой ветке уже 5 лет, так что не думаю, что в любом случае вспомню :/ - person Nate Glenn; 11.10.2016
comment
@NateGlenn Спасибо за ваш ответ, я хочу спросить вас, как установить и использовать этот API. Пожалуйста, если вы можете дать шаги для установки и все необходимые файлы. Я использую netbeans в Windows 10. - person F 505; 13.02.2018
comment
@ F505 Извините, это было 7 лет назад, и я мало что об этом помню. Пожалуйста, откройте другой вопрос, чтобы спросить об этом. - person Nate Glenn; 14.02.2018

В JAWS есть функция поиска похожих словоформ. Вот подробности:

public AdjectiveSynset[] getSimilar() генерирует исключение WordNetException, и вот ссылка, которую вы можете проверить: http://lyle.smu.edu/~tspell/jaws/doc/edu/smu/tspell/wordnet/AdjectiveSynset.html эта ссылка содержит подробную информацию, которую вы можете использовать .

person yashodhan katte    schedule 22.05.2012

Я не уверен, предоставляют ли JAWS или JWNL методы для вычисления сходства между синсетами, но я попробовал оба варианта для поиска синсетов и обнаружил, что JAWS проще в использовании. В частности, простые:

    // Specifying the Database Directory
    System.setProperty("wordnet.database.dir", "C:/WordNet/2.1/dict/");

мне было легче понять, чем требование JWNL file_properties.xml.

person MrDrews    schedule 26.05.2011