2017-03-12 13 views
0

私はpythonを使ってテキスト解析タスクを行っています。ここでは、テキスト処理タスクにNLTKを使用しました。私の場合は、あらかじめ定義されたbiwordsのセットがあります。nltkを使って既知のバイワードの文章をどのようにトークン化するのですか?

arr = ['Animo Text Analytics Inc.', 'Amila Iddamalgoda'] 

また、以下のような文章があります。

sentence = "Amila Iddamalgoda is currently working for Animo Text Analytics Inc. and currently following the Text Mining and Analytics course provided by coursera." 

これをNLTKでトークン化しました。

tokenizer = RegexpTokenizer(r'\w+') 
tokens = tokenizer.tokenize(sentence) 

これは、単一の単語トークン(明らかに)を与えます。しかし、私が必要とするのは、私が持っている定義済みのバイワードのセット(最初に述べたもの)と一致させ、そのバイワードのファラースを単一のトークンとして取ることです。

例:Amila Iddamalgoda、現在、作業し、アニモテキスト解析株式会社、follwoing、...

がどのように私はこれを達成することができますか?あなたは今、「正常な」トークン化を行うことができます

for expr in arr: 
    sentence = re.sub(expr, re.sub(r'\s+', "_", expr), sentence) 
#'Amila_Iddamalgoda is currently working ...' 

答えて

1

は、例えば、いくつか明確に認識文字、アンダースコアを使用してテキストに複数の単語の各出現内のすべてのスペースを置き換え私を助けてください。

テキスト内の単語の間に複数のスペースがあると思われる場合は、最初にあなたのマルチ言葉と一致する正規表現のリストを作成:、今

toreplace = {r'\s+'.join(a.split()) : '_'.join(a.split()) for a in arr} 
#{'Amila\\s+Iddamalgoda': 'Amila_Iddamalgoda', 
# 'Animo\\s+Text\\s+Analytics\\s+Inc.': 'Animo_Text_Analytics_Inc.'} 

を原文にそれぞれ置換パターンを適用:

for pattern in toreplace: 
    sentence = re.sub(pattern, toreplace[pattern], sentence) 

もう一度、「通常の」トークンを行うことができます。

提案された解決策は非常に非効率的です。効率が重要な場合は、通常のトークン化式を作成してnltk.regexp_tokenize()を使用できます。

関連する問題