Как найти все связанные ключевые слова для корневого слова? - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь найти способ найти все ключевые слова, которые происходят от одного и того же корневого слова (в каком-то смысле противоположное действие происходит).В настоящее время я использую R для кодирования, но я открыт для переключения на другой язык, если это поможет.

Например, у меня есть корневое слово "аренда", и я хотел бы найти "аренда »,« съемщик »,« аренда »,« аренда »и т. д.

Ответы [ 3 ]

0 голосов
/ 23 сентября 2019

Для ответа R вы можете попробовать эти функции в качестве отправной точки. db дает grepl в качестве примера, вот еще несколько:

words =  c("renting", "renter", "rental", "rents", "apple", "brent")
grepl("rent", words) # TRUE TRUE TRUE TRUE FALSE TRUE
startsWith(words, "rent") # TRUE TRUE TRUE TRUE FALSE FALSE
endsWith(words, "rent") # FALSE FALSE FALSE FALSE FALSE TRUE
0 голосов
/ 25 сентября 2019

Попробуйте этот код на python:

from pattern.en import lexeme
print(lexeme("rent")

сгенерированный вывод:
enter image description here
Установка :
шаблон установки pip
pip install nltk
Теперь откройте терминал, введите python и запустите приведенный ниже код.

import nltk
nltk.download(["wordnet","wordnet_ic","sentiwordnet"])

После установкиготово, снова запустите код шаблона.

0 голосов
/ 23 сентября 2019

Вы хотите найти противоположность Стеммингу, но вам может пригодиться стемминг.

Посмотрите на этот пример на Python:

from nltk.stem.porter import PorterStemmer

stemmer = PorterStemmer()
words = ["renting", "renter", "rental", "rents", "apple"]
all_rents = {}
for word in words:
    stem = stemmer.stem(word)
    if stem not in all_rents:
        all_rents[stem] = []
        all_rents[stem].append(word)
    else:
        all_rents[stem].append(word)
print(all_rents)

Результат:

{'рента': ['рента', 'рента'], 'арендатор': ['арендатор'], 'аренда': ['аренда'], 'приложение': ['яблоко']}

Есть несколько других алгоритмов для использования.Однако имейте в виду, что основатели основаны на правилах и не являются "умными" в той степени, в которой они будут выбирать все связанные слова (как видно выше).Вы даже можете реализовать свои собственные правила (расширить API Stem от NLTK).

Подробнее обо всех доступных стемерах в NLTK (модуль, который использовался в приведенном выше примере) здесь: https://www.nltk.org/api/nltk.stem.html

Вы также можете реализовать свой собственный алгоритм.Например, вы можете реализовать Levenshtein Distance (как предложено в комментарии @noski), чтобы вычислить меньший общий префикс.Однако вы должны провести собственное исследование по этому вопросу, поскольку это сложный процесс.

...