2016-01-15 6 views
7

Ich verwende derzeit NLTK für die Sprachverarbeitung, aber ich habe ein Problem der Satz-Tokenisierung festgestellt.Wie vermeidet man, dass NLTK den Satztokenizer auf Abkürzungen spaltet?

Hier ist das Problem: Angenommen, ich habe einen Satz: "Abb. 2 zeigt eine USA-Karte." Als ich punkt tokenizer verwenden, sieht mein Code wie folgt aus:

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

Es gibt diese:

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

Die tokenizer kann die Abkürzung "USA" nicht erkennen, aber es auf "Bild" gearbeitet . Jetzt wenn ich die Standard verwenden tokenizer NLTK bietet:

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

Diesmal bekomme ich:

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

Er erkennt die häufiger "USA" sieht aber nicht "feige"!

Wie kann ich diese beiden Methoden kombinieren? Ich möchte Standardabkürzungswahlen verwenden sowie meine eigenen Abkürzungen hinzufügen.

Antwort

6

Ich denke Kleinbuchstaben für U.S.A. in Abkürzungsliste gut funktionieren wird für Sie diese versuchen,

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

Es gibt diese zu mir:

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

Wow vielen Dank! Das ist sehr hilfreich! –