igo-ruby(辞書はMeCabとほぼ同じなのでMeCabのこととして読んでも可)の辞書はナウくないです。
「人工知能」を分かち書きすると「人工 知能」になっちゃいます。
「ニコニコ動画」を分かち書きすると「ニコニコ 動画」になっちゃいます。
「IPアドレス」を分かち書きすると「IP アドレス」になっちゃいます。
「ニューラルネットワーク」を分かち書きすると「ニュー ラ ル ネットワーク」になっちゃいます。
形態素解析器の応用例が増えてくる中で必要となるのは、上記で挙げたようなナウいワードを1つの単語として扱ってくれることです。
例えばbuzztterのようなサービスでは、「ニコニコ動画」は「ニコニコ動画」でいて欲しいし、「ニューラルネットワーク」は「ニューラルネットワーク」のままであってほしいわけですね。
僕も最近ちょっと辞書をナウくする必要が出たので、早速公開されているはてなキーワードのデータを使ってやってみました。
はてなキーワードのデータから辞書を作るコード(仮)は以下。
takuti / twitter_bot / tool / hatena2dic.rb
はてなキーワードのデータはキーワードそのものとふりがながタブ区切りで各行に書かれているので、それに合わせる形でそれぞれを読んであげる。元データの文字コードはEUC-JP。
そしてお好みの条件で辞書に加えたくないキーワードなんかも除外する。
今回は、
- 2009-09-04のような年月日
- 1945年のような年
- すでに1単語として判断されるもの
を除外しています。
ふりがなはMojiモジュールを使ってカタカナ化しています。
加えて、辞書を作る時に大切なコスト計算もしています。MeCabだとコストに-1を指定すると自動でコストを割り振ってくれるみたいですが、igo-rubyにはそんな機能ありません。
辞書のコストについては以下を参考にさせていただきました。
- 日本テレビ東京で学ぶMeCabのコスト計算 | mwSoft
- mecabのユーザ辞書でwikipediaとhatenaキーワードを利用する - てんぷろぐ
- はてなキーワードからMecCab辞書を生成する(Ruby版)
- MeCab の辞書構造と汎用テキスト変換ツールとしての利用
最終的には2番目のリンク先に記載されていた、
score = [-32768.0, (6000 - 200 *(title.size**1.3))].max.to_i
を利用させていただくことに。
各キーワードの情報はCSVに以下のような形で書き込んで、それを追加用辞書ファイルとする。既存の辞書ファイルの文字コードがすべてEUC-JPなのでこれもEUC-JPで。
#{word},0,0,#{cost},名詞,一般,*,*,*,*,#{word},#{furigana},#{furigana}
最後に、追加用辞書ファイルをディレクトリ mecab-ipadic-2.7.0-20070801 内に移動して、あとは通常の辞書生成と同じようにコマンドを叩いて終わり。
java -Xmx1024m -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP
これで生成された辞書を使って形態素解析なんかを行えば、「人工知能」は「人工知能」のままで、「ニコニコ動画」は「ニコニコ動画」のままで解釈される!ぱちぱち。
問題点
1. カンマを含むキーワードが登録できない
カンマを含むキーワード(「NO MUSIC, NO LIFE.」とか)を今の実装で辞書に登録しようとすると、カンマそのものがCSVの区切り文字と判断されて上手くいきません。
これはMeCabの場合、そのキーワードをダブルクォーテーションで囲ってあげることで解決できます。
しかしigo-rubyの場合、MeCabとの相違点として挙げられているように、
"組打ち",1285,1285,5622,名詞,一般,*,*,*,*,組打ち,クミウチ,クミウチ ※ ↑この単語の表層形は、'組打ち'ではなく'"組打ち"'となる
と、ダブルクォーテーションそのものも単語の一部として解釈されてしまうらしく、しかしまぁさほど影響は無さそうなので今はカンマを含むキーワードを全てスキップすることで応急処置としています。
2. 文字コードCP51932の扱い
Ⅲや②、㈱といった機種依存文字を含むキーワードはデータから読み込んだときの文字コードがCP51932になっています。「東大理Ⅲ」とかですね。
それらを他のEUC-JPのキーワードと同じように扱うと、「人工知能」は「人工知能」のままになっても、「東大理Ⅲ」なんかは「東大理Ⅲ」のままにはならない。
困ったのでひとまず保留ということで、文字コードがCP51932のキーワードを全てスキップすることでこちらも応急処置としています。
CP51932がEUC-JPになればこの問題は解決するの?どうやってそれを確認するの(どうやってCP51932からEUC-JPへの変換を行うの)?
このあたりに答えを出す必要がありそう。
というわけで
問題点が残っていて未完成ではありますが、ひとまずある程度辞書がナウい感じになったということでまとめておきます。
今回ははてなキーワードでしたが、Wikipediaのタイトルでも元データがどんな規則で書かれているかに注意すれば同じ事は簡単にできますね。
【参考】Wikipediaのダウンロードできるデータファイル一覧 | mwSoft
その他参考にさせていただものは以下です。
- テキストからWikipedia見出し語を抽出 - 人工知能に関する断創録能に関する断創録
- igo-rubyで形態素解析して、twitterの口癖分析もどきしてみた | Lightweight HackingLightweight Hacking
シェアする
カテゴリ
あわせて読みたい
- 2017-10-21
- ルールベースは『人工知能』か
- 2017-09-17
- igo-rubyを新語辞書NEologdでナウい感じにする
- 2013-10-01
- 人工知能関連技術の発展、それすなわちUI革命
最終更新日: 2022-01-18
書いた人: たくち
Takuya Kitazawa(たくち)です。長野県出身、カナダ・バンクーバー在住のソフトウェアエンジニア。これまでB2B/B2Cの各領域で、Web技術・データサイエンス・機械学習のプロダクト化および顧客への導入支援・コンサルティング、そして関連分野の啓蒙活動に携わってきました。現在は主に北米(カナダ)、アジア(日本)、アフリカ(マラウイ)の個人および企業を対象にフリーランスとして活動中。詳しい経歴はレジュメ を参照ください。いろいろなまちを走って、時に自然と戯れながら、その時間その場所の「日常」を生きています。ご意見・ご感想およびお仕事のご相談は [email protected] まで。
近況 一杯のコーヒーを贈る免責事項
- Amazonのアソシエイトとして、当サイトは amazon.co.jp 上の適格販売により収入を得ています。
- 当サイトおよび関連するメディア上での発言はすべて私個人の見解であり、所属する(あるいは過去に所属した)組織のいかなる見解を代表するものでもありません。
- 当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、個人ブログという性質上、誤情報や客観性を欠いた意見が入り込んでいることもございます。いかなる場合でも、当サイトおよびリンク先に掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
- その他、記事の内容や掲載画像などに問題がございましたら、直接メールでご連絡ください。確認の後、対応させていただきます。