如何将* ologist和* ology等单词用于干/同源到同一根?

时间:2016-04-06 23:58:06

标签: python nltk stemming lemmatization

我在NLTK中一直在玩一堆词干和词法,但没有一个能做我想要的。我有一堆词,如“放射科医生”,“放射学”,“心脏病学家”,“心脏病学”等...我希望*医生可以像* ology一样去找同一个桶。我在Python中尝试过PorterStemmer,SnowballStemmer和WordNet的Lemmatizer,但没有任何东西将它们发送到同一个桶中。似乎干预应该实现这一点,而这些并不是非常罕见的词汇。你会如何实现预期的结果呢?

3 个答案:

答案 0 :(得分:1)

你看过Morfessor吗?它具有一堆变形分段算法。显然,使用此工具可以进行所需的分析。这是链接[1]:http://asr.aalto.fi/morfessordemo/

答案 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)。不知何故,您将需要弄清楚在这种情况下要保留的词缀。我也不确定是否要保留前缀(-istpreprocess)。除此之外,您还需要考虑复合词,因为它们包含多个词根。

相关问题