2016-04-11 14 views
0

kullanarak sözcüğün sonundaki alfabetik olmayan karakterden kurtulmak için python nltk paketini kullanarak metinlerden isim ayıklamak çalışıyorum. Az ya da çok çalıştı. Ama kelimelerin sonunda alfabetik olmayan karakterden nasıl kurtulacağımı merak ediyorum. Lütfen aşağıdaki örneğe bakınız.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'] 

Sonra y Gerçekten

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

cevap

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

yerine

x.split() 

olduğunu ne ister değerini

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

alır (Bu size alfasayısal bloklar verecektir; Gerçekten sadece alfabetik istiyorsanız, [a-zA-Z] iyi bir başlangıç ​​olmalı, ancak re.UNICODE belirtseniz bile İngilizce olmayan karakterlerle iyi bir anlaşma yapmaz; \w yapar)

0

kullanma filtresi:.

>>> 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

kullanarak re.sub() kullanabilir. Son satır kodunuzu

import re 
y = [re.sub('[^A-Za-z]+$', '', word) for word,pos in tagged_sent if pos == 'NNP'] 
olarak değiştirin.