ChaSenと久々のPerl
形態素解析をするにあたって、osx版のChaSen(perlモジュール)を使うことにしました。ただ、サーバーへのインストール方法がわからなかったので(苦笑)、ローカル環境で使ってます。本当はフリーで配布されてる「形態素解析もどき」を使おうと思ったんですが、文字コードがSHIFT_JISのためか解析結果が化けたりするのでやめました。
それに、ChaSenの場合は漢字の読みや品詞まで解析してくれるので強力です。品詞が事前にわかれば、同じ品詞の別の言葉に置き換えることができますから。
そんなわけで、久々にperlでスクリプトを書いてます。すっかり忘れてるかと思ったら、phpと構文が似ているので(正確にはphpがperlに似ている……ですが)何とか進んでます。それと、過去に書いた自分のスクリプトも、カンペー的存在でかなり役立ってます。消さないで良かった。
ただこのChaSen、なぜか英語がすべて1つ1つのアルファベットとして解析されてしまいます。例えば「ABC」という羅列があったとすると、そのまま「ABC」と解析してほしいのに「A」「B」「C」とわけてしまうんですね。これはかなり厳しい。まあ、オプション指定すれば良いだけの話しなのかもしれませんが、やり方がわからない(苦笑)
そこで、品詞情報を参照しつつ解析結果を修正する処理を追加。その結果、アルファベットや数字、記号等を1つのまとまりにすることに成功。これらが混在している場合も1つにしちゃいます。
が、次の問題。半角スペースがなぜか弾かれる。例えば「site MONO」を解析させると「siteMONO」になってしまうんですね。で、調べてみたらChaSenの仕様とか……。しょうがないので、解析前に半角スペースを別の文字に置き換え、解析後に元に戻す処理を追加。ついでに半角の()が括弧ではなく未知語として認識されるのも修正。
今わかっている今後の課題としては、文章中にクオーテーションマークが含まれてるとスクリプトが落ちるので、エスケープさせないとならないこと。そして「!?」等の一般記号を「!」「?」ではなく「!?」にすることですね。まあ、まだ先は長いです。
それに、ChaSenの場合は漢字の読みや品詞まで解析してくれるので強力です。品詞が事前にわかれば、同じ品詞の別の言葉に置き換えることができますから。
そんなわけで、久々にperlでスクリプトを書いてます。すっかり忘れてるかと思ったら、phpと構文が似ているので(正確にはphpがperlに似ている……ですが)何とか進んでます。それと、過去に書いた自分のスクリプトも、カンペー的存在でかなり役立ってます。消さないで良かった。
ただこのChaSen、なぜか英語がすべて1つ1つのアルファベットとして解析されてしまいます。例えば「ABC」という羅列があったとすると、そのまま「ABC」と解析してほしいのに「A」「B」「C」とわけてしまうんですね。これはかなり厳しい。まあ、オプション指定すれば良いだけの話しなのかもしれませんが、やり方がわからない(苦笑)
そこで、品詞情報を参照しつつ解析結果を修正する処理を追加。その結果、アルファベットや数字、記号等を1つのまとまりにすることに成功。これらが混在している場合も1つにしちゃいます。
が、次の問題。半角スペースがなぜか弾かれる。例えば「site MONO」を解析させると「siteMONO」になってしまうんですね。で、調べてみたらChaSenの仕様とか……。しょうがないので、解析前に半角スペースを別の文字に置き換え、解析後に元に戻す処理を追加。ついでに半角の()が括弧ではなく未知語として認識されるのも修正。
今わかっている今後の課題としては、文章中にクオーテーションマークが含まれてるとスクリプトが落ちるので、エスケープさせないとならないこと。そして「!?」等の一般記号を「!」「?」ではなく「!?」にすることですね。まあ、まだ先は長いです。