2016-01-15 33 views
7

現在、言語処理にNLTKを使用していますが、文章トークンの問題が発生しました。NLTKの文章トークナイザを略語で分割するのを避けるには?

ここに問題があります: 「図2は米国地図です」という文があるとします。 私はPUNKTトークナイザを使用すると、私のコードは次のようになります。

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters 
punkt_param = PunktParameters() 
abbreviation = ['U.S.A', 'fig'] 
punkt_param.abbrev_types = set(abbreviation) 
tokenizer = PunktSentenceTokenizer(punkt_param) 
tokenizer.tokenize('Fig. 2 shows a U.S.A. map.') 

それは、これを返します。

['Fig. 2 shows a U.S.A.', 'map.'] 

トークナイザは略語「USA」を検出することはできませんが、それは「図」で働いていました。 今私はNLTKトークナイザデフォルトを使用する場合提供:

import nltk 
nltk.tokenize.sent_tokenize('Fig. 2 shows a U.S.A. map.') 

私が手にこの時間を:

['Fig.', '2 shows a U.S.A. map.'] 

それはより一般的な "U.S.A." を認識し、 "イチジク"が見えない!

これら2つの方法を組み合わせるにはどうすればよいですか?私は自分の略語を追加するだけでなく、デフォルトの省略形の選択肢を使用したいと思います。

答えて

6

私は

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters 
punkt_param = PunktParameters() 
abbreviation = ['u.s.a', 'fig'] 
punkt_param.abbrev_types = set(abbreviation) 
tokenizer = PunktSentenceTokenizer(punkt_param) 
tokenizer.tokenize('Fig. 2 shows a U.S.A. map.') 

それは私にこれを返し、リストはこれを試してみてください ために正常に動作します略語でU.S.A用ケース下だと思う:

['Fig. 2 shows a U.S.A. map.'] 
+0

うわーそんなにありがとう!それは本当に便利です! –

関連する問題