2016-04-11 66 views
0

我想從使用python nltk包的文本中提取名詞。它或多或少的工作。但我想知道如何擺脫單詞末尾的非字母字符?請看下面的例子。如何擺脫這個詞的末尾非字母字符使用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'] 

那麼y取值

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

我真正想要的是

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

回答

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

,而不是

x.split() 

(這會給你字母數字塊;如果你真的想要字母,[a-zA-Z]應該是一個好的開始,但即使你指定re.UNICODE,這也不能很好地處理非英文字符; \w一樣)

0

使用過濾器:

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

你可以使用re.sub()。將您的最後一行代碼更改爲

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