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]
Run Code Online (Sandbox Code Playgroud)
你知道我错了吗?谢谢!
Era*_*mpf 28
FreqDist在一系列令牌上运行.您正在向它发送一个字符数组(字符串),您应该首先对输入进行标记:
words = nltk.tokenize.word_tokenize(p)
fdist = FreqDist(words)
Run Code Online (Sandbox Code Playgroud)
Tim*_*ara 16
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)
Run Code Online (Sandbox Code Playgroud)
word_tokenize从句子构建单词模型.需要一次一个地输入每个句子.给出整段甚至文件时,它的工作相对较差.
那么该怎么办?容易,添加一个句子tokenizer!
>>> fdist = FreqDist()
>>> for sentence in nltk.tokenize.sent_tokenize(p):
... for word in nltk.tokenize.word_tokenize(sentence):
>>> fdist[word] += 1
Run Code Online (Sandbox Code Playgroud)
要记住的一件事是,有许多方法可以标记文本.这些模块nltk.tokenize.sent_tokenize和nltk.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)
Run Code Online (Sandbox Code Playgroud)
变量fdist的类型为"class'nltk.probability.FreqDist",并包含单词的频率分布.
| 归档时间: |
|
| 查看次数: |
60623 次 |
| 最近记录: |