Сходство Wordnet в Java: JAWS, JWNL или Java WN :: Сходство?
-
12-11-2019 - |
Вопрос
Мне нужно использовать WordNet в приложении на основе Java. Я хочу:
- .
-
Поиск синзеров
-
Найти сходство / родство между синзерами
Мое приложение использует графики RDF, и я знаю, что есть конечные точки SPARQL с Wordnet, но я думаю, что лучше иметь локальную копию набора данных, так как он не слишком большой.
Я нашел следующие банки:
- .
- Общая библиотека - <Сильные> челюсти http:// lyle. smu.edu/~tspell/jaws/index.html
- Общая библиотека - jwnl http://sourceforge.net/projects/jwordnet
- Библиотека сходства (perl) - wortnet :: Сходство http:// wn-- Andality.sourceforge.net/
- java версия wordnet :: Сходство http://www.cogs.susx. AC.UK/USERS/DRH21/ (бета)
Что бы вы порекомендовали для моего приложения?
Возможно ли использовать библиотеку Perl из приложения Java через некоторые привязки?
Спасибо! Mulone
Решение
Я использую челюсти для обычных материалов Wordnet, потому что это легко использовать. Однако для метрик сходства я использую библиотеку, расположенную здесь . Вам также нужно будет скачать Это папка , содержащая предварительно обработанные данные WordNet и Corpus, для его работы. Код можно использовать, как это, предполагая, что вы поместили эту папку в другом под названием «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 для MIT's JWI
Другие советы
Есть функция в челюстях, чтобы найти аналогичные слова Вот детали:
Общественные прилагательные [] goodimilar () бросает wordnetexception и вот ссылка, которую вы можете проверить: http://ylyle.smu.edu/~tspell/jaws/doc/edu/smu/tspell/wordnet/adjectsynse.html Эта ссылка на это содержит детали, которые вы можете использовать.
Я не уверен, что либо челюсти, либо JWNL предоставят методы для расчета сходства между синзерами, но я пробовал как для поиска синзешек, и я нашел челюсти проще для использования.В частности, простой:
// Specifying the Database Directory
System.setProperty("wordnet.database.dir", "C:/WordNet/2.1/dict/");
.
было легче понять, чем требование JWNL File_Properties.xml.