33

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]

你知道我有什么错吗?谢谢!

4

6 回答 6

46

FreqDist期望一个可迭代的令牌。字符串是可迭代的——迭代器产生每个字符。

首先将您的文本传递给标记器,然后将标记传递给FreqDist.

于 2011-01-08T16:44:40.063 回答
32

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

words = nltk.tokenize.word_tokenize(p)
fdist = FreqDist(words)
于 2011-06-27T23:58:28.967 回答
22

NLTKFreqDist接受任何可迭代的。由于字符串是逐个字符迭代的,它以您正在体验的方式将事物分开。

为了计算单词,您需要输入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_tokenize干净nltk.tokenize.word_tokenize的英文文本选择一个合理的默认值。还有其他几个选项可供选择,您可以在API 文档中阅读。

于 2011-01-08T19:52:49.963 回答
9

您只需像这样使用它:

import nltk
from nltk.probability import FreqDist

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

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

于 2013-08-08T06:37:23.630 回答
1
Your_string = "here is my string"
tokens = Your_string.split()

这样做,然后使用NLTK函数

它会用文字而不是字符给你的标记

于 2020-02-29T09:33:31.623 回答
0
text_dist = nltk.FreqDist(word for word in list(text) if word.isalpha())
top1_text1 = text_dist.max()
maxfreq = top1_text1
于 2020-10-03T16:06:01.480 回答