繁体   English   中英

FreqDist 与 NLTK

[英]FreqDist with NLTK

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]

你知道我有什么问题吗? 谢谢!

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 文档 中阅读。

你只需要像这样使用它:

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”,包含单词的频率分布。

Your_string = "here is my string"
tokens = Your_string.split()

这样做,然后使用NLTK函数

它会给你的代币用文字而不是字符

text_dist = nltk.FreqDist(word for word in list(text) if word.isalpha())
top1_text1 = text_dist.max()
maxfreq = top1_text1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM