よみがな あり|なし
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】全角カタカナ→全角ひらがな
スタジオムーンリーフ(2005年1月開設/Since 2005)
代表者:野口 卓洋(Takuhiro Noguchi)
Add:356-0006 埼玉県ふじみ野市霞ヶ丘3-1-22-504
Twitter:@StudioMoonLeaf
Facebook:facebook.com/noguchi.takuhiro
©2017 STUDIO MOON LEAF ALL RIGHTS RESERVED.