Friday,September 9
よみがな自動処理()への道()【7】ヤマにも負()ケズ
PerlからMeCabにコマンドを送信()して、「読()み」の解析()結果()である全角()カタカナを全角()ひらがなに変換()できるようになりました。
全()自動()よみがな処理()の実現()までもう少()しと思()いきや、乗()りこえなくてはいけないヤマがいくつかあります。今回()のログは、それらのヤマとその解決()方法()をご紹介()します。
ヤマ1「改行()文字()の取()り扱()い」
よみがな自動()処理()への道()【5】PerlとMeCabはパイプでつながる に書()きましたが、PerlからMeCabにコマンドを送信()するために形態素()解析()をさせたい文字()列()を前()もってファイルに保存()する仕組()みを採用()しました。このとき、複数()行()によって書()かれたファイルをMeCabの形態素()解析()に通()すと、改行()文字()が空白()文字()(ヌル文字())になります。
解析()結果()から改行()文字()を復帰()させようとしても、文章()末尾()の改行()と改行()だけの行()との見()わけがつきません。
スタジオムーンリーフでは、MeCabを通()す前()に改行()文字()の前()に「<br />」を挿入()しておき、MeCabを通()したあとに「<br />」を目印()にして改行()文字()を付与()する処理()を追加()しました。
Mecabを通()す前()に
\n → <br /> + \n
に変換()。
Mecabの形態素()解析()を通()すと\n(改行()文字())は消滅()する(ヌル文字()になる)
Mecabを通()したあとに
<br /> → <br /> + \n
に変換()すると、改行()文字()を正確()な位置()に復帰()できる。
ヤマ2「よみがなに絞()りこむ」
MeCabの形態素()解析()は、文章()を分詞()に分解()します。
漢字()によみがなをうつためには、ここからさらにひと工夫()せねばなりません。
たとえば、「保存()」を形態素()解析()すると、解析()「保存()」読()み「ほぞん」となり、この場合()はそのままよみがなにできます。
でも、「お願()い」を形態素()解析()すると、解析()「お願()い」読()み「おねがい」となるため、ここからさらに「願()」+「ねが」に絞()りこむ必要()があります。
さらに、「持()ち帰()る」を形態素()解析()すると、解析()「持()ち帰()る」読()み「もちかえる」となります。ひとつの分詞()で「持()」+「も」、「帰()」+「かえ」と絞()りこみが2か所()になるケースもあります。
ヤマのなかでは、この処理()が最()も険()しいヤマです。
方法()はいくつもあると思()いますが、サブルーチンを駆使()しても複雑()で長()い処理()になると思()います。ここは粘()り強()く取()り組()むしかありません。
保存()→形態素()解析()→解析()「保存()」読()み「ほぞん」
お願()い→形態素()解析()→解析()「お願()い」読()み「おねがい」
絞()りこみ「願()」+「ねが」
持()ち帰()る→形態素()解析()→解析()「持()ち帰()る」読()み「もちかえる」
絞()りこみ「持()」+「も」&「帰()」+「かえ」
ヤマ3「MeCabも万能()ではない」
MeCabの形態素()解析()はたいへん優秀()ですが、デフォルトの辞書()は万能()じゃありません。
自動()処理()としては妥協()できる範囲()ではありますが、ときどき読()み間違()いが生()じます。
その都度()MeCabの辞書()をカスタマイズすればいいのかもしれませんが、辞書()登録()のない漢字()や、独特()の読()み方()をする人名()や地名()など、すべての日本語()に完全()に対応()するのは困難()です。
ここでスタジオムーンリーフの過去()の財産()が輝()きます。
漢字()によみがなをうつ【前編()】 に書()いてありますが、漢字()の後()ろに半角()括弧()で囲()まれたよみがなをあつかう文字()列()処理()は、すでに開発()済()みです。
これを活()かし、漢字()のあとに半角()括弧()で囲()まれたよみがながある場合()は、MeCabの形態素()解析()よりもそちらを優先()する処理()としました。
これにより、MeCabの辞書()をカスタマイズせずとも読()み間違()いを修正()したり、地名()や人名()だけに半角()括弧()をつけてよみがなを指定()することができるようになりました。
よみがなを簡単()に微()調整()できるこの機能()は、ブログはともかく読()みの正確()性()が問()われるようなニュース記事()を書()くときにとても使()い勝手()がよいです。
サンプルコードを書()くと、解説()が長編()小説()のようになるので割愛()しました。
でも、コードを書()くうえでの基本()的()な考()えは記()したつもりです。
≫ NEXT_LOG よみがな自動()処理()への道()【8】1日()にして成()らず(3 photos)
≪ PREV_LOG よみがな自動()処理()への道()【6】全角()カタカナ→全角()ひらがな