2017-12-05 9 views
2

私はトークン化したテキストを持っていますが、一般的には単語のリストもOKです。たとえば:Pythonでトークン化されたテキストで複数単語の用語を見つける

>>> from nltk.tokenize import word_tokenize 
    >>> s = '''Good muffins cost $3.88\nin New York. Please buy me 
    ... two of them.\n\nThanks.''' 
    >>> word_tokenize(s) 
     ['Good', 'muffins', 'cost', '$', '3.88', 'in', 'New', 'York', '.', 
     'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.'] 

私は、単一の単語だけでなく、マルチワードキーが含まれているPythonの辞書を持っている場合は、どのように私は、効率的かつ正確にテキストで自分の存在を確認することができますか?理想的な出力はkey:location_in_textペア、または便利なものです。 ありがとうございます!

P.S. "正しく"説明する - 私は私のdictに "リース"がある場合、私はマークしてくださいしたくないです。また、複数形の認識が必要です。私はこれが多くのif-else節なしでエレガントに解決できるかどうか疑問に思います。

答えて

2

すでにマルチワード表現の地名辞典のリストを持っている場合、これはこれは私が探していたソリューションであり、宣伝通りに動作している場合、あなたはMWETokenizer、例えば:

>>> from nltk.tokenize import MWETokenizer 
>>> from nltk import sent_tokenize, word_tokenize 

>>> s = '''Good muffins cost $3.88\nin New York. Please buy me 
...  ... two of them.\n\nThanks.''' 

>>> mwe = MWETokenizer([('New', 'York'), ('Hong', 'Kong')], separator='_') 


>>> [mwe.tokenize(word_tokenize(sent)) for sent in sent_tokenize(s)] 
[['Good', 'muffins', 'cost', '$', '3.88', 'in', 'New_York', '.'], ['Please', 'buy', 'me', '...', 'two', 'of', 'them', '.'], ['Thanks', '.']] 
+1

を使用することができます。少しは報告します。本当にありがとう! –

+0

答えが助けてうれしいです。 – alvas

関連する問題