Python中正则表达式的否定标记

时间:2016-08-25 00:48:59

标签: python regex nlp

我正努力在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.

任何建议都将不胜感激。

1 个答案:

答案 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)