如何计算标记化列表中的中文单词频率?

时间:2013-11-05 07:25:04

标签: python tokenize word-frequency

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

我试图从输入文件中计算单词频率,这与我的标记化无关。但它也给了我一个错误的结果。 对于对应部分,它向我显示: 计数器({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)

2 个答案:

答案 0 :(得分:2)

这是不正确的:

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

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

for word in open(userinput,'r').read().split():
    cnt[word] += 1

答案 1 :(得分: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)