2016-04-11 6 views
0

Ich versuche, Substantive aus Text mit Python Nltk-Paket zu extrahieren. Es hat mehr oder weniger funktioniert. Aber ich frage mich, wie man den nicht-alphabetischen Charakter am Ende der Wörter loswerden kann? Bitte beachten Sie das folgende Beispiel.Wie man das nicht alphabetische Zeichen am Ende des Wortes loswerden mit Python Nltk

from nltk.tag import pos_tag      
x = "Back, Back: Back"       
tagged_sent = pos_tag(x.split()) 
y = [word for word,pos in tagged_sent if pos == 'NNP'] 

Dann nimmt y Wert

['Back,', 'Back:', 'Back'] 

Was ich wirklich

['Back', 'Back', 'Back'] 

Antwort

2
re.findall(r'\w+', x) 

statt

x.split() 

ist wollen (Dies wird Ihnen alphanumerische Blöcke geben; Wenn Sie nur alphabetisch möchten, sollte [a-zA-Z] ein guter Anfang sein, aber das wird nicht gut mit nicht-englischen Zeichen umgehen, auch wenn Sie re.UNICODE angeben; \w tut)

0

Filter einsetzen.

>>> my_str = "Back, Back: Back" 
>>> [filter(str.isalnum, x) for x in my_str.split()] 
['Back', 'Back', 'Back'] 

itertools.takewhile

>>> my_str = "Back, Back: Back" 
>>> ["".join(x) for x in map(lambda x:list(itertools.takewhile(str.isalnum, x)), my_str.split())] 
['Back', 'Back', 'Back'] 
0

Verwenden Sie re.sub() verwenden. Ändern Sie Ihre letzte Codezeile in

import re 
y = [re.sub('[^A-Za-z]+$', '', word) for word,pos in tagged_sent if pos == 'NNP'] 
Verwandte Themen