1

我正在使用python 2.7。我想计算中文单词的频率。我如何使用我的标记化列表来做到这一点?我想在下一步中找到句子的位置。因此,希望我可以计算单词频率,并在同一时间给我每个单词的起点和终点。

我试图从输入文件中计算词频,这与我的标记化无关。但这也给了我错误的结果。对于计数器部分,它向我显示: Counter({u'\u7684': 1}) ,但我的预期结果是 Counter({'的': 27})

#coding=UTF-8
userinput = raw_input('Enter the name of a file')
import codecs
f= codecs.open(userinput,"r","UTF-8")
str=f.read()
f.close()
import jieba
result=jieba.tokenize(str)
for tk in result:
        print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
from collections import Counter
with open(userinput) as inf:
 cnt = Counter()
 for word in [u'的']:
  cnt[word] += 1
print (cnt)
4

2 回答 2

2

这是不正确的:

for word in [u'的']:
  cnt[word] += 1

您需要在文件中的单词上运行循环:

for word in open(userinput,'r').read().split():
    cnt[word] += 1
于 2013-11-05T07:40:45.437 回答
0
for word in [u'的']:
    cnt[word] += 1

这是您的累积循环的全部。您正在遍历单个字符 u'的'。我认为这不是你想要做的。

Counter当你给它一个可迭代的时候效果最好。忘记这些cnt += 1东西,这很慢,把柜台当作defaultdict. 一次给它一个完整的迭代:

cnt = Counter(inf.read().split())

似乎您第二次不必要地打开此文件;既然您已经在上面将其标记为result,为什么不只是:

cnt = Counter(tk[0] for tk in result)
于 2013-11-05T07:51:16.960 回答