Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Perlで自動文書分類

Taakshi Aoki
November 16, 2015

 Perlで自動文書分類

Taakshi Aoki

November 16, 2015
Tweet

More Decks by Taakshi Aoki

Other Decks in Technology

Transcript

  1. ▪例えば迷惑メール分類の場合 青木さん おつかれさまです。 仕様書確認したよ。素晴らしい。 山田 ついに発見!出会い率100%の出会い系 サイト! こんなサイトがあったなんて! しかも完全無料。 【広告】人妻が出会いを求めています...

    紳士・淑女が出会いを求めて集まる出会 い系サイト「であちゃったよ!」 あなたも是非登録を! もちろん完全無料。 青木さん おつかれさまです。 明日の飲み会okです。 参加します。 武内 通常メールらしきメール 迷惑メールらしきメール 学習フェーズ おつかれさま × 2回 出会い × 5回 完全無料 × 2回
  2. ▪デモ(運用フェーズ) 各ニュースから特徴語を抜き出す My $contents = “ニュースの本文”; # NGワードも設定できる $config{'ng_word'} =

    ¥@original_ngword; my $calc = Lingua::JA::TFIDF->new(%config); my $result = $calc->tfidf($contents); # もっとも特徴ある単語上位十件を抽出する my @hoge = $result->list(10); main::pp(¥@hoge);
  3. ▪デモ(学習フェーズ) 小沢 51 鳩山 24 沖縄 81 首相官邸 6 外務大臣

    11 東京 12 自治体 5 ・ ・ ・ politics.txt 政治 各カテゴリ別のファイルに特徴語と出現回数をため込んでいく 野球 12 サッカー 4 イチロー 41 K1 4 延長戦 1 オリンピック 6 タイガース 5 ・ ・ ・ 懲役 10 裁判 10 誘拐 12 覚せい剤 6 雷雨 5 台風 1 東京 2 ・ ・ ・ 沢尻エリカ 12 離婚 10 オリコン 7 ハワイ 6 映画 11 女優 12 ハリウッド 5 ・ ・ ・ sports.txt スポーツ society.txt 社会 entertaiment.txt エンターテイメント
  4. ▪デモ(学習フェーズ) 学習させる use Algorithm::NaiveBayes; my @category = (“スポーツ”, “政治”, “社会”,

    “エンターテイメ ント”); foreach my $category_name(@category) { # 本当は特徴語を保存したファイルから # my %wordcount= ( “小沢” => 51 , “鳩山” => 24 , “沖縄" => 81, ….. ); my $bayes = Algorithm::NaiveBayes->new; $bayes->add_instance( attributes => %wordcount, label => $category_name, ); } # 学習を実行 $bayes->train;
  5. ▪デモ(運用フェーズ) 分類したいニュースの本文から特徴語を抜き出す My $contents = “分類したいニュースの本文”; # NGワードも設定できる $config{'ng_word'} =

    ¥@original_ngword; my $calc = Lingua::JA::TFIDF->new(%config); my $result = $calc->tfidf($contents); # もっとも特徴ある単語上位十件を抽出する my @hoge = $result->list(10); main::pp(¥@hoge);
  6. ▪デモ(運用フェーズ) 分類させる # 本当は特徴語を保存したファイルから # my %wordcount= ( “鳩山” =>

    2 , “沖縄” => 2 , “辞任” => 1, “ゴールデンウィーク” => 1 ); my $result = $bayes->predict( attributes => {%wordcount} ); while ( my ( $category_name , $point ) = each %$result ){ print "$category_name => " . sprintf("%.20f", $point) . "¥n" ; }