R 如何找到一个根单词的所有相关关键字?

R 如何找到一个根单词的所有相关关键字?,r,nlp,stemming,R,Nlp,Stemming,我试图找出一种方法来找到所有来自同一个词根的关键词(在某种意义上,词干的相反作用)。目前,我使用R进行编码,但如果有帮助的话,我愿意切换到另一种语言 例如,我有一个词根“rent”,我希望能够找到“renting”、“renter”、“rent”、“rents”等等。你想找到词干的反面,但是词干可以是你的方法 请看Python中的这个示例: from nltk.stem.porter import PorterStemmer stemmer = PorterStemmer() words =

我试图找出一种方法来找到所有来自同一个词根的关键词(在某种意义上,词干的相反作用)。目前,我使用R进行编码,但如果有帮助的话,我愿意切换到另一种语言


例如,我有一个词根“rent”,我希望能够找到“renting”、“renter”、“rent”、“rents”等等。

你想找到词干的反面,但是词干可以是你的方法

请看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)
结果:

{'rent':['renting','rents'],'renter':['renter'],'rent':['rent'],'appl':['apple']}

还有其他几种算法可供使用。但是,请记住,词干分析器是基于规则的,不会“聪明”到可以选择所有相关单词的程度(如上所示)。您甚至可以实现自己的规则(从NLTK扩展Stem API)

阅读NLTK(上例中使用的模块)中所有可用词干分析器的更多信息:


您也可以实现自己的算法。例如,您可以实现Levenshtein距离(如@noski comment中建议的)来计算较小的公共前缀。但是,由于这是一个复杂的过程,您必须对其进行自己的研究。

对于
R
答案,您可以尝试这些函数作为起点。d、 b给出了
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

在python中尝试以下代码:

from pattern.en import lexeme
print(lexeme("rent")
生成的输出为:

安装
pip安装模式
pip安装nltk
现在,打开一个终端,键入python并运行以下代码。

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

安装完成后,再次运行模式代码。

对于简单的情况,
grepl(“rent”,c(“renting”,“renter”,“rent”,“rent”,“rents”,“apple”))
可能会起作用。您还可以查看诸如Levenshtein距离之类的内容,它可以测量单词的相似性。