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ます。iterable 全体を一度にフィードします。

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

また、このファイルを不必要にもう一度開いているようです。上記ですでに にトークン化したので、次のようにしresultないのはなぜですか。

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