我正努力在Python中使用正则表达式来实现否定标记,而克里斯托弗波茨' sentiment analysis tutorial
从他的教程中得出的否定的定义是:
(?:
^(?:never|no|nothing|nowhere|noone|none|not|
havent|hasnt|hadnt|cant|couldnt|shouldnt|
wont|wouldnt|dont|doesnt|didnt|isnt|arent|aint
)$
)
|
n't
和子句级标点符号的定义是:
^[.:;!?]$
这个想法是在否定和子句级别标点符号之间捕获单词,然后修改它们以表明它们被否定,例如:
No one enjoys it.
应该成为:
No one_NEG enjoys_NEG it_NEG.
任何建议都将不胜感激。
答案 0 :(得分:0)
如果您将一个句子作为字符串,就像您暗示的那样,那么您就无法使用' ^'和' $'在你的正则表达式。请改用\b
。然后这应该工作:
def add_negation_markers(m):
return m.group(1) + re.sub(r'(?<=\w)\b', '_NEG', m.group(2))
re.sub('(' + neg_re + ')(.*)(?=' + punct_re + ')', add_negation_markers, text)
如果您将一个句子作为单词列表,$
和^
标记含义,那么......
def negate(word):
if re.search(punct_re, word):
negate.should = False
elif re.search(neg_re, word):
negate.should = True
elif negate.should:
return word + '_NEG'
return word
negate.should = False
map(negate, words)