有一个名为nltk的库,它有一个用于文本处理的疯狂数组函数.其中一个功能子集stemmers就是你想要的(使用由具有该领域丰富经验的人开发的算法/代码).以下是使用Porter Stemming算法的结果:
In [3]: import nltk
In [4]: verbs = ["want", "wants", "wanting", "wanted"]
In [5]: for verb in verbs:
...: print nltk.stem.porter.PorterStemmer().stem_word(verb)
...:
want
want
want
want
Run Code Online (Sandbox Code Playgroud)
你可以结合使用它defaultdict来做这样的事情(注意:在Python 2.7+中,a Counter同样有用/更好):
In [2]: from collections import defaultdict
In [3]: from nltk.stem.porter import PorterStemmer
In [4]: verbs = ["want", "wants", "wanting", "wanted", "running", "runs", "run"]
In [5]: freq = defaultdict(int)
In [6]: for verb in verbs:
...: freq[PorterStemmer().stem_word(verb)] += 1
...:
In [7]: freq
Out[7]: defaultdict(<type 'int'>, {'run': 3, 'want': 4})
Run Code Online (Sandbox Code Playgroud)
有一点需要注意:词干分析器并不完美 - 例如,添加ran到上面会产生这样的结果:
defaultdict(<type 'int'>, {'ran': 1, 'run': 3, 'want': 4})
Run Code Online (Sandbox Code Playgroud)
但希望它会让你接近你想要的.
| 归档时间: |
|
| 查看次数: |
1648 次 |
| 最近记录: |