2017-01-19 4 views
0

私はチャットボットに取り組んでいます。私はnltk.chatを非常に広範囲に私のボットに使っています。しかし、私はデフォルトのもの以外のペアに多くの機能を追加したいと思います。新しいペアを追加しようとすると、エラーが発生します。タプルを展開するには多すぎます。NLTKチャット

alex=Chat(pair,reflections) 
File "/usr/local/lib/python2.7/dist-packages/nltk/chat/util.py", in __init__ 
self._pairs = [(re.compile(x, re.IGNORECASE),y) for (x,y) in pairs] 
ValueError: too many values to unpack 

私のコード:

pair=(
     (r'test (.*)',('a','b')) 
    ) 
+0

は、右のエディタに組み込まれた書式設定ツールを使用してくださいを!それはフォーマットすると思ってbackticksを追加しないでください! – Soviut

+0

確かにします! –

答えて

1

あなたのペアは、例えば、あなたが意図した構造を失っている:

pair=((((r'test (.*)', ('a','b'))))) 

は、これと同じようになります:

('test (.*)', ('a', 'b')) 

最初の要素がの場合0であり、2番目は('a', 'b')です。

基本的にタプル構造に括弧を追加しても、それがネストされているわけではありません。あなたが意図したものを達成するためには、タプルの定義を明示する必要があります。あなたはこれにpair初期設定変更した場合:

pair=( 
     (r'test (.*)', ('a','b')), 
    ) 

カンマを注意最終閉じ括弧の前に)

を今すぐあなたの反復が働くだろう。最初の要素は('test (.*)', ('a', 'b'))で、文字列だけではありません。test (.*)

これはエラーの原因を説明しています。

+0

本当に助けてくれてありがとう! –

+0

私はコンマが問題になるとは考えていません –

+0

既存のタプルに追加すると機能しません –

1

Pythonスタイルでは、use tuples only for collections in which each element has a specific role.は未分類のコレクションについては、list(角括弧)を使用してください。重要な詳細は除外されています。 pairのリストに渡すタプルのそれぞれは、(<regexp>, <data>)のペアであるため、tupleと正しく書かれています。しかしpair自体はそのようなタプルのコレクションに過ぎず、タプルとしてではなくリストとして記述する必要があります。ボーナスとして、リストのブラケットがあいまいでないと、あなたはあなたのリストには、一つだけの要素がある場合、カンマを追加することを忘れないでくださいする必要はありません。

# (works properly) 
pair = [ 
     (r'test (.*)', ('a','b')) 
    ] 
+0

問題は私のデータを既存のデータ構造に追加することですので、そのようにしました! –

+0

いいえ、あなたはタイルに_anything_を追加することはできません。 – alexis

+0

私はそれをマージしました。新しいデータ構造を作成したのと同じように、パッケージを使用しています。そのようなファッションが必要なのです。 –

関連する問題