我一直在玩NLTK中的一堆词干分析器和词形还原器,但没有一个能满足我的要求。我有一堆词,如“radiologist”、“radiology”、“cardiologist”、“cardiology”等……我想让 *ologist 与 *ology 同一个桶。我在 Python 中尝试过 PorterStemmer、SnowballStemmer 和 WordNet 的 Lemmatizer,但没有将它们发送到同一个存储桶。似乎词干提取应该可以做到这一点,而且这些词并不少见。您将如何实现预期的结果?
问问题
133 次
3 回答
1
你看过莫菲索吗?它具有一堆变形分割算法。显然,使用此工具可以进行您正在寻找的分析。这是链接 [1]:http ://asr.aalto.fi/morfessordemo/
于 2016-04-07T17:28:16.890 回答
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'
于 2016-04-07T12:19:38.583 回答
0
词干提取/词形还原的过程假定仅删除屈折变化后缀(即-s
从单词中删除后缀radiologists
),而您也想删除派生后缀。
试试灵瓜机器人。它能够将单词分割成语素。例如,这个词simplifications
被分割成基本词simple
(我假设这是你想要检索的)和派生后缀(-ify
,-ation
和-s
)。根据API,您的情况并不那么简单,radiologist
仅包含词缀(radio-
+ -logy
+ -ist
)。不知何故,你需要弄清楚在这种情况下要留下什么词缀。我也不确定您是否要留下前缀(preprocess
→ process
)。除此之外,您还需要考虑复合词,因为它们包含多个词根。
于 2019-10-07T22:06:28.513 回答