【问题标题】:NLTK stemming does not pass a simple caseNLTK 词干提取没有通过简单的案例
【发布时间】:2017-06-18 20:24:27
【问题描述】:

我是 NLTK 的新手,我正在对词干案例使用词干分析器功能。

我有一个简单的例句要处理,它是:“Turn on the lightin”。我想看看 NLTK 词干分析器是否可以帮助我过滤掉错字“lightin”。我已经用“lighting”测试了词干分析器,snowBall 词干分析器可以为我返回正确的词“light”,但在我的测试中,snowBall 词干分析器返回“lightin”。

我的词干提取过程非常简单:

tokens = "Turn on the lightin"
for token in tokens:
    print("SnowBall Lemmatizer: "+snowBallStemmer.stem(token))

根据 NTLK 的文档,snowBallStemmer 可用于词干英语。我想知道为什么 snowBallStemmer 无法阻止“lightin”,我可以做些什么来解决这个问题。

【问题讨论】:

  • Snowball 词干分析器是基于规则的,因此编辑起来应该很简单。看看source:您需要将“in”添加到步骤 1b 的列表中就足够了。 (如果您在子类中执行此操作,则类属性会有些棘手……)
  • @lenz 这有帮助。

标签: python nlp nltk spell-checking stemming


【解决方案1】:

尝试在词干提取之前运行拼写检查器(例如pyenchant):

>>> import enchant
>>> from nltk.stem import SnowballStemmer

>>> d = enchant.Dict("en_US")
>>> d.suggest('lightin')
['lighting', 'lighten', 'light in', 'light-in', 'lightning', 'lightering', 'sighting', 'light', 'flitting', 'Litton']

>>> snowball = SnowballStemmer('english')
>>> snowball.stem(d.suggest('lightin')[0])
u'light'

>>> sent = "Turn on the lightin".split()
>>> [snowball.stem(word if d.check(word) else d.suggest(word)[0]) for word in sent]
[u'turn', 'on', u'the', u'light']

【讨论】:

  • 可以,但 d.suggest('lightin') 仅适用于您手动选择第一个建议时的特定情况。
  • 我很想知道这将在您的数据集上达到多少 % 的准确率。如果这还不够。以及在选择建议时使用更聪明的困惑方法是否有帮助。
  • Spellchecker 在我的情况下具有非常纯正的准确性。
猜你喜欢
  • 1970-01-01
  • 2014-11-13
  • 2019-11-20
  • 2015-01-07
  • 1970-01-01
  • 2016-03-31
  • 2021-11-01
  • 2020-08-29
  • 1970-01-01
相关资源
最近更新 更多