2012-01-14 8 views
3

Pythonでは、私はNatural Language Processingモジュールを作成しており、次のことを行う関数のコーディング方法を理解することはできません。 入力:短い文字列として入力された文から派生した品詞(POS)のリスト。プログラムのその部分が2つ以上の可能性の中から選択するべき品詞を知らないので、リスト内の一部の項目はそれ自体がリストです。例: ["DET", "NOUN", ["VERB", "NOUN"], "CONJ", ["ADJ", "ADV", "NOUN"], "ADV"] の6つのワード文章結果、特定の最初の言葉は間違いなくDET、すなわち 第二語は間違いなく第三単語が4語は間違いなく5番目の単語は、可能性がCONJ あるVERBまたはNOUN 可能性がありNOUN ですADJ、ADV、NOUN 6番目の単語は間違いなくADVです。ツリーのトラバースまたは何ですか?

だから、INPUT = ["DET", "NOUN", ["VERB", "NOUN"], "CONJ", ["ADJ", "ADV", "NOUN"], "ADV"]

私はリストのリストとして各可能な組み合わせを返すように関数が必要です。したがって、上記の戻り値は、次のようになります。

[["DET", "NOUN", "NOUN", "CONJ", "NOUN", "ADV"], 
["DET", "NOUN", "NOUN", "CONJ", "ADV", "ADV"], 
["DET", "NOUN", "NOUN", "CONJ", "ADJ", "ADV"], 
["DET", "NOUN", "VERB", "CONJ", "NOUN", "ADV"], 
["DET", "NOUN", "VERB", "CONJ", "ADV", "ADV"], 
["DET", "NOUN", "VERB", "CONJ", "ADJ", "ADV"]] 

文の長さは1語からn語までです。それぞれの言葉は、1つの話からnつの話に戻ってくるかもしれません。

+2

何を試しましたか?どのライブラリを使用していますか?あなたが作業していない場合でも、いくつかのコードを貼り付けることができます –

答えて

8

itertools moduleとそれに関連するレシピを見てください。すべての可能なPOS割り当てのデカルト積を検討したいようです。これは簡単に行うことができますが、INPUTのすべての要素がリストであってもリストの要素を持つ方が便利です。とにかく:

>>> import itertools 
>>> 
>>> INPUT = ["DET", "NOUN", ["VERB", "NOUN"], "CONJ", ["ADJ", "ADV", "NOUN"], "ADV"] 
>>> 
>>> I = [[kind] if type(kind) != list else kind for kind in INPUT] 
>>> I 
[['DET'], ['NOUN'], ['VERB', 'NOUN'], ['CONJ'], ['ADJ', 'ADV', 'NOUN'], ['ADV']] 

これらは、私たちが選択したい可能性があります。私はあなたが望むものであることを理解場合

>>> possible_assignments = list(itertools.product(*I)) 
>>> possible_assignments 
[('DET', 'NOUN', 'VERB', 'CONJ', 'ADJ', 'ADV'), ('DET', 'NOUN', 'VERB', 'CONJ', 'ADV', 'ADV'), ('DET', 'NOUN', 'VERB', 'CONJ', 'NOUN', 'ADV'), ('DET', 'NOUN', 'NOUN', 'CONJ', 'ADJ', 'ADV'), ('DET', 'NOUN', 'NOUN', 'CONJ', 'ADV', 'ADV'), ('DET', 'NOUN', 'NOUN', 'CONJ', 'NOUN', 'ADV')] 

:これはitertools.productが何のためにあるのかです。リストではなくタプルですが、それは重要ではありません。


+0

うわー!それは素晴らしいです、DSM。私はそれを見て、今すぐ試してみるつもりです。 –

関連する問題