2016-02-20 38 views
0

該函數必須檢測文本中的否定詞,並在否定詞後面加上NEG_前綴。邏輯是將否定詞的索引保存在文本列表中,然後將NEG_prefix添加到(索引+ 1)解決算法錯誤當文本中出現多個列表項時

問題是,例如,當文本中有多個「not」時,它不起作用正確。

def negationDetection(tweet): 
position = [] 
words = tweet.split() 
#to prevent error when negation word appears at the end of text 
size = len(words)-1 
print words 
negationList = ["not","no","never"] 
for word in words: 
    if word in negationList: 
     if words.index(word) != size: 
      position.append(words.index(word) + 1) 
     else: 
      continue 
    else: 
     continue 
print position 
for i in position: 
    tweet = (tweet).replace(words[i], 'NEG_' + words[i]) 
return tweet 
a = "hello I am not good,but I can never feel it" 
print negationDetection(a) 

結果是

你好,我是不是NEG_good,但我從來沒有NEG_feel它

這是正確的,但是當文本是「你好,我是不是好,但我感覺不到「,結果是

你好,我不是NEG_NEG _good,但我感覺不到它的

代替

你好,我是不是NEG_good,但我不能NEG_feel它

我怎樣才能修復這個bug?

回答

2

你的錯誤是:

position.append(words.index(word) + 1) 

你得到字的位置,在這種情況下, '不是',使用index。這總是返回該單詞的第一次出現。更簡單的方法是遍歷索引而不是遍歷單詞。

negationList = ["not","no","never"] 
for word in range(len(words)): 
    if words[word] in negationList: 
     if word != size: 
      position.append(word + 1) 
     else: 
      continue 
    else: 
     continue 
相關問題