2012年1月3日火曜日

Python で日本語テキストの単語区切り処理

LREdit の ver 1.34 で、日本語に配慮したWordBreak処理を実装した。


    wordbreak = ckit.WordBreak(
        ( 
            "\"!@#$%^&*()+|~-=\`[]{};:',./<>?", # 0
            ckit.UnicodeRange(u'0',u'z'),       # 1
            ckit.UnicodeRange(u'、',u'〟'),     # 2
            ckit.UnicodeRange(u'ぁ',u'ゖ'),     # 3
            " \t",                              # 4
        ),
        {
            -1 : [ 0, 1, 2 ],
             0 : [ -1, 1, 2, 3 ],
             1 : [ -1, 0, 2, 3 ],
             2 : [ -1, 0, 1, 3 ],
             3 : [ -1, 0, 1, 2 ],
             4 : [ -1, 0, 1, 2, 3 ],
        }
    )


この自作のWordBreakクラスには、どの文字種とどの文字種の間が単語区切りであるかを表すテーブルを渡す。

LREditでは、


    例) このソフトウェアは、柔軟なカスタマイズが可能なテキストエディタです。

は、以下のように分割される。


    この
    ソフトウェアは
    、
    柔軟な
    カスタマイズが
    可能な
    テキストエディタです
    。

平仮名は、送り仮名として使用するケースも多いので、漢字やカタカナの後ろに平仮名があっても、そこを単語区切りとは判別していない。

また、スクリプト言語、や、アドホック通信、のように、カタカナと漢字を組み合わせて単語として扱うケースも多いことから、漢字とカタカナの間も単語区切りとは判別していない。


日本語以外の文字種については、まったく考慮できていないので、もしこのテーブルを改善できる方がいたら大歓迎だ。

0 件のコメント:

コメントを投稿