带有NLTK的FreqDist
nlp
nltk
python
12
0

python中的NLTK具有FreqDist函数,可为您提供文本中单词的出现频率。我试图将我的文本作为参数传递,但结果的形式为:

[' ', 'e', 'a', 'o', 'n', 'i', 't', 'r', 's', 'l', 'd', 'h', 'c', 'y', 'b', 'u', 'g', '\n', 'm', 'p', 'w', 'f', ',', 'v', '.', "'", 'k', 'B', '"', 'M', 'H', '9', 'C', '-', 'N', 'S', '1', 'A', 'G', 'P', 'T', 'W', '[', ']', '(', ')', '0', '7', 'E', 'J', 'O', 'R', 'j', 'x']

而在NLTK网站的示例中,结果是整个单词,而不仅仅是字母。我这样做是这样的:

file_y = open(fileurl)
p = file_y.read()
fdist = FreqDist(p)
vocab = fdist.keys()
vocab[:100]

你知道我有错吗?谢谢!

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

您只需要像这样使用它:

import nltk
from nltk.probability import FreqDist

sentence='''This is my sentence'''
tokens = nltk.tokenize.word_tokenize(sentence)
fdist=FreqDist(tokens)

变量fdist的类型为“类'nltk.probability.FreqDist”,包含单词的频率分布。

收藏
评论

FreqDist希望令牌可以迭代。字符串是可迭代的---迭代器产生每个字符。

首先将您的文本传递给令牌生成器,然后将令牌传递给FreqDist

收藏
评论

FreqDist在一组令牌上运行。您将向其发送一个字符数组(字符串),在该数组中应首先标记输入:

words = nltk.tokenize.word_tokenize(p)
fdist = FreqDist(words)
收藏
评论

NLTK的FreqDist接受任何迭代。字符串逐个字符地迭代,它以您遇到的方式将事物拉开。

为了计算单词,您需要提供FreqDist单词。你是怎样做的?好吧,您可能会想(正如其他人在对问题的回答中所建议的那样)将整个文件提供给nltk.tokenize.word_tokenize

>>> # first, let's import the dependencies
>>> import nltk
>>> from nltk.probability import FreqDist

>>> # wrong :(
>>> words = nltk.tokenize.word_tokenize(p)
>>> fdist = FreqDist(words)

word_tokenize从句子构建单词模型。它需要一次给每个句子喂一次。如果给出整个段落甚至文档,它将做得相对较差。

那么该怎么办?简单,添加一个句子标记器!

>>> fdist = FreqDist()
>>> for sentence in nltk.tokenize.sent_tokenize(p):
...     for word in nltk.tokenize.word_tokenize(sentence):
>>>         fdist[word] += 1

要记住的一件事是,有很多方法可以标记文本。 nltk.tokenize.sent_tokenizenltk.tokenize.word_tokenize模块只是为相对干净的英文文本选择了一个合理的默认值。您还可以从API文档中了解其他几种选择。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题