0

クラスの宿題のために取り組んでいる小さなPythonスクリプトがあります。スクリプトはファイルを読み取り、最も頻度の高い10個の単語とその頻度を出力します。この割り当てでは、単語は2文字以上として定義されます。単語の頻度は問題なく機能していますが、割り当ての3番目の部分は、ドキュメント内の一意の単語の総数を印刷することです。一意の単語の意味は、ドキュメント内のすべての単語を1回だけカウントします。

現在のスクリプトをあまり変更せずに、ドキュメント内のすべての単語を1回だけカウントするにはどうすればよいですか?

ps私はPython2.6を使用しているので、collections.Counterの使用については言及しないでください。

from string import punctuation
from collections import defaultdict
import re

number = 10
words = {}
total_unique = 0
words_only = re.compile(r'^[a-z]{2,}$')
counter = defaultdict(int)


"""Define words as 2+ letters"""
def count_unique(s):
    count = 0
    if word in line:
        if len(word) >= 2:
            count += 1
    return count


"""Open text document, read it, strip it, then filter it"""
txt_file = open('charactermask.txt', 'r')

for line in txt_file:
    for word in line.strip().split():
        word = word.strip(punctuation).lower()
        if words_only.match(word):
               counter[word] += 1


# Most Frequent Words
top_words = sorted(counter.iteritems(),
                    key=lambda(word, count): (-count, word))[:number] 

print "Most Frequent Words: "

for word, frequency in top_words:
    print "%s: %d" % (word, frequency)


# Least Frequent Words:
least_words = sorted(counter.iteritems(),
                    key=lambda (word, count): (count, word))[:number]

print " "
print "Least Frequent Words: "

for word, frequency in least_words:
    print "%s: %d" % (word, frequency)


# Total Unique Words:
print " "
print "Total Number of Unique Words: %s " % total_unique
4

2 に答える 2

2

辞書にあるkeysの数を数えます。counter

total_unique = len(counter.keys())

またはもっと簡単に:

total_unique = len(counter)
于 2012-09-20T00:03:19.140 に答える
2

Adefaultdictは素晴らしいですが、それはあなたが必要とするもの以上のものかもしれません。あなたは最も頻繁な単語についての部分のためにそれを必要とするでしょう。しかし、その質問がない場合、aを使用するのdefaultdictはやり過ぎです。setこのような状況では、代わりに次のものを使用することをお勧めします。

words = set()
for line in txt_file:
    for word in line.strip().split():
        word = word.strip(punctuation).lower()
        if words_only.match(word):
               words.add(word)
num_unique_words = len(words)

現在words、一意の単語のみが含まれています。

あなたがPythonに不慣れであるとあなたが言うので、私はこれを投稿しているだけです、それであなたがsも知っていることを確認したいと思いますset。繰り返しますが、あなたの目的のために、defaultdictうまく機能し、正当化されます

于 2012-09-20T00:13:07.607 に答える