2017-12-04 12 views
0

正規表現を通して、与えられたセンテンスのレキシコンに対応する極性タグを付けることにしました。re.sub複数のリストを対応するマッチで置き換える(Python)

import re 
vocab = ['good/POSI','bad/NEAG','strong/POSI','dirty/NEGA', 'never/SWIT'] 
sent = ["It is really good", "strong man never gets his body dirty"] 

for token in vocab: 
    word = re.sub(r'(\\w+)\\/[A-Z]+_[A-Z]+','\\1', token) 
    TA = re.sub(str(word),str(token), str(sent)) 
print(TA) 

私はこのような結果を得ようとしました。

["It is really good/POSI", "strong/POSI man never/SWIT gets his body dirty/NEGA"] 

残念ながら、私はできませんでしたが、どの回線に問題があるかわかりません。 注釈のためのより良い方法はありますか?

>>> vocab = {v[:v.find('/')]: v for v in vocab} 
>>> vocab 
{'dirty': 'dirty/NEGA', 'good': 'good/POSI', 'never': 'never/SWIT', 'bad': 'bad/NEAG', 'strong': 'strong/POSI'} 

この方法であなたは辞書内の値で\w+の交換を行うことができます:

+0

kを '' never/SWIT''に置き換えます。これは、内側のループの繰り返しごとに変更されていない 'line'で始めるからです。 – dhke

答えて

1

は私の代わりに辞書にvocabリストを変更することをお勧め

result = [] 
for line in sent: 
    line = re.sub(r'(\w+)', lambda w: vocab.get(w.group(), w.group()), line) 
    result.append(line) 
print(result) 

これが出力されますどのようなあなたが欲しかったのは:

['It is really good/POSI', 'strong/POSI man never/SWIT gets his body dirty/NEGA'] 
+0

それは本当にうまく動作します!ありがとうございました! – Rcoding

関連する問題