我正在使用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)
答案 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)