2016-04-11 7 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'] 

答えて

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

代わりの

x.split() 

ある

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

をとります(これにより、英数字のブロックが得られます。アルファベットだけの場合は [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'] 

あなたがre.sub()を使用することができ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

を使用します。最後のコード行を

import re 
y = [re.sub('[^A-Za-z]+$', '', word) for word,pos in tagged_sent if pos == 'NNP'] 
に変更してください
関連する問題