Как получить иерархию слов (например, гипернимы, гипонимы), используя wordnet в R
Я хочу использовать пакет wordnet в R, чтобы получить иерархию слов, например: "animal" - это гипернимое слово "cat", а "apple" - это гипоним "фрукт". Но код, который я могу найти из файла справки R wordnet, подобен приведенному ниже для идентификации антонимов:
filter <- getTermFilter("ExactMatchFilter", "cold", TRUE)
terms <- getIndexTerms("ADJECTIVE", 5, filter)
synsets <- getSynsets(terms[[1]])
related <- getRelatedSynsets(synsets[[1]],"!")
sapply(related, getWord)
Как я могу использовать пакет Wordnet R для поиска гипернимов и гипонимов слова? Благодарю.
1 ответ
Вы можете заменить "!"
(что для антонимов) в
related <- getRelatedSynsets(synsets[[1]],"!")
с другими символами в зависимости от того, что вам нужно.
Смотрите эту ссылку: http://wordnet.princeton.edu/man/wnsearch.3WN.html
Гипернимы были бы "@"
Продолжение оригинального вопроса:
Я только начал использовать WordNet, и я ищу что-то подобное. Для "яблока" я хотел бы дать мне гиперновое дерево
- 'фрукты'
- "Пища"
- "твердое вещество"
- "физическое лицо"
- так далее...
- "физическое лицо"
- "твердое вещество"
- "Пища"
как видно при нажатии на inherited hypernyms
в сети WordNet http://wordnetweb.princeton.edu/perl/webwn
Тем не менее, следующие команды
filter <- getTermFilter(type="ExactMatchFilter", word="apple", ignoreCase=TRUE)
terms <- getIndexTerms("NOUN", 15, filter)
synsets <- getSynsets(terms[[1]])
related <- getRelatedSynsets(synsets[[1]], "@")
sapply(related, getWord)
только даст мне
[[1]]
[1] "edible fruit"
[[2]]
[1] "pome" "false fruit"
следовательно, не в состоянии обеспечить меня более низкими уровнями гиперонимов
Ключом к восхождению в гиперном дереве является рекурсивное использование getRelatedSynsets().
Продолжая приведенный выше пример, извлекаем наборы из наборов Apple:
related_2 <- getRelatedSynsets(related[[1]], "@")
И собирая соответствующие слова:
sapply(related_2, getWord)
даст:
[[1]]
[1] "produce" "green goods" "green groceries" "garden truck"
[[2]]
[1] "fruit"
И идем на шаг дальше:
related_3 <- getRelatedSynsets(related2[[1]], "@")
sapply(related_3, getWord)
приведет к:
[,1]
[1,] "food"
[2,] "solid food"