【问题标题】:Run a file through Porter Stemmer通过 Porter Stemmer 运行文件
【发布时间】:2018-09-29 09:12:50
【问题描述】:

我是 python 的新手,正在练习书中的示例。 我能干一个字:

>>> from nltk.stem import PorterStemmer
>>> stemmer=PorterStemmer()
>>> stemmer.stem('programming')
'program'

但我无法通过 Porter 词干分析器运行文本文件的前 50 个单词。

编辑:除了 split() 之外还有其他方法吗? split() 有时会给出错误的结果。

【问题讨论】:

  • for word in open('/path/to/file').read().split()[:50]: print(stemmer.stem(word))
  • *注意 file.read().split() 假定标记化 ;P

标签: python nltk porter-stemmer


【解决方案1】:

如果您正在读取每行有一个标记的文件,则应在运行词干分析器之前去除新行的标记。

from nltk.stem.porter import PorterStemmer

stemmer = PorterStemmer()

with open('tokens.txt', 'r') as fp:
    tokens = fp.readlines()

for t in tokens:
    s = stemmer.stem(t.strip())
    print(s)

【讨论】:

    【解决方案2】:

    怎么样

    wholefile = open("text.txt", "r").read()
    words = wholefile.split()
    stems = [ stemmer.stem(word) for word in words]
    

    编辑:实际上,评论海报给了你同样的东西,但更全面。使用他的解决方案。

    EDIT2:谢谢,falsetru :)

    【讨论】:

    • @user2064809:不,falsetru的代码本身是正确和完整的,我不打算抄袭它。 Falsetru 决定在评论中发布它,我尊重这个选择。如果 falsetru 的意图是在答案中发布他的代码,他/她可以自己完成,而无需进一步工作。
    • 它的词干不正确。例如,'Melody' 应转换为 'Melodi'。但它仍然是“旋律”。有时它不会从词尾删除“s”。这个问题是因为 split() 吗?!
    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多