2012-03-08 8 views
0

私はタグ付きファイルから適切な名詞から抽出しようとしています。しかし、問題は、私は時々あるエラーを与えるとしようとしているコードです:pythonエラー - あまりにも多くの値

Traceback (most recent call last): 
File "E:\pt\paragraph", line 35, in <module> 
sen1= noun(mylist[s]) 
File "E:\pt\paragraph", line 5, in noun 
word, tag = word.split('/') 
ValueError: too many values to unpack 

コードは、いくつかのテキストのため正常に動作しますが、いくつかのためにそれはエラーになります。

コード:

def noun(words): 
nouns = [] 
for word in words.split(): 
word, tag = word.split('/') 
    if (tag.lower() == 'np'): 
    nouns.append(word); 
return nouns 

def splitParagraph(paragraph): 

import re 
paragraphs = paragraph.split('\n\n') 
return paragraphs 

if __name__ == '__main__': 
import nltk 
rp = open("t3.txt", 'r') 
text = rp.read() 
mylist = [] 
para = splitParagraph(text) 

for s in para: 
mylist.append(s) 
for s in range(len(mylist)-1): 
sen1= noun(mylist[s]) 
sen2= noun(mylist[s+1]) 

現在、私は賢明な他の第一項を削除した場合、それはエラーを与える作品でしようとしています。テキストの

サンプル:

A/at good/jj man/nn-hl departs/vbz-hl ./. Goodbye/uh-hl ,/,-hl Mr./np-hl Sam/np-hl./. Sam/np Rayburn/np was/bedz a/at good/jj man/nn ,/, a/at good/jj American/np ,/, and/cc ,/, third/od ,/, a/at good/jj Democrat/np ./. He/pps was/bedz all/abn of/in these/dts rolled/vbn into/in one/cd sturdy/jj figure/nn ;/. ;/. Mr./np Speaker/nn-tl ,/, Mr./np Sam/np ,/, and/cc Mr./np Democrat/np ,/, at/in one/cd and/cc the/at same/ap time/nn ./. 

The/at House/nn-tl was/bedz his/pp$ habitat/nn and/cc there/rb he/pps flourished/vbd ,/, first/rb as/cs a/at young/jj representative/nn ,/, then/rb as/cs a/at forceful/jj committee/nn chairman/nn ,/, and/cc finally/rb in/in the/at post/nn for/in which/wdt he/pps seemed/vbd intended/vbn from/in birth/nn ,/, Speaker/nn-tl of/in-tl the/at-tl House/nn-tl ,/, and/cc second/od most/ql powerful/jj man/nn in/in Washington/np ./. 

私は、第一項(良い/ JJマン/ NN-HLでのA /が出発...)コードの作品を​​削除する場合。この問題を解決する方法。

ありがとうございます。

答えて

1

あなたの「単語」には複数の「/」が含まれています。 だからを開梱して(tag、word)に変換することはできません。あなたはあなたのタグ/単語が複数の "/"を持つ場合をどのように扱いたいのか把握しなければなりません。

def noun(words): 
    nouns = [] 
    for word in words.split(): 
     items = word.split('/') 
     if len(items) == 2: 
      tag, word = items 
     else: 
      # do something else to parse 

    .... 

私はただあなただけ最初「/」に分割したい場合は、この方法で分割文字列に「maxsplit個」オプションを使用することができます実現。

>>> word = "a/b/c" 
>>> 
>>> word.split("/", 1) 
['a', 'b/c'] 
0

「/」で分割して2つの値を取得しようとしました。しかし、あなたが持っている「言葉」を持っている複数の「/」!:

Sam/np-hl./. 

だから、取得[「サム」、「NP-HLを。」、「」]あなただけに割り当てよう2つの変数。

0

エラーは、split()メソッドが、=記号の左側にある "unpacked"変数の数を超えて返されていることを意味します。ここで

は一例です:

>>> x,y = 'a,b,c,d'.split(',') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 
>>> x,y,z,t = 'a,b,c,d'.split(',') 

だから何それはあなたのために意味することはwordtagsの二つ以上のペアが含まれていることです。

このペアは問題ありません:Sam/np-hl./.にはスペースがないので、このペアを分割すると実際には['Sam','np-hl','.']となり、エラーが発生します。

関連する問題