在python中查找文本文件中每个单词的频率

时间:2015-03-14 18:09:34

标签: python python-3.x nltk

我想查找文本文件中所有单词的频率,以便我可以从中找出最常出现的单词。 有人可以帮我帮忙。

import nltk
text1 = "hello he heloo hello hi " // example text
 fdist1 = FreqDist(text1) 

我使用了上面的代码,但问题是它没有给出单词频率,而是显示每个字符的频率。 另外,我想知道如何使用文本文件输入文本。

5 个答案:

答案 0 :(得分:4)

对于它的价值,NLTK似乎对此任务有点过分。以下将按照从最高到最低的顺序为您提供单词频率。

from collections import Counter
input_string = [...] # get the input from a file
word_freqs = Counter(input_string.split())

答案 1 :(得分:4)

我看到你正在使用这个例子并且看到了你看到的相同的东西,为了使它正常工作,你必须用空格分割字符串。如果你不这样做,它似乎计算每个角色,这就是你所看到的。这将返回每个单词的正确计数,而不是字符。

import nltk

text1 = 'hello he heloo hello hi '
text1 = text1.split(' ')
fdist1 = nltk.FreqDist(text1)
print (fdist1.most_common(50))

如果你想从文件中读取并获得字数,你可以这样做:

input.txt中

hello he heloo hello hi
my username is heinst
your username is frooty

python代码

import nltk

with open ("input.txt", "r") as myfile:
    data=myfile.read().replace('\n', ' ')

data = data.split(' ')
fdist1 = nltk.FreqDist(data)
print (fdist1.most_common(50))

答案 2 :(得分:2)

nltk book中的

text1是令牌(单词,标点符号)的集合,与您的代码示例不同,text1是一个字符串(Unicode代码点集合):

>>> from nltk.book import text1
>>> text1
<Text: Moby Dick by Herman Melville 1851>
>>> text1[99] # 100th token in the text
','
>>> from nltk import FreqDist
>>> FreqDist(text1)
FreqDist({',': 18713, 'the': 13721, '.': 6862, 'of': 6536, 'and': 6024,
          'a': 4569, 'to': 4542, ';': 4072, 'in': 3916, 'that': 2982, ...})

如果您的输入确实是以空格分隔的单词,那么要查找频率,请使用@Boa's answer

freq = Counter(text_with_space_separated_words.split())

注意:FreqDistCounter,但它还定义了其他方法,例如.plot()

如果您想使用nltk代码转换器:

#!/usr/bin/env python3
from itertools import chain
from nltk import FreqDist, sent_tokenize, word_tokenize # $ pip install nltk

with open('your_text.txt') as file:
    text = file.read()
words = chain.from_iterable(map(word_tokenize, sent_tokenize(text)))
freq = FreqDist(map(str.casefold, words))
freq.pprint()
# -> FreqDist({'hello': 2, 'hi': 1, 'heloo': 1, 'he': 1})

sent_tokenize()将文字标记为句子。然后word_tokenize将每个句子标记为单词。 There are many ways to tokenize text in nltk.

答案 3 :(得分:1)

为了将频率和单词作为字典,以下代码将是有益的:

import nltk
from nltk.tokenize import word_tokenize  

for f in word_tokenize(inputSentence):  
     dict[f] = fre[f]                                                  

print dict

答案 4 :(得分:0)

我认为以下代码对您以字典形式获取文件中每个单词的出现频率很有用

myfile=open('greet.txt')
temp=myfile.read()
x=temp.split("\n")
y=list()
for item in x:
   z=item.split(" ")
   y.append(z)
count=dict()
for name in y:
   for items in name:
       if items not in count:`enter code here`
        count[items]=1
      else:
        count[items]=count[items]+1
print(count)