2017-04-13 3 views
1

のリスト制約する正規表現を使用した:私は正規表現を使用して、特定のPoS配列を有する用語を抽出したい言葉のタプルのリストとその品詞の文から与えられたタプル

[('We', 'PRP'), 
('took', 'VBD'), 
('advantage', 'NN'), 
('of', 'IN'), 
('the', 'DT'), 
('half', 'JJ'), 
('price', 'NN'), 
('sushi', 'NN'), 
('deal', 'NN'), 
('on', 'IN'), 
('saturday', 'NN')] 

を。これは('JJ')*('NN')+のようなものになるので、私はのリストを持っています。そのような仕事を行う最も適切な方法は何でしょうか、私は何百もの文章のためにこれをやっていますか?

ありがとうございました!

+6

あなたはどのようなアプローチを試してみましたか? –

+0

@EugeneLisitskyよく正規表現はここでは意味をなさないと思っていますが、代わりにタプルインデックスを使って一連の条件を書くべきです。 – user3058703

答えて

1

私は、これはトリックを行います何かかもしれないと思う:

a = [('We', 'PRP'), 
('took', 'VBD'), 
('advantage', 'NN'), 
('of', 'IN'), 
('the', 'DT'), 
('half', 'JJ'), 
('price', 'NN'), 
('sushi', 'NN'), 
('deal', 'NN'), 
('on', 'IN'), 
('saturday', 'NN')] 

b = iter(a[1:]) 

my_list = [] 
inner_list = [] 
accepted = ['JJ', 'NN'] 

for item in a: 
    word = item[0] 
    check = item[1] 
    try: 
     against = next(b) 
     if check in accepted: 
      if against[1] not in accepted: 
       inner_list.append(word) 
       my_list.append(inner_list) 
       inner_list = [] 
      else: 
       inner_list.append(word) 
    except StopIteration: 
     if check in accepted: 
      inner_list.append(word) 
      my_list.append(inner_list) 
final = [' '.join(item) for item in my_list] 
+0

これは素晴らしい解決策です!候補用語または語句に名詞( 'NN')が含まれていることを確認するだけでコードを修正しようとする – user3058703

関連する問題