Wordnet Сходство в Java: JAWS, JWNL или Java WN:: Сходство?
Мне нужно использовать Wordnet в приложении на основе Java. Я бы хотел:
поисковые синтаксисы
найти сходство / родство между наборами
Мое приложение использует графики RDF, и я знаю, что есть конечные точки SPARQL с Wordnet, но я думаю, что лучше иметь локальную копию набора данных, так как он не слишком большой.
Я нашел следующие банки:
- Общая библиотека - JAWS http://lyle.smu.edu/~tspell/jaws/index.html
- Общая библиотека - JWNL http://sourceforge.net/projects/jwordnet
- Библиотека сходства (Perl) - Wordnet:: Similarity http://wn-similarity.sourceforge.net/
- Java-версия Wordnet:: сходство http://www.cogs.susx.ac.uk/users/drh21/ (бета)
Что бы вы посоветовали для моего приложения?
Можно ли использовать библиотеку Perl из Java-приложения через некоторые привязки?
Спасибо! Mulone
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();
В JAWS есть функция для поиска похожих словоформ. Вот подробности:
public AdjectiveSynset [] getS Similar() выбрасывает WordNetException, и вот ссылка, которую вы можете проверить: http://lyle.smu.edu/~tspell/jaws/doc/edu/smu/tspell/wordnet/AdjectiveSynset.html эта ссылка включает в себя детали, которые вы можете использовать.
Я не уверен, предоставляют ли JAWS или JWNL методы для вычисления сходства между наборами синтаксиса, но я пробовал оба для поиска наборов и нашел, что JAWS проще в использовании. В частности, просто:
// Specifying the Database Directory
System.setProperty("wordnet.database.dir", "C:/WordNet/2.1/dict/");
мне было легче понять, чем требование file_properties.xml в JWNL.