MeCabによるAutolink
上の研究会でMeCabを使ってAUtolinkを実現する話が出ていたので実際に実験してみた.
MeCab の辞書構造と汎用テキスト変換ツールとしての利用を参考にした.
置換するキーワードリストとしてはWikipediaの記事タイトルを用いた.記事タイトルはダウンロードサイトのjawiki-latest-all-titles-in-ns0.gzから取得できる.
記事タイトルリストは以下のスクリプトで変換する
trans.rb
title = $_.strip length = title.split(//u).length; score = [-36000.0 ,-400 *(length**1.5)].max.to_i puts "#{title},0,0,#{score},#{length}" unless (length < 3 or title =~ /[",]/)
[Tsubosaka@gauss mecab]ruby -n trance.rb < jawiki-latest-all-titles-in-ns0 > title.csv [Tsubosaka@gauss mecab]head title.csv page_title,0,0,-12649,10 !!!,0,0,-2078,3 !!!Fuck_You!!!,0,0,-20953,14 !_-attention-,0,0,-18748,13 $10,0,0,-2078,3 $100PC,0,0,-5878,6 $100_laptop,0,0,-14593,11 $100パソコン,0,0,-9050,8 $10_(SMAP),0,0,-12649,10 $10_(お笑いコンビ),0,0,-16627,12
なおタイトルリストをそのまま使うと「あ」などの単語も辞書に登録されるので,辞書に登録する単語の長さは3文字以上とする.matrix.def , unk.def ,char.def はサンプルをそのまま流用する.
dicrcはそのままだとaタグの中に空白が入ったりするので%Mではなく%mを用いる
dicrc
cost-factor = 800 bos-feature = BOS/EOS output-format-type=autolink node-format-autolink = %pS<a href="http://ja.wikipedia.org/wiki/%m">%m</a> unk-format-autolink = %M eos-format-autolink = \n
これを用いて,まず辞書をコンパイルする.
[Tsubosaka@gauss mecab]$ time /usr/local/libexec/mecab/mecab-dict-index -f utf8 -c utf8 ./pos-id.def is not found. minimum setting is used reading ./unk.def ... 2 emitting double-array: 100% |###########################################| ./pos-id.def is not found. minimum setting is used reading ./title.csv ... 655775 emitting double-array: 100% |###########################################| reading ./matrix.def ... 1x1 done! real 0m6.563s user 0m6.269s sys 0m0.295s
60万個程度のキーワードに関するdouble-arrayの生成に読み込みも含めて数秒で実行で来ている.
実行は "mecab -d ."とすればできる,たとえば
自然言語処理(しぜんげんごしょり、英: Natural language processing、NLP)は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術であり、人工知能と言語学の一分野である。「計算言語学 Computational Linguistics」も同じ意味であるが、前者は工学的な視点からの言語処理をさすのに対して、後者は言語学的視点を重視する手法をさす事が多い[1]。データベース内の情報を自然言語に変換したり、自然言語の文章をより形式的な(コンピュータが理解しやすい)表現に変換するといった処理が含まれる。
自然言語処理 - Wikipedia
を入力として与えると下のような出力が得られる.
自然言語処理(しぜんげんごしょり、英: Natural language
processing、NLP)は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術であり、人工知能と言語学の一分野である。「計算言語学
Computational
Linguistics」も同じ意味であるが、前者は工学的な視点からの言語処理をさすのに対して、後者は言語学的視点を重視する手法をさす事が多い[1]。データベース内の情報を自然言語に変換したり、自然言語の文章をより形式的な(コンピュータが理解しやすい)表現に変換するといった処理が含まれる。