map-reduce の概念を理解しようとしており、Python 用のオープン ソース ライブラリである mincemeat.py を使用して小さなプログラムを実装することを検討しています。
マッパーとリデューサーを使用して、単語の袋の単純な単語数を取得しました。ただし、ドキュメント全体のすべての単語の tf-idf スコアを見つけることを実装したいと思います。これを達成するために、私が考えた最初のステップは、タイプの辞書を取得すること{[word,docID]->count}
です。このために、私は次のコードを書きました
def mapfn(k, v):
for line in v.splitlines():
for word in line.split():
l = [word.lower(), k]
yield l, 1
ただし、プログラムを実行すると、次のエラーが発生します。
error: uncaptured python exception, closing channel <__main__.Client connected at 0x8a434ac>
(<type 'exceptions.TypeError'>:unhashable type: 'list'
[/usr/lib/python2.7/asyncore.py|read|83]
[/usr/lib/python2.7/asyncore.py|handle_read_event|444]
[/usr/lib/python2.7/asynchat.py|handle_read|140]
[mincemeat.py|found_terminator|96]
[mincemeat.py|process_command|194]
[mincemeat.py|call_mapfn|171])
私が理解しているのは、mincemeat.py を使用するとマップ内のリストを生成できないということです。これは、縮小中にリストが予期されていないというエラーが表示されるためです。私は正しいですか?私が正しければ、これを達成する方法はありますか? または、ミンスミート以外のライブラリを調べる必要がありますか?