我在NLTK中一直在玩一堆词干和词法,但没有一个能做我想要的。我有一堆词,如“放射科医生”,“放射学”,“心脏病学家”,“心脏病学”等...我希望*医生可以像* ology一样去找同一个桶。我在Python中尝试过PorterStemmer,SnowballStemmer和WordNet的Lemmatizer,但没有任何东西将它们发送到同一个桶中。似乎干预应该实现这一点,而这些并不是非常罕见的词汇。你会如何实现预期的结果呢?
答案 0 :(得分:1)
答案 1 :(得分:0)
这样的东西?
>>> s = 'cardiology'
>>> s = s[:-5] if s.endswith('ology') else s
>>> s = s[:-7] if s.endswith('ologist') else s
>>> s
'cardi'
>>> s = 'cardiologist'
>>> s = s[:-5] if s.endswith('ology') else s
>>> s = s[:-7] if s.endswith('ologist') else s
>>> s
'cardi'
答案 2 :(得分:0)
词干提取/词素化的过程假定仅除去拐点后缀(即从单词-s
除去radiologists
后缀),而您也想除去导数后缀。
尝试Lingua Robot。它能够将单词分割成词素。例如,单词simplifications
分为基本单词simple
(我想这是您要检索的内容)和派生后缀(-ify
,-ation
和{{ 1}})。您的情况不是那么简单,因为根据API -s
仅包含词缀(radiologist
+ radio-
+ -logy
)。不知何故,您将需要弄清楚在这种情况下要保留的词缀。我也不确定是否要保留前缀(-ist
→preprocess
)。除此之外,您还需要考虑复合词,因为它们包含多个词根。