scikit-learn で TFIDF

TFIDF ぐらいなら自分で書いても簡単だけど、実際に使う時は面倒くさいし変なバグを生みたくないので sklearn にやってもらおう。

gist.github.com

sklearn の CountVectorizer や TfidfVectorizer は、デフォルトでは、一文字のトークンが除外されてしまう。

英語の a や日本語の "は" や "が" などのストップワードが勝手に除外されるので便利な気がするが、漢字一文字のトークンが除外されるのはいかがなものか・・・。

token_pattern=u'(?u)\\b\\w+\\b' とかやると一文字のトークンを除外しなくなるみたい。

stackoverflow.com

 

lab.synergy-marketing.co.jp

ライブラリ使うと便利だけど、中身がわかってないと大変。

TFIDF の実装は難しくないので、一度自分でやってみるといい。

gensim で LDA 回してみた。

gensim を使えば簡単に topic model が使えるみたい。

適当なテキストが転がってたので LDA (Latent Dirichlet Allocation) を回してみた。

 

LDA

 

簡単すぎて吹いた。

でも、パラメータをどうしたらいいのか分からないのでトピック数以外はデフォルト。

https://groups.google.com/forum/#!topic/gensim/ojySenxQHi4 なんか見っけたけどよくわからなかった。

とりあえず、道具としては使えるようになりそう。

 

実は2ヶ月ぐらい前にやった内容だけど、どこかに書き留めておかないと忘れてしまいそうなので。

これからは何かやったら書くようにしたい・・・。

 

 

 

Debian Wheezy に MeCab と CaboCha を入れた。

ソースから入れた。めも。

MeCab

wget https://mecab.googlecode.com/files/mecab-0.996.tar.gz

tar xvf mecab-0.996.tar.gz

cd mecab-0.996/

./configure --prefix=$HOME/local --with-charset=utf8 --enable-utf8-only

make

make install

mecab -v 

IPADIC

tar xvf mecab-ipadic-2.7.0-20070801.tar.gz 

cd mecab-ipadic-2.7.0-20070801/

./configure --prefix=$HOME/local --with-charset=utf8

make

make install

echo '大阪は今日も熱い。' | mecab

 

Python and Ruby Bindings

sudo apt-get install python-dev するのを忘れずに。

 

ruby extconf.rb --with-opt-lib=/usr/local/mecab/lib

入れたら libmecab.so.2 がないとか言われたから、/etc/ld.so.conf あたりに一行追加

/home/*/local/lib

 

 

CaboCha

CRF++

 wget https://crfpp.googlecode.com/files/CRF%2B%2B-0.58.tar.gz

tar xvf CRF++-0.58.tar.gz

cd CRF++-0.58/

./configure --prefix=$HOME/local

make 

make install

 

CaboCha

wget https://cabocha.googlecode.com/files/cabocha-0.66.tar.bz2

tar xvf cabocha-0.66.tar.bz2 

cd cabocha-0.66/

 LDFLAGS="-L$HOME/local/lib" CPPFLAGS="-I$HOME/local/include" ./configure --prefix=$HOME/local --with-charset=utf8

make

make install

 

$CABOCHA/src/utils.cpp に #include <unistd.h> を追加した

 

Python and Ruby Bindings

ruby extconf.rb --with-opt-lib=/usr/local/mecab/lib

 

SPARQL であそぼう。

SPARQL を使って DBpedia から NBA player に関する情報を取得してみた。


SELECT ?person ?team ?position ?height
WHERE {
  ?person a dbpedia-owl:BasketballPlayer;
   dbpedia-owl:team ?team.
  ?person dbpedia-owl:height ?height.
  ?person dbpedia-owl:position ?position.
  ?team dbpprop:conference ?conference.


  FILTER(?conference = <http://dbpedia.org/resource/Western_Conference_(NBA)> ||
              ?conference = <http://dbpedia.org/resource/Eastern_Conference_(NBA)> )
   
  FILTER NOT EXISTS { ?person dbpedia-owl:activeYearsEndYear ?o }
}
ORDER BY DESC(?height)

Python とか Ruby とかの endpoint interface があるのでとりあえずなんか取ってくるだけなら簡単。 Ruby でやってみた。

https://github.com/otknoy/nba_player_sparql

問題はこれで何をするのか。

入門機械学習

まだ、2章までしか読んでないけどなかなかおもしろい。

まだ、Rをインストールしてないのであとでまた読む。

ちょっとづつ読んでいこう。

 

この本の原題は「Machine Learning for Hackers」なんだけど、「入門」って誤訳だろ。

と思っていたが数式が全然出てこない。だから入門か。

そのかわり、Rのコードがたくさん出てきます。:)

 

入門 機械学習

入門 機械学習

Ruby で XML をパース

REXML は遅いので Nokogiri を使おう。

class Twitter
  def self.read_xml *filenames
    tweets = []
    filenames.each do |filename|
      xml = Nokogiri::XML(open(filename))
      xml.search('feed/entry/title').each do |title|
        tweets.push title.text.gsub(/\n/, '')
      end
    end
    tweets.uniq!

    Twitter.new *tweets
  end

シンタックスハイライトさせたいときはどうしたらいいんだろ。