自然言語処理のタグ付けモデルを構築しています。最初に、文の単語は品詞 (名詞の NN など) としてタグ付けされ、次にそれらをネストされたリストとして表されるツリーに分割するルールが適用されます。このプロセスは、最上位のノードを 1 つ取得するまで何度も繰り返されます。可能性のあるすべてのツリーのマスター リストがあり、重複するツリーを削除する必要があります。そうしないと、すべてがメモリ内で爆発します。以下は、リストの構成要素の小さなサンプルです。反復ごとに多くのブランチが作成されるため、リスト内の各リストが一意であることを確認する必要があります。
[[('NP', [('PRP', 'I')]), ('VBD', 'ate'), ('DT', 'a'), ('NN', 'steak'), ('IN', 'with'), ('DT', 'a'), ('NN', 'knife'), ('.', '.')]
[('PRP', 'I'), ('VP', [('VBD', 'ate')]), ('DT', 'a'), ('NN', 'steak'), ('IN', 'with'), ('DT', 'a'), ('NN', 'knife'), ('.', '.')]
[('PRP', 'I'), ('VBD', 'ate'), ('NP', [('DT', 'a')]), ('NN', 'steak'), ('IN', 'with'), ('DT', 'a'), ('NN', 'knife'), ('.', '.')]
...]
セットを使用することを考えましたが、リストはハッシュ可能ではありません。再帰を使用しようとしましたが、メモリが不足しています。リストを文字列に変換し、文字列を辞書のキーとして使用し、リストを値として使用してから、繰り返してリストに戻します(または辞書として保持しますか?)。ハックの少ないソリューションを持っている人はいますか? 私はPythonに比較的慣れていないので、ソリューションがどのように機能するかを説明してください。
明確にする必要があります。ネストされたリストは無限に深くなる可能性があります。ツリー構造は事前にわかりませんが、その場で構築されます。このようなものを構築しようとしています - http://jos.oxfordjournals.org/content/25/4/345/F23.large.jpgただし、ネストされたリストの形式です。