我熟悉R中tm包的词源和补全。
我正试图想出一个快速而肮脏的方法来查找给定单词的所有变体(在一些语料库中)。例如,如果我的输入是“白细胞”,我想得到“白细胞”和“白细胞”。
如果我现在必须这么做的话,我可能会选择这样的方式:

library(tm)
library(RWeka)
dictionary <- unique(unlist(lapply(crude, words)))
grep(pattern = LovinsStemmer("company"),
    ignore.case = T, x = dictionary, value = T)

我用洛文斯是因为斯诺鲍的搬运工似乎不够有攻击性。
我对其他词干分析器、脚本语言(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

关于python - (生物医学)词干的所有可能的字形补全,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31596476/

10-12 23:09