Search code examples
pythonregextokenizenltk

Correct Regexp for japanese sentence tokenizer- python


This is the current text that i've but the regex isn't correct to split the sentences correction. please help to correct my regex, thank you.

import nltk
import os, sys, re, glob
from nltk.tokenize import RegexpTokenizer

jp_sent_tokenizer = nltk.RegexpTokenizer(u'[^ 「」!?。]*[!?。]')

para = []
para.append (jp_sent_tokenizer.tokenize(u' 「オタ」とも呼ばれているこのペラナカン(華人)の特製料理は、とてもおいしいスナック料理です。これは、ココナッツミルクやチリペースト、レモングラス、ガーリックと一緒に魚を砕き、それを、蒸して柔らかくしたバナナの葉に包んで炭火で軽く焼いた料理です。このレシピは、アジアの数地域で知られています。「オタオタ(otak otak )」は、マレー語で「脳」を意味します。この「オタオタ」という名前は、この料理の柔らかくトロリとした食感から由来しています。魚を使ったオタオタが、最も一般的ですが、エビやイカ、カニ、魚の頭などを用いたものなど、そのバリエーションは豊富です。 ')

for index in range(len(para[0])):
          print para[0][index]
          print 'this is eos'
          #print line
print 'this is eop'

I'm getting this output:

とも呼ばれているこのペラナカン(華人)の特製料理は、とてもおいしいスナック料理です。
this is eos
これは、ココナッツミルクやチリペースト、レモングラス、ガーリックと一緒に魚を砕き、それを、蒸して柔らかくしたバナナの葉に包んで炭火で軽く焼いた料理です。
this is eos
このレシピは、アジアの数地域で知られています。
this is eos
を意味します。
this is eos
という名前は、この料理の柔らかくトロリとした食感から由来しています。
this is eos
魚を使ったオタオタが、最も一般的ですが、エビやイカ、カニ、魚の頭などを用いたものなど、そのバリエーションは豊富です。
this is eos
this is eop

The correct output should be this:

 「オタ」とも呼ばれているこのペラナカン(華人)の特製料理は、とてもおいしいスナック料理です。
this is eos
これは、ココナッツミルクやチリペースト、レモングラス、ガーリックと一緒に魚を砕き、それを、蒸して柔らかくしたバナナの葉に包んで炭火で軽く焼いた料理です。
this is eos
このレシピは、アジアの数地域で知られています。
this is eos
「オタオタ(otak otak )」は、マレー語で「脳」を意味します。
this is eos
「オタオタ(otak otak )」は、マレー語で「脳」を意味します。この「オタオタ」という名前は、この料理の柔らかくトロリとした食感から由来しています。
this is eos
魚を使ったオタオタが、最も一般的ですが、エビやイカ、カニ、魚の頭などを用いたものなど、そのバリエーションは豊富です。 
this is eos
this is eop

Solution

  • Try this:

    u'[^!?。]*[!?。]'
    

    It looks like quotes (「」) do belong in sentences, so you want to allow them.

    I should warn that in general (well, in English grammar), it is very difficult (or even impossible) to parse whole current sentences. (consider 1.2, Dr. Fleishman, etc.)