2016-01-15 13 views
7

Obecnie używam NLTK do przetwarzania języka, ale napotkałem problem tokenizacji zdań.Jak uniknąć tokenizera zdań NLTK dzieląc na skróty?

Oto problem: Załóżmy, że mam zdanie: "Ryc. 2 pokazuje mapę USA." Gdy używam Punkt tokenizera, mój kod wygląda następująco:

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.') 

Zwraca to:

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

tokenizera nie może wykryć skrót „USA”, ale to działało na „rys” . Teraz gdy używam domyślnego tokenizer NLTK stanowi:

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

Tym razem pojawia się:

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

Uznaje więcej wspólnego "USA" ale nie widać "fig"!

Jak mogę połączyć te dwie metody? Chcę używać domyślnych skrótów, a także dodawać własne skróty.

Odpowiedz

6

myślę niższy przypadek U. S. w skrótów lista będzie działać dobrze dla spróbować tego,

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.') 

Zwraca mi to:

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

Wow dziękuję bardzo! To naprawdę pomocne! –

Powiązane problemy