資料
- 2. 研究の時に文書データを扱いたいんだけど
◦ って需要があるかと思ったので今回やることに決まりまし
た
文書データを扱うときに必要なこと
◦ 文書データを集める仕組み
今日コ
コ
◦ それをDBにいれておく仕組み
◦ DBの文書を分析とかに使うために形態素解析する仕組み
◦ その結果から分析・マイニングする仕組み
記事データ扱うためには形態素解析器が必要なん
です
- 3. (僕自信よくわかっていません)
◦ 「文」を形態素レベルの「単語」に分割すること(たぶ
ん)
今日は勉強会をゼミ室で行う
今日 は 勉強 会 を ゼミ 室 で 行う
名詞 助詞 名詞 名詞 助詞 名詞 名詞 助詞 動詞
- 4. なんで形態素解析が必要なのか?
英文の場合
◦ This is a pen → 「This」「is」「a」「pen」
半角スペースで分ければ簡単に形態素にできます
日本語の場合
◦ すもももももももものうち → ???
正規表現とかじゃ無理です(´・ω・`)
- 5. といっても
別にうちの研究室は自然言語の研究室じゃないです
◦ 画像データ使ってたりXML使ってたりGPS情報使ってたりする
し
そういうの(解析器)は他の研究室に作っていただいて
◦ その作られた成果物を使って何かする
ことがうちの研究室的には良いんじゃないかなぁと思います
でも何かするためには解析器を利用しなきゃいけない
ので
◦ 今回は,その解析器を使って文を形態素にするとこまでをJava
を使って説明します
- 6. 形態素解析器MeCabを触ってみる (去年といっ
しょ)
◦ + 新語をMeCabに教えてみる (新要素)
- 7. とりあえず使ってみましょう
◦ eclipseの入ったPCを用意してください
- 8. 今回はメジャーなMeCabというのを使います
◦ 京大の方々がつくってくれました
他にはYahoo形態素解析APIを使う手もあります
◦ そんな難しくないので各自調べておくといいかもしれま
せん
- 9. Google → MeCab → 一番上のページ
ダウンロード → Binay Package for MS-
Windows
- 13. あとは適当に押していくと辞書の作成が始まりま
す
辞書の作成が始まったら少し待ってると完了しま
す
- 14. MeCabを使う準備ができました
デスクトップにあるMeCabのショートカットを起
動
◦ → 適当に日本語の文書をいれてみましょう
ちゃんと文を形態素に分けてくれましたか?
◦ 次はこれをJavaから使ってみましょう
- 15. なんでプログラムから使う必要があるのか
◦ 今のショートカットのやつでいいじゃん
10件ぐらいならそれでいいのですが
◦ 1000万件ぐらいになると発狂するからできれば自動化した
いね
コード書いて作っておけば流用可能
◦ そこに文書投げて形態素受け取るクラスやメソッドを作れ
ば将来的に楽になるよね
- 17. SlothLib
◦ Java用のライブラリ
これも(確か)京大の人が作ってくれました
毎日感謝の念を込めて京大の方角に頭を垂れましょう
◦ Javaで研究するときの負担を下げてくれるよ,やったね学蓄
このライブラリ1つで
◦ MeCabが使えたり
◦ 検索APIが使えたり(結構古いので動かないのも結構ある)
◦ 特徴ベクトリを簡単に求めてくれたり
まぁ便利なので使わない手はないです
- 18. Google → SlothLib → 一番上のページ
左の「ダウンロード」を選択
「Java」を選択
◦ JarとJavaDocを落としておきましょう
◦ 落としたら分かりやすい場所にjarファイルだけおいてお
いとください (c:/java_libs/とかに)
- 20. そんな難しくないので使っている内に慣れます
◦ もうjavacうんたらと書く方法を僕は忘れました
◦ ライブラリもどう追加するのか忘却しました
Eclipseは便利だよ!
某Hita○のソフトウェア部門でも普通に使ってるよ!
プロジェクト作成 → クラスファイル作成 → ライブ
ラリ追加
◦ までは実際にここで動かしながら説明します
◦ わかっている人はslothLibのDocでも読んでるといいよ!
- 21. クラスの作成
クラス名は適当でいいよ
ここの☑は忘れずに
- 22. コードをゴリゴリ書いていくだけです
とりあえず一文だけ形態素解析するコードを載せます
◦ あとはこれを色々と工夫すれば良いはずです
その前に以下の場所をメモ帳あたりに残してください
◦ mecab.exeの場
例: C:/hoge/MeCab/bin/mecab.exe
◦ mecabrcの場所
例: C:/hoge/MeCab/etc/mecabrc
- 23. import slothLib.SlothLibException;
import slothLib.NLP.*; ←あんまこういう書き方はよくないですが,今回はとり
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ あえず
public static void main(String[] args) throws SlothLibException{
MeCab mecab = new MeCab(“exeのパス”,”rcのパス”);
MeCabResult result = mecab.doAnalyze(“ここに適当な
文”);
IMorpheme[] im = result.getMorphemes();
for(int i=0;i<im.length;i++){
System.out.println( 生のままの形態素
im[i].getRaw() 標準形にしたもの
+“→”+im[i].getOriginal() 品詞情報とか
+”:”+im[i].getPOS()
Memo
); Eclipseは賢いので
} これで実行してみましょ result.getM ぐらい
} う Ctrl + Spaceを教えてみま
- 24. これを工夫していけばいいだけです
下のことをパパッとやってみましょう
◦ 0. 適当なニュース記事を持ってきましょう
◦ 1. そこから名詞の単語だけ出力してみてください
Stringのsplitやequalsとかを使うと簡単かもね
◦ 2. 「米軍普天間飛行場移設」のような熟語は形態素解析
だけだと持ってこれません,名詞の出力の内,熟語っぽ
いものは熟語として出力するようにしてみてください
(完璧にできる必要はないです)
米 軍 普天間 飛行場 移設 米軍普天間飛行場移設
- 25. 他にもいろいろとあると思います
IMorpheme[] im = result.getMorphemes();
StringBuffer sb = new StringBuffer();
for(int i=0;i<im.length;i++){
String[] pos = im[i].getPOS().split(",");
if(pos[0].equals("名詞")){
sb.append(im[i].getRaw());
}else{
if(sb.length() > 0){
System.out.println(sb.toString());
sb.setLength(0);
} これだと「冬のソナタ」とかは持ってこれ
} ないね
} しょうがないね
- 26. ニュース記事を解析してみて分かったと思いますが
◦ すこぶる新語(未知語)に弱いです
なので、MeCabに新語を教えてみましょう
◦ 今回は固有名詞についてだけ触れます
◦ 活用形があるのはちょっとめんどいので各自調べてみてく
ださい
- 27. 解析精度を地道に上げることができます
◦ 例えばAKB48を「AKB」「48」ではなく「AKB48」の
ように
全部やろうと思うと手間ですが…
◦ あとは以下のような文も
江戸川コナンはまた事件を解決した
江戸川コナン,-1,-1,10,名詞,一般,*,*,*,*,工藤新一,<略>, クドウシン
イチ
と教えておくと また
工藤新一 は 事件 を 解決 する た
名詞 助詞 接続詞 名詞 助詞 名詞 動詞 助動詞
- 28. またMeCabをショートカットから起動して
◦ 超電磁砲の新刊は来月に発売します
◦ 工藤新一はいったい誰なのか
この2文を入れてみましょう
ちゃんと形態素解析されたかな?
- 29. まずメモ帳を起動してください
そしたら
超電磁砲,-1,-1,10,名詞,一般,*,*,*,*,超電磁砲,レールガン,レールガン
工藤新一,-1,-1,10,名詞,固有名詞,人名,名,*,*,江戸川コナン,エドガワコナン,エドガワコ
ナン
と書いて mydic.csv で保存してください
◦ 文字コードはshift-jisで
◦ これをカレントフォルダに置いて下さい
- 30. mecab-dict-index.exeの場所と
◦ C:/hoge/MeCab/bin/mecab-dict-index :A
(拡張子いりません)
ipadicフォルダの場所をメモ帳にメモってください
◦ C:/hoge/MeCab/dic/ipadic :B
そしたら
◦ “A“ –d“B“ –u user.dic –f shift-jis –t shift-jis mydic.csv
これをコマンドラインで実行してください
成功したらuser.dicってのができてると思います
- 31. user.dicをC:hogeMecabdic以下に置いて下さい
Mecabetcフォルダにあるmecabrcに以下を追加
◦ userdic = C:hogeMeCabdicuser.dic
※user.dicの場所はどこでも良いです
詳しい説明は「MeCab 単語 追加」でGoogleで検索しましょう
- 32. もう一度MeCabをショートカットから起動して
◦ 超電磁砲の新刊は来月に発売します
◦ 工藤新一はいったい誰なのか
の2文を形態素解析してみましょう
ちゃんとmydicは反映されてるかな
- 33. 未知語や新語に弱いです(再度)
◦ 解析結果は使っている辞書に影響されているので
解析器によって結果が異なります
◦ 「辞書」によっても結果が異なります
◦ 自分の扱いたいデータに適した解析器・辞書を使おうね
◦ 論文に書くときは必ず使っている解析器を書きましょう
ツールの一つとして考えましょう
◦ これ自体を研究することは別の研究室のお話になります
(え?他の研究室のほうがよかったって?)
- 34. とまぁ今回は軽くこんな感じに形態素できるとこ
まで
◦ これでいつでも形態素解析できるね
本来はこの結果をDBに貯めこむなり分析するなり
しますが,また別の機会に
◦ 「これをDBに入れるときのテーブル構造はどうしたら一
番いいかな?」
というのを考えてテーブル構成表でも作ってみるといいで
す
◦ 「多くの文書を高速に形態素解析するためにはどうした
らいいかな?」
誰かうまい方法知っていたら教えてください
- 35. Yahoo!形態素解析(坂本君担当)
◦ まったり形態素解析勉強会はとりあえずそれで終わるつもり
です
それ以外なんかあれば言って下さい