(生物医学)单词词干的所有可能的单词形式完成


问题内容

我熟悉R中tm包中的词干和补全。

我试图提出一种快速而又肮脏的方法来查找给定单词的所有变体(在一些语料库中)。例如,如果我输入的是“白细胞”,我想获得“白细胞”和“白细胞” 。

如果我现在必须这样做,那么我可能会选择类似:

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?)或完全不同的方法的建议。


问题答案:

此解决方案需要预处理您的语料库。但是一旦完成,这将是一个非常快速的字典查找。

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语料库,这将产生结果

['leukocyte', "leukocyte's", 'leukocytes']

它使用stemming可以安装的模块

pip install stemming