SlideShare a Scribd company logo
~第1回(全2回ぐらい)~
   説明する人:M2 青島
   Twitter ID: Bob_Mk2
   研究の時に文書データを扱いたいんだけど
      ◦ って需要があるかと思ったので今回やることに決まりまし
        た


     文書データを扱うときに必要なこと
    ◦   文書データを集める仕組み
今日コ
 コ
    ◦   それをDBにいれておく仕組み
    ◦   DBの文書を分析とかに使うために形態素解析する仕組み
    ◦   その結果から分析・マイニングする仕組み


     記事データ扱うためには形態素解析器が必要なん
      です
   (僕自信よくわかっていません)
    ◦ 「文」を形態素レベルの「単語」に分割すること(たぶ
      ん)
          今日は勉強会をゼミ室で行う



今日    は   勉強   会    を    ゼミ   室    で    行う
名詞   助詞   名詞   名詞   助詞   名詞   名詞   助詞   動詞
   なんで形態素解析が必要なのか?

   英文の場合
    ◦ This is a pen → 「This」「is」「a」「pen」
      半角スペースで分ければ簡単に形態素にできます


   日本語の場合
    ◦ すもももももももものうち → ???

   正規表現とかじゃ無理です(´・ω・`)
   といっても
   別にうちの研究室は自然言語の研究室じゃないです
    ◦ 画像データ使ってたりXML使ってたりGPS情報使ってたりする
      し



   そういうの(解析器)は他の研究室に作っていただいて
    ◦ その作られた成果物を使って何かする
     ことがうちの研究室的には良いんじゃないかなぁと思います


   でも何かするためには解析器を利用しなきゃいけない
    ので
    ◦ 今回は,その解析器を使って文を形態素にするとこまでをJava
      を使って説明します
   形態素解析器MeCabを触ってみる (去年といっ
    しょ)
    ◦ + 新語をMeCabに教えてみる (新要素)
   とりあえず使ってみましょう
    ◦ eclipseの入ったPCを用意してください
   今回はメジャーなMeCabというのを使います
    ◦ 京大の方々がつくってくれました

   他にはYahoo形態素解析APIを使う手もあります
    ◦ そんな難しくないので各自調べておくといいかもしれま
      せん
   Google → MeCab → 一番上のページ

   ダウンロード → Binay Package for MS-
    Windows
mecab-win32 → 0.98 → mecab-0.98.exe

  ダウンロードが終わったらexeファイルを起動
Japaneseを選択すると下の画面になると思いま
す




   「SHIFT-JIS」を選択→ 「次へ」
   UTF-8でもイイですが,
   今回はとりあえずShift-JISにしといて下
   さい
同意する→次へ




インストール先は自由にしてくだ
       さい
  (場所は覚えておくこと)
   あとは適当に押していくと辞書の作成が始まりま
    す

   辞書の作成が始まったら少し待ってると完了しま
    す
   MeCabを使う準備ができました

   デスクトップにあるMeCabのショートカットを起
    動
    ◦ → 適当に日本語の文書をいれてみましょう



   ちゃんと文を形態素に分けてくれましたか?
    ◦ 次はこれをJavaから使ってみましょう
   なんでプログラムから使う必要があるのか
    ◦ 今のショートカットのやつでいいじゃん



   10件ぐらいならそれでいいのですが
    ◦ 1000万件ぐらいになると発狂するからできれば自動化した
      いね



   コード書いて作っておけば流用可能
    ◦ そこに文書投げて形態素受け取るクラスやメソッドを作れ
      ば将来的に楽になるよね
その前に
   SlothLib
    ◦ Java用のライブラリ
      これも(確か)京大の人が作ってくれました
      毎日感謝の念を込めて京大の方角に頭を垂れましょう
    ◦ Javaで研究するときの負担を下げてくれるよ,やったね学蓄

   このライブラリ1つで
    ◦ MeCabが使えたり
    ◦ 検索APIが使えたり(結構古いので動かないのも結構ある)
    ◦ 特徴ベクトリを簡単に求めてくれたり

   まぁ便利なので使わない手はないです
   Google → SlothLib →   一番上のページ

   左の「ダウンロード」を選択

   「Java」を選択
    ◦ JarとJavaDocを落としておきましょう




    ◦ 落としたら分かりやすい場所にjarファイルだけおいてお
      いとください (c:/java_libs/とかに)
 Eclipse使ったことある人!
   そんな難しくないので使っている内に慣れます
    ◦ もうjavacうんたらと書く方法を僕は忘れました
    ◦ ライブラリもどう追加するのか忘却しました
      Eclipseは便利だよ!
      某Hita○のソフトウェア部門でも普通に使ってるよ!


   プロジェクト作成 → クラスファイル作成 → ライブ
    ラリ追加
    ◦ までは実際にここで動かしながら説明します

    ◦ わかっている人はslothLibのDocでも読んでるといいよ!
クラスの作成




    クラス名は適当でいいよ




     ここの☑は忘れずに
   コードをゴリゴリ書いていくだけです


   とりあえず一文だけ形態素解析するコードを載せます
    ◦ あとはこれを色々と工夫すれば良いはずです


   その前に以下の場所をメモ帳あたりに残してください
    ◦ mecab.exeの場
      例: C:/hoge/MeCab/bin/mecab.exe
    ◦ mecabrcの場所
      例: C:/hoge/MeCab/etc/mecabrc
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を教えてみま
   これを工夫していけばいいだけです

   下のことをパパッとやってみましょう
    ◦ 0. 適当なニュース記事を持ってきましょう
    ◦ 1. そこから名詞の単語だけ出力してみてください
       Stringのsplitやequalsとかを使うと簡単かもね
    ◦ 2. 「米軍普天間飛行場移設」のような熟語は形態素解析
      だけだと持ってこれません,名詞の出力の内,熟語っぽ
      いものは熟語として出力するようにしてみてください
     (完璧にできる必要はないです)
     米   軍   普天間   飛行場   移設       米軍普天間飛行場移設
   他にもいろいろとあると思います
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);
                }             これだと「冬のソナタ」とかは持ってこれ
        }                                     ないね
}                                         しょうがないね
   ニュース記事を解析してみて分かったと思いますが
    ◦ すこぶる新語(未知語)に弱いです

   なので、MeCabに新語を教えてみましょう
    ◦ 今回は固有名詞についてだけ触れます
    ◦ 活用形があるのはちょっとめんどいので各自調べてみてく
      ださい
   解析精度を地道に上げることができます
    ◦ 例えばAKB48を「AKB」「48」ではなく「AKB48」の
      ように
      全部やろうと思うと手間ですが…

    ◦ あとは以下のような文も
      江戸川コナンはまた事件を解決した
    江戸川コナン,-1,-1,10,名詞,一般,*,*,*,*,工藤新一,<略>, クドウシン
                        イチ


      と教えておくと また
     工藤新一   は            事件    を   解決    する    た
      名詞     助詞    接続詞   名詞   助詞    名詞   動詞   助動詞
   またMeCabをショートカットから起動して

    ◦ 超電磁砲の新刊は来月に発売します

    ◦ 工藤新一はいったい誰なのか

   この2文を入れてみましょう



   ちゃんと形態素解析されたかな?
   まずメモ帳を起動してください

    そしたら
超電磁砲,-1,-1,10,名詞,一般,*,*,*,*,超電磁砲,レールガン,レールガン
工藤新一,-1,-1,10,名詞,固有名詞,人名,名,*,*,江戸川コナン,エドガワコナン,エドガワコ
ナン

    と書いて mydic.csv で保存してください
     ◦ 文字コードはshift-jisで
     ◦ これをカレントフォルダに置いて下さい
   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ってのができてると思います
   user.dicをC:hogeMecabdic以下に置いて下さい




   Mecabetcフォルダにあるmecabrcに以下を追加
    ◦ userdic = C:hogeMeCabdicuser.dic


   ※user.dicの場所はどこでも良いです
   詳しい説明は「MeCab 単語 追加」でGoogleで検索しましょう
   もう一度MeCabをショートカットから起動して

    ◦ 超電磁砲の新刊は来月に発売します

    ◦ 工藤新一はいったい誰なのか

   の2文を形態素解析してみましょう



   ちゃんとmydicは反映されてるかな
   未知語や新語に弱いです(再度)
    ◦ 解析結果は使っている辞書に影響されているので

   解析器によって結果が異なります
    ◦ 「辞書」によっても結果が異なります
    ◦ 自分の扱いたいデータに適した解析器・辞書を使おうね
    ◦ 論文に書くときは必ず使っている解析器を書きましょう

   ツールの一つとして考えましょう
    ◦ これ自体を研究することは別の研究室のお話になります
     (え?他の研究室のほうがよかったって?)
   とまぁ今回は軽くこんな感じに形態素できるとこ
    まで
    ◦ これでいつでも形態素解析できるね


   本来はこの結果をDBに貯めこむなり分析するなり
    しますが,また別の機会に
    ◦ 「これをDBに入れるときのテーブル構造はどうしたら一
      番いいかな?」
     というのを考えてテーブル構成表でも作ってみるといいで
      す
    ◦ 「多くの文書を高速に形態素解析するためにはどうした
      らいいかな?」
     誰かうまい方法知っていたら教えてください
   Yahoo!形態素解析(坂本君担当)
    ◦ まったり形態素解析勉強会はとりあえずそれで終わるつもり
      です


   それ以外なんかあれば言って下さい

More Related Content

What's hot

S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presen
Kouhei Maeda
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話Kouhei Maeda
 
コードで感じるKotlin入門
コードで感じるKotlin入門コードで感じるKotlin入門
コードで感じるKotlin入門
iPride Co., Ltd.
 
Jvm internal
Jvm internalJvm internal
Jvm internalGo Tanaka
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~Akihiro Kuwano
 
Pattern match with case class
Pattern match with case classPattern match with case class
Pattern match with case classKai Sasaki
 
カジュアルにMongo dbのbackup機能説明
カジュアルにMongo dbのbackup機能説明カジュアルにMongo dbのbackup機能説明
カジュアルにMongo dbのbackup機能説明
Masakazu Matsushita
 
Boost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼうBoost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼう
nvsofts
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
Yusuke Hirao
 
意識の低い自動化
意識の低い自動化意識の低い自動化
意識の低い自動化
greenasparagus
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDBmoai kids
 
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)baban ba-n
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasual
Yasuhiro Matsuo
 
Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*
irof N
 
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)
Yoshiaki Shibutani
 
YAPC::Asia Tokyo 2013 ランチセッション
YAPC::Asia Tokyo 2013 ランチセッションYAPC::Asia Tokyo 2013 ランチセッション
YAPC::Asia Tokyo 2013 ランチセッション
Kuninobu SaSaki
 
CasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用TipsCasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用Tips
Naoki Sega
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 

What's hot (20)

S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presen
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話
 
コードで感じるKotlin入門
コードで感じるKotlin入門コードで感じるKotlin入門
コードで感じるKotlin入門
 
Jvm internal
Jvm internalJvm internal
Jvm internal
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~
 
Pattern match with case class
Pattern match with case classPattern match with case class
Pattern match with case class
 
カジュアルにMongo dbのbackup機能説明
カジュアルにMongo dbのbackup機能説明カジュアルにMongo dbのbackup機能説明
カジュアルにMongo dbのbackup機能説明
 
Boost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼうBoost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼう
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 
意識の低い自動化
意識の低い自動化意識の低い自動化
意識の低い自動化
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
 
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasual
 
Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*
 
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)
 
YAPC::Asia Tokyo 2013 ランチセッション
YAPC::Asia Tokyo 2013 ランチセッションYAPC::Asia Tokyo 2013 ランチセッション
YAPC::Asia Tokyo 2013 ランチセッション
 
CasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用TipsCasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用Tips
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 

Similar to 資料

苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
Takuya Mukohira
 
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座  for WordPress (初級)デザイナーのためのPHP講座  for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)
佑 小田垣佑
 
MongoTalkを試してみた
MongoTalkを試してみたMongoTalkを試してみた
MongoTalkを試してみた
Naruhiko Ogasawara
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話azuma satoshi
 
ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争Eric Sartre
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
hecomi
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
Nishida Kansuke
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
mitim
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Nishida Kansuke
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf
akiko_pusu
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
akitsukada
 
オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)
nomuken
 
今さら始めるJavaScript
今さら始めるJavaScript今さら始めるJavaScript
今さら始めるJavaScriptAshitaba YOSHIOKA
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
Ken Morishita
 
CoffeeScript+enchant.jsでクロージャが気持よくかけた話
CoffeeScript+enchant.jsでクロージャが気持よくかけた話CoffeeScript+enchant.jsでクロージャが気持よくかけた話
CoffeeScript+enchant.jsでクロージャが気持よくかけた話
Yusuke HIDESHIMA
 
クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017
Motohiro Ueki
 
『こなへん』ができるまで ☆リリース直前編☆
『こなへん』ができるまで ☆リリース直前編☆『こなへん』ができるまで ☆リリース直前編☆
『こなへん』ができるまで ☆リリース直前編☆
5mingame2
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
Takahiro Iwase
 

Similar to 資料 (20)

苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
 
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座  for WordPress (初級)デザイナーのためのPHP講座  for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)
 
MongoTalkを試してみた
MongoTalkを試してみたMongoTalkを試してみた
MongoTalkを試してみた
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
 
ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)
 
今さら始めるJavaScript
今さら始めるJavaScript今さら始めるJavaScript
今さら始めるJavaScript
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
CoffeeScript+enchant.jsでクロージャが気持よくかけた話
CoffeeScript+enchant.jsでクロージャが気持よくかけた話CoffeeScript+enchant.jsでクロージャが気持よくかけた話
CoffeeScript+enchant.jsでクロージャが気持よくかけた話
 
クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017
 
『こなへん』ができるまで ☆リリース直前編☆
『こなへん』ができるまで ☆リリース直前編☆『こなへん』ができるまで ☆リリース直前編☆
『こなへん』ができるまで ☆リリース直前編☆
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
 

資料

  • 1. ~第1回(全2回ぐらい)~ 説明する人:M2 青島 Twitter ID: Bob_Mk2
  • 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
  • 10. mecab-win32 → 0.98 → mecab-0.98.exe ダウンロードが終わったらexeファイルを起動
  • 11. Japaneseを選択すると下の画面になると思いま す 「SHIFT-JIS」を選択→ 「次へ」 UTF-8でもイイですが, 今回はとりあえずShift-JISにしといて下 さい
  • 12. 同意する→次へ インストール先は自由にしてくだ さい (場所は覚えておくこと)
  • 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!形態素解析(坂本君担当) ◦ まったり形態素解析勉強会はとりあえずそれで終わるつもり です  それ以外なんかあれば言って下さい