これは奇妙です。テキスト頻度計算を実装しようとしており、ipython ノートブックで python 2.7 を使用して次のコードを実行しています。関数の 3 つのバージョン。
最初のバージョンでは、文字列のリスト内の単語のインスタンスを数えて、辞書に貼り付けます。
testList = ['I', 'am', 'a', 'list', 'of', 'strings']
def tf1(listOfStrs):
thedict = dict((x,listOfStrs.count(x)) for x in set(listOfStrs))
print thedict
# produces expected output:
> {'a': 1, 'I': 1, 'am': 1, 'list': 1, 'of': 1, 'strings': 1}
わかりました、それはうまくいきます。各出現を単語の総数で割って、実際に頻度を取得する時間。0.16...などを生成する必要があります。
def tf2(listOfStrs):
print len(listOfStrs)
thedict = dict((x,listOfStrs.count(x)/len(listOfStrs)) for x in set(listOfStrs))
print thedict
tf2(testList)
> 6
> {'a': 0, 'I': 0, 'am': 0, 'list': 0, 'of': 0, 'strings': 0}
「ああ!」おもう。これは、世界で最も修正しやすいバグです。整数除算をしています。私は整数除算をしたくありません。項の 1 つを float にキャストするだけです。バム。
def tf2(listOfStrs):
print len(listOfStrs)
thedict = dict((x,listOfStrs.count(x)/float(len(listOfStrs)) for x in set(listOfStrs))
print thedict
> File "<ipython-input-13-db67e35f2596>", line 3
> thedict = dict((x,listOfStrs.count(x)/float(len(listOfStrs)) for x in set(listOfStrs))
> ^
> SyntaxError: invalid syntax
???? for ステートメントに構文エラーがないことはわかっています。前の 2 つのバージョンでは問題なく機能していたからです。うーん。したがって、明らかにフロートへのキャストは辞書の理解を壊しました。しかし、それは正気ではないようです。int を float にキャストするだけです。それは世界で最も簡単な操作です...どのように辞書の理解を破ったのですか?
私はこれに完全に困惑しています...誰か素晴らしいアイデアを持っていますか?