2017-07-01 7 views
2

にスペースのない明瞭な2文は、私は、データセット内の2つの文を持つことはできません。 #期間後の空白なし
w2 =私は猫を飼っています。あたしは可愛いよ。 #期間の後にスペースを入れてくださいNLTKのトークナイザとスタンフォードcorenlpのトークナイザは、期間

NKTLトークナイザ(wordとsentの両方)を使用すると、nltkはcat.Iの間を区別できません。ここで

>>> 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'] 

>>> 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'] 

トークン化送られたトークン化の単語である私はそれを修正する方法をお願いしたいと思いますか?すなわち、nlktをw2として検出しますが、私のデータセットでは、単語と句読点が混在することがあります。 '':

アップデート '猫' など しようとしましたスタンフォードCoreNLP 3.7.0、彼らもできない明確な 'CAT.I'、 '私はそれが目的でこの方法を実施しています

[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

唯一。 – Anthon

答えて

5

を - それは通常、文章の終わりを意味するものではありません(「バージョン4.3」、「ie」、「AM」などのフレーズでピリオドについて考えてください)。完全停止後にスペースのない文の終わりが一般的なコーパスがある場合は、NLTKに送る前に正規表現などでテキストを前処理する必要があります。

大文字小文字の後にピリオドと大文字を付けると、通常は文の終わりを意味する場合があります。このような場合にピリオドの後にスペースを挿入するには、正規表現を使用します。そこにあるように、別々の2つの文にBLEされていないのない場合がありません。例えば、電子メールアドレスのように(期間を考え含む単語との一文であるW1「#」で見つめ全てを、無視

import re 
w1 = re.sub(r'([a-z])\.([A-Z])', r'\1. \2', w1) 
関連する問題