我熟悉R中tm包的词干和完成。
我试图找出一种快速而肮脏的方法来查找给定单词的所有变体(在某些语料库中)。例如,我想得到白血球和#34; ;和" leuckocytic"如果我的输入是"白细胞"。
如果我现在必须这样做,我可能只会选择:
library(tm)
library(RWeka)
dictionary <- unique(unlist(lapply(crude, words)))
grep(pattern = LovinsStemmer("company"),
ignore.case = T, x = dictionary, value = T)
我使用了Lovins,因为Snowball的Porter看起来不够激进。
我对其他词干分析器,脚本语言(Python?)或完全不同的方法持开放态度。
答案 0 :(得分:1)
此解决方案需要预处理您的语料库。但是一旦完成,它就是一个非常快速的字典查找。
from_proto()
对于from collections import defaultdict
from stemming.porter2 import stem
with open('/usr/share/dict/words') as f:
words = f.read().splitlines()
stems = defaultdict(list)
for word in words:
word_stem = stem(word)
stems[word_stem].append(word)
if __name__ == '__main__':
word = 'leukocyte'
word_stem = stem(word)
print(stems[word_stem])
语料库,这会产生结果
/usr/share/dict/words
它使用可以随
一起安装的stemming
模块
['leukocyte', "leukocyte's", 'leukocytes']