【问题标题】:Stemming unstructured text in NLTK在 NLTK 中提取非结构化文本
【发布时间】:2013-10-02 21:31:17
【问题描述】:

我尝试了正则表达式词干分析器,但我得到了数百个不相关的标记。我只是对“玩”词干感兴趣。这是我正在使用的代码:

import nltk
from nltk.book import *
f = open('tupac_original.txt', 'rU')
text = f.read()
text1 = text.split()
tup = nltk.Text(text1)
lowtup = [w.lower() for w in tup if w.isalpha()]
import sys, re
tupclean = [w for w in lowtup if not w in nltk.corpus.stopwords.words('english')]
from nltk import stem
tupstem = stem.RegexpStemmer('az$|as$|a$')
[tupstem.stem(i) for i in tupclean] 

上面的结果是;

['like', 'ed', 'young', 'black', 'like'...]

我正在尝试清理.txt 文件(全部小写,删除停用词等),将一个单词的多个拼写规范化为一个并进行频率分布/计数。我知道怎么做FreqDist,但是关于我在哪里做词干有什么建议吗?

【问题讨论】:

标签: nltk tokenize text-analysis lemmatization


【解决方案1】:

NLTK 中有几个预编码的知名词干分析器,请参阅http://nltk.org/api/nltk.stem.html,下面显示了一个示例。

>>> from nltk import stem
>>> porter = stem.porter.PorterStemmer()
>>> lancaster = stem.lancaster.LancasterStemmer()
>>> snowball = stem.snowball.EnglishStemmer()
>>> tokens =  ['player', 'playa', 'playas', 'pleyaz'] 
>>> [porter(i) for i in tokens]
>>> [porter.stem(i) for i in tokens]
['player', 'playa', 'playa', 'pleyaz']
>>> [lancaster.stem(i) for i in tokens]
['play', 'play', 'playa', 'pleyaz']
>>> [snowball.stem(i) for i in tokens]
[u'player', u'playa', u'playa', u'pleyaz']

但您可能需要某种正则表达式词干分析器,

>>> from nltk import stem
>>> rxstem = stem.RegexpStemmer('er$|a$|as$|az$')
>>> [rxstem.stem(i) for i in tokens]
['play', 'play', 'play', 'pley']

【讨论】:

  • 我编辑了我的问题。 Y=我尝试了您的 regexStem 并获得了多个令牌。不知道我哪里出错了。
  • 将最后一行更改为[tupstem.stem(i) for i in tupclean if "pl" in tupclean and "y" in tupstem.stem(i)]。在语言学中,会发生元音转换,假设双元音和声母仍然存在,那么辅音簇“pl”也将出现在正字法中。
  • 试过了,但它并没有真正做到我希望它会做的事情。还是谢谢!
  • 我已经安装了 nltk 并且可以在其他情况下使用它,但是我在上述所有方面都遇到了模块导入错误---`>>> from nltk import stem >>> snowball = stem。 snowball.EnglishStemmer() >>> [snowball(i) for i in ['Playing', "swimming", "dancing"]] Traceback (last last 最近调用): File "", line 1, in 类型错误:'EnglishStemmer'对象不可调用```
  • 精选的例子展示了 nltk 词干分析器的有趣极端案例
猜你喜欢
  • 2016-09-07
  • 1970-01-01
  • 2011-08-18
  • 2021-11-29
  • 2018-10-28
  • 2020-09-07
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多