2016-01-11 14 views
5

Sto utilizzando lo nltk per suddividere le frasi in parole. per esempio.Prevenire la suddivisione in apostrofie durante la tokenizzazione delle parole utilizzando nltk

nltk.word_tokenize("The code didn't work!") 
-> ['The', 'code', 'did', "n't", 'work', '!'] 

Il tokenizing funziona bene a spaccare i confini di parole [vale a dire. dividendo la punteggiatura dalle parole], ma a volte sovrascrive, e i modificatori alla fine della parola vengono trattati come parti separate. Ad esempio, didn't viene diviso nelle parti did e n't e i've viene diviso in I e 've. Ovviamente questo è perché tali parole sono divise in due nel corpus originale che nltk sta usando, e potrebbe essere desiderabile in alcuni casi.

Esiste un modo per superare questo comportamento? Forse in modo simile a come nltk'sMWETokenizer è in grado di aggregare più parole in frasi, ma in questo caso semplicemente aggregare componenti di parole in parole.

In alternativa, c'è un altro tokenizzatore che non suddivide parti di parole?

risposta

7

Questo è in realtà working as expected:

Questo è l'output corretto/attesi. Per la tokenizzazione delle parole, le contrazioni sono considerate due parole perché significano per senso.

Diversi nltk tokenizers gestire lingua inglese contrazioni in modo diverso. Per esempio, ho trovato che TweetTokenizer non si divide la contrazione in due parti:

>>> from nltk.tokenize import TweetTokenizer 
>>> tknzr = TweetTokenizer() 
>>> tknzr.tokenize("The code didn't work!") 
[u'The', u'code', u"didn't", u'work', u'!'] 

Si prega di vedere di più informazioni e soluzioni alternative a:

Problemi correlati