2017-07-01 6 views
2

je 2 phrases dans mon jeu de données:NLTK tokenizer et Stanford corenlp tokenizer ne peuvent pas 2 phrases distinctes sans espace à la période

w1 = Je suis Pusheen les CAT.I suis si mignon. # aucun espace après période
w2 = Je suis Pusheen le chat. Je suis trop mignonne. # avec espace après période

Lorsque j'utilise un tokenizer NKTL (à la fois word et send), nltk ne peut pas distinguer le cat.I.

est ici mot tokenize

>>> nltk.word_tokenize(w1, 'english') 
['I', 'am', 'Pusheen', 'the', 'cat.I', 'am', 'so', 'cute'] 
>>> nltk.word_tokenize(w2, 'english') 
['I', 'am', 'Pusheen', 'the', 'cat', '.', 'I', 'am', 'so', 'cute'] 

et envoyé tokenize

>>> nltk.sent_tokenize(w1, 'english') 
['I am Pusheen the cat.I am so cute'] 
>>> nltk.sent_tokenize(w2, 'english') 
['I am Pusheen the cat.', 'I am so cute'] 

Je voudrais demander comment résoudre ce problème? i.e: make nlkt détecter comme w2 alors que dans mon jeu de données, parfois le mot et la ponctuation sont collés ensemble.

Mise à jour: Essayé Stanford CoreNLP 3.7.0, ils ne peuvent pas non distinctes 'CAT.I' comme 'chat', «Je

[email protected]:~/projects/stanfordcorenlp$ java edu.stanford.nlp.process.PTBTokenizer sample.txt 
I 
am 
Pusheen 
the 
cat.I 
am 
so 
cute 
. 
PTBTokenizer tokenized 9 tokens at 111.21 tokens per second. 
+1

Abstraction faite de tout regarder avec « # », w1 est une phrase, un mot qui contient une période (comme par exemple une adresse e-mail serait. Il n'y a donc aucun cas de ne pas être ble à deux phrases distinctes car il y a seulement un. – Anthon

Répondre

5

Il est mis en œuvre ainsi sur le but - '' une période sans espace après cela ne signifie généralement pas la fin d'une phrase (pensez aux périodes dans des phrases telles que "version 4.3", "ie", "AM", etc.). Si vous avez un corpus dans lequel les extrémités de phrases sans espace après l'arrêt complet est une occurrence commune, vous devrez prétraiter le texte avec une expression régulière ou une telle expression avant de l'envoyer à NLTK. Une bonne règle empirique pourrait être qu'une lettre minuscule suivie d'une lettre suivie d'une lettre majuscule signifie généralement la fin d'une phrase. Pour insérer un espace après la période dans de tels cas, vous pouvez utiliser une expression régulière, par ex.

import re 
w1 = re.sub(r'([a-z])\.([A-Z])', r'\1. \2', w1)