Ich muss negative Kontexte in einem Satz markieren. Der Algorithmus geht wie folgt:Wie ändert man Text, der zu einem bestimmten regulären Ausdruck in Python passt?
- eine negator Detect (nicht/nie/nicht/nicht/etc)
- Detect eine Klausel endet Interpunktion (;.!?)
- hinzufügen _NEG zu allen Wörtern dazwischen. Jetzt
, ich habe einen regulären Ausdruck definiert, alle derartigen Vorkommnissen herauszupicken:
def replacenegation(text):
match=re.search(r"((\b(never|no|nothing|nowhere|noone|none|not|havent|hasnt|hadnt|cant|couldnt|shouldnt|wont|wouldnt|dont|doesnt|didnt|isnt|arent|aint)\b)|\b\w+n't\b)((?![.:;!?]).)*[.:;!?\b]", text)
if match:
s=match.group()
print s
news=""
wlist=re.split(r"[.:;!? ]" , s)
wlist=wlist[1:]
print wlist
for w in wlist:
if w:
news=news+" "+w+"_NEG"
print news
Ich kann die ausgeglichene Gruppe erkennen und ersetzen. Ich weiß jedoch nicht, wie ich nach dieser Operation den kompletten Satz neu erstellen soll. Auch für mehrere Übereinstimmungen gibt match.groups() eine falsche Ausgabe.
Zum Beispiel, wenn mein Eingabesatz ist:
I don't like you at all; I should not let you know my happiest secret.
ausgegeben werden soll:
I don't like_NEG you_NEG at_NEG all_NEG ; I should not let_NEG you_NEG know_NEG my_NEG happiest_NEG secret_NEG .
Wie kann ich das tun?
Das funktioniert perfekt! Was die Interpunktionen betrifft, kann ich auch einen einfachen Tokenizer auf dem Text ausführen, weil ich sowieso zwischen ihnen und Emoticons unterscheiden muss. Danke! – Avijit