2016-01-15 11 views
7

Attualmente sto usando NLTK per l'elaborazione del linguaggio, ma ho riscontrato un problema di tokenizzazione della frase.Come evitare il tokenizer della frase di NLTK che si divide sulle abbreviazioni?

Ecco il problema: Si supponga di avere una frase: "La Fig. 2 mostra una mappa degli Stati Uniti." Quando uso tokenizer Punkt, il mio codice simile a questo:

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

Si restituisce questo:

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

Il tokenizzatore non può rilevare l'abbreviazione "USA", ma ha funzionato su "fico" . Ora quando uso il predefinito tokenizzatore NLTK dispone:

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

Questa volta ottengo:

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

riconosce il più comune "U.S.A." ma non riesce a vedere "fig"!

Come posso combinare questi due metodi? Voglio usare le scelte di abbreviazione predefinite e aggiungere le mie abbreviazioni personali.

risposta

6

penso minuscolo per U.S.A in sigle lista funziona bene per voi provare questo,

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

Ritorna questo a me:

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

Wow grazie mille! Questo è davvero utile! –

Problemi correlati