2

約 20,000 個のファイルを含むドキュメント内の単語の出現頻度をカウントするコードを書いています。ドキュメント内の単語の全体的な頻度を取得できます。これまでのコードは次のとおりです。

import os
import re
import sys
sys.stdout=open('f2.txt','w')
from collections import Counter
from glob import iglob

def removegarbage(text):
    text=re.sub(r'\W+',' ',text)
    text=text.lower()
    return text

folderpath='d:/articles-words'
counter=Counter()
d=0

for filepath in iglob(os.path.join(folderpath,'*.txt')):
    with open(filepath,'r') as filehandle:
        d+=1

r=round(d*0.1)
for filepath in iglob(os.path.join(folderpath,'*.txt')):
    with open(filepath,'r') as filehandle:
        words=set(removegarbage(filehandle.read()).split())
        if r > counter:
             counter.update()

for word,count in counter.most_common():
    print('{}  {}'.format(word,count))

しかし、私は自分のカウンターを変更し、カウントが r=0.1*(ファイルの数) より大きい場合にのみ更新したいと考えています。要するに、ドキュメント全体での頻度が数の 10% を超える単語を読みたいのです。ドキュメントの。エラーは次のとおりです。

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
TypeError: unorderable types: int() > Counter()

どうすれば変更できますか?

4

1 に答える 1

2

このようなものはどうですか?

from glob import glob # (instead of iglob)

...

filepaths = glob(os.path.join(folderpath,'*.txt'))

num_files = len(filepaths)

# Add all words to counter
for filepath in filepaths):
    with open(filepath,'r') as filehandle:
        lines = filehandle.read()
        words = removegarbage(lines).split()
        counter.update(words)

# Display most common
for word, count in counter.most_common():

    # Break out if the frequency is less than 0.1 * the number of files
    if count < 0.1*num_files:
        break

    print('{}  {}'.format(word,count))

の使用Counter.iteritems():

>>> from collections import Counter
>>> c = Counter()
>>> c.update(['test', 'test', 'test2'])
>>> c.iteritems()
<dictionary-itemiterator object at 0x012F4750>
>>> for word, count in c.iteritems():
...     print word, count
...     
test 2
test2 1
于 2013-06-17T03:00:08.547 に答える