0

私がやりたいことは、ファイルから読み取ってから、単語ごとに、出現回数とともに辞書に追加することです。

例:

'今日は日曜日です。明日は日曜日ではありません。

私の辞書は次のようになります: {'today': 1, 'is': 2, 'sunday': 2, 'tomorrow': 1, 'not': 1}

私が行っている方法は、readline と split を使用してリストを作成し、各要素とその値を空の辞書に追加することですが、これまでのところ実際には機能していません。不完全ではありますが、これまでのところ私が持っているものは次のとおりです。

file = open('any_file,txt', 'r')

for line in file.readline().split():
     for i in range(len(line)):
         new_dict[i] = line.count(i)  # I'm getting an error here as well, saying that  
return new_dict                       # I can't convert int to str implicitly 

これの問題は、各行が読み取られるときに辞書が更新されると、単語の値が累積されないことです。したがって、別の行で 'sunday' が 3 回発生した場合、辞書には {'sunday': 5} ではなく {'sunday': 3} が含まれます。助けはありますか?ここからどこへ行けばいいのかわからず、これらすべてに慣れていません。

4

4 に答える 4

2

を探していcollections.Counterます。

例えば:

from itertools import chain

with open("file.txt") as file:
    Counter(chain.from_iterable(line.split() for line in file))

(ジェネレーター式も使用します。)itertools.chain.from_iterable()

あなたの例は最初の行でのみ機能することに注意してください。これは意図的なものではないと思います。この解決策はファイル全体に適用されます (明らかに、それを交換するのは簡単です)。

于 2013-02-04T03:56:49.410 に答える
1

これは句読点を扱わない単純なバージョンです

from collections import Counter
counter = Counter()
with open('any_file,txt', 'r') as file:
    for line in file:
        for word in line.split():
            counter[word] += 1

次のように書くこともできます。

from collections import Counter
counter = Counter(word for line in file for word in line.split())

を使用して問題を解決する 1 つの方法を次に示します。dict

counter = {}
with open('any_file,txt', 'r') as file:
    for line in file:
        for word in line.split():
            if word not in counter:
                counter[word] = 1
            else:
                counter[word] += 1
于 2013-02-04T04:00:47.047 に答える
0

これを試して

 file = open('any_file.txt', 'r')
 myDict = {}
 for line in file:
     lineSplit = line.split(" ")
     for x in xrange(len(lineSplit)):
         if lineSplit[x] in myDict.keys(): myDict[lineSplit[x]] += 1
         else: myDict[lineSplit[x]] = 1

 file.close()

 print myDict
于 2013-02-04T04:07:52.407 に答える
0

Python 3 または Python 2.7 を使用していますか?

はいの場合は、コレクション ライブラリの Counter を使用します。

import re
from collections import Counter
words = re.findall('\w+', open('any_file.txt').read().lower())
Counter(words).most_common(10)

ただし、タプルのリストを取得します。タプルのリストを辞書に変換するのは簡単なはずです。

于 2013-02-04T04:00:27.240 に答える