「日本テレビ東京」この実際には存在しない、どこで切り分ければ良いのかよく分からない言葉を、あなたが形態素解析するとしたら、どんな風に分かちますか?おそらく以下の3つのどれかを考えるのではないでしょうか。今回はこの言葉の解析をMeCab+NAIST辞書にお願いして、結果を分析することで、MeCabが行っているコスト計算について勉強してみたいと思います。0.6.1-20090630とりあえず実行してみるさっそくMeCabに「日本テレビ東京」を解析してもらいましょう。テレビ東京」と分けていますね。視聴率的には負けていますが、NAIST辞書的には日本テレビよりもテレビ東京が優先されたようです。ちなみに「フジテレビ東京」ではどうなるでしょうか。日本テレビ」となるようです。解析する文字列が「日本テレビ東京支部」だった場合はどうなるでしょう。支部」に解析してくれました。ところで、上の例は全て最良の解のみを出力していますが、MeCabには良いと思った解析方法を上位から指定件数出力する機能があります。試しに上位3件を出力するように引数を設定して、「日本テレビ東京」を解析すると、どうなるでしょう。名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー,,EOS惚れ惚れするような結果ですね。最初に私が書いた「人間が考えそうな3つの分け方」を見事に答えてくれました。単語ごとのコストに関する説明MeCabは辞書ファイルに設定されたコスト値を読み取り、指定された文章の解析可能なパターンの中で、最もコストが低い順序を採用することで単語を分割しています。各テレビ局名のコスト値は、辞書ファイルの中ではどう設定されているのでしょう。各単語のコスト値は、NAIST辞書では以下のファイルに記載されています。/usr/local/lib/mecab/dic/naist-jdic/naist-jdic.csv上記ファイルから関連がありそうな文字を引っ張り出してみると、下記のような設定になっていました。テレビ東京,1352,1352,4752,名詞,固有名詞,組織,*,*,*,テレビ東京,テレビトウキョウ日本テレビ,1352,1352,2988,名詞,固有名詞,組織,*,*,*,日本テレビ,ニホンテレビフジテレビ,1352,1352,4146,名詞,固有名詞,組織,*,*,*,フジテレビ,フジテレビテレビ,1345,1345,3307,名詞,一般,*,*,*,*,テレビ,テレビ日本,1354,1354,3606,名詞,固有名詞,地域,国,*,*,日本,ニッポンフジ,1345,1345,5226,名詞,一般,*,*,*,*,フジ,フジフジ,1352,1352,3572,名詞,固有名詞,組織,*,*,*,フジ,フジ東京,1353,1353,3188,名詞,固有名詞,地域,一般,*,*,東京,トウキョウコスト値は4つ目のフィールド、テレビ東京なら4752(証券コードみたいですね)と記述されています。コスト値は低いものほど優先されるはずですが、意外なことに上で解析した時に最も優先度が低かったはずの日本テレビが一番コスト値が低く(2988)なっています。連接コストに関する説明どうしてコスト的に低いはずの日本テレビよりも、テレビ東京が優先される結果が返って来たのか。その理由は連接コストという要素が絡んでくるからです。連接コストは、その単語と隣の単語の左文脈IDと右文脈IDを見て、繋がりやすさからコストを上下させる機能です。「姓」の後には「名」が来やすい(連接コスト、-6659)けど、「名」の後に「姓」が来るパターンはそれほど多くはない(連接コスト、41)と設定されているとか、「国」の後には「地域」が来やすい(連接コスト、-6966)など、各文脈IDごとにコストが割り振られています。実際に連結コストにどのような値が割り振られているかは、matrix.defを参照してください。/usr/local/lib/mecab/dic/naist-jdic/matrix.def以下はmatrix.defから「姓」(1350)と「名」(1351)の連結コストを抜き出したものです。41また、「国」(1354)と「地域」(1363)の連結コストは以下のようになっています。国の順序で連結するケースはかなり少ない(+1062)ものと見て設定されているようです。ちなみにNAIST辞書の文脈IDは、1377個あります。1896129個」になります。ひゃくはちじゅうまん......。手動ではとても管理できないボリュームです。コストが見える引数を指定して結果を見てみるMeCabにはその単語を解析するのにかかったコストを表示してくれる機能があります。フォーマット用パラメータの以下の子たちがそうです。上で説明した「naist-jdic.csv」に書いてあるコスト値と同じ。