アーカイブ - 12月, 2011



2011年 12月 22

以前にハマっていた形態素解析をローカル環境で試してみたいのでmacでmecabを使う方法を調べてみる。

Mecabって?

MeCabはオープンソースの形態素解析エンジンで、奈良先端科学技術大学院大学出身、現GoogleソフトウェアエンジニアでGoogle 日本語入力開発者の一人である工藤拓[1][2]によって開発されている。
MeCab – Wikipedia

macにはmecabが標準で入っている(*1)のだけれど、文字コードがUTF-16LEみたいで使うのに工夫が必要みたい。

  • 参考:きまぐれ日記: Mac OS X Leopard に「標準で」インストールされている MeCabを使ってみる
  • *1 Spotlight – Wikipedia
  • Mac OS X v10.5から、ネットワーク上の共有フォルダの検索にも対応(下記参照)、最近閲覧したWebページの検索もできるようになっている。初期の Spotlightでは日本語形態素解析が不十分だったため、Googleで使われていたMeCabを採用した(/usr/lib/、/usr/include/mecab.h 等参照)。

    文字コード変換とかいちいち面倒だし、UTF-8で使いたい。なので別途インストールして使う。オフィシャルからダウンロードしてビルドする方法もあるのだけれど、どうやらMacPortsでインストールするのが最善の様子。

  • 参考:Rails: Mac OS では mecab を MacPorts で入れること – tkrdの日記 (rails や ubuntu のことなど)
  • 管理も楽だし、依存関係もよきにはからってくるのでMacPortsでインストールしてみる。

    mecab本体と辞書のインストール

    MackPortsはインストールしてある前提です。

    $ sudo port install mecab
    $ sudo port install mecab-ipadic-utf8

    このまま使うと文字化けしてしまうのでmecabで使う辞書をutf8のへと変更します。(デフォルトの辞書はeucになっている様子)

    $ sudo vi /opt/local/etc/mecabrc
    
    ;dicdir =  /opt/local/lib/mecab/dic/sysdic    ←コメントアウト
    dicdir =  /opt/local/lib/mecab/dic/ipadic-utf8

    mecabを使う

    ここまででターミナルからmecabを使うことができます。
    mecabを終了するにはcontrol+cです。

    $ mecab
    
    mecabを使う簡単な方法
    mecab	名詞,一般,*,*,*,*,*
    を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
    使う	動詞,自立,*,*,五段・ワ行促音便,基本形,使う,ツカウ,ツカウ
    簡単	名詞,形容動詞語幹,*,*,*,*,簡単,カンタン,カンタン
    な	助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
    方法	名詞,一般,*,*,*,*,方法,ホウホウ,ホーホー
    EOS
    

    各言語のバインディング

    各言語から使うにはバイディングをインストールする必要があります。
    MacPortsにはPerl用、Ruby用、Python用があるみたいですね。

    $ port search mecab
    
    p5-mecab @0.980.0 (perl, textproc, japanese)
        a Perl module for MeCab
    
    p5.8-mecab @0.980.0 (perl, textproc, japanese)
        a Perl module for MeCab
    
    p5.10-mecab @0.980.0 (perl, textproc, japanese)
        a Perl module for MeCab
    
    p5.12-mecab @0.980.0 (perl, textproc, japanese)
        a Perl module for MeCab
    
    p5.14-mecab @0.980.0 (perl, textproc, japanese)
        a Perl module for MeCab
    
    py-mecab @0.98 (python, textproc, japanese)
        a Python module for MeCab
    
    py24-mecab @0.98 (python, textproc, japanese)
        a Python module for MeCab
    
    py25-mecab @0.98 (python, textproc, japanese)
        a Python module for MeCab
    
    py26-mecab @0.98 (python, textproc, japanese)
        a Python module for MeCab
    
    py27-mecab @0.98 (python, textproc, japanese)
        a Python module for MeCab
    
    rb-mecab @0.98 (ruby, textproc, japanese)
        a Ruby module for MeCab
    
    rb19-mecab @0.98 (ruby, textproc, japanese)
        a Ruby module for MeCab
    
    Found 28 ports.

    オフィスシャルサイト
    MeCab: Yet Another Part-of-Speech and Morphological Analyzer
    http://mecab.sourceforge.net/


    Filed under:  web,Mac,プログラミング

    Trackback Uri






    2011年 12月 18

    バージョン管理もそろそろしてみようということでgitを選択。分散型でいいらしい。git自体まだ分かっていないけど、github使ってみようという試み。

    環境:mac OSX 10.6

    公開鍵方式でSSHログイン出来るようにする

    どうやらgithubにpushするにはSSH公開鍵を登録する必要がある様子。なので、秘密鍵と公開鍵のペアの作成から。

    秘密鍵と公開鍵のペアを作成

    ターミナルで秘密鍵と公開鍵のペアを作成する。RSA方式でよいと思われる。
    作業する場所はユーザーのホームディレクトリ。

    ターミナルで ssh-keygen -t rsa で作成できる。
    パスフレーズは空でenterする。

    .. continue reading ..


    Filed under: プログラミング,開発環境

    Trackback Uri






    2011年 12月 15

    MAMP

    Apache+MySQLサーバをmacで動作させる事ができる。macにはもともとApacheもperlもインストールされているけど、バージョンが古いし、管理も面倒なのでMANPを使うメリットはおおいにあると思う。もともとはPHP+MySQLのローカル環境を構築するためのもの…かな?

    参考:Mac OS Xのローカル環境(MAMP+MacPorts)で Movable Typeを動かしてみよう – 準備編  [ 09.06.24 update ] 【 gabs.log|おしゃべり好きなWEB制作者のたわごと 】

    MAMPをインストール

    MAMP

    MAMPからダウンロードしてインストールする。

    MacPortsのインストール

    makeとか使うのでXCodeが必要。OSのバージョンにあったものをダウンロードする。

  • The MacPorts Project — Download & Installation
  • MacPortsの初期化&設定

    Terminalでコマンドを実行

    echo 'export PATH=$PATH:/opt/local/bin:/opt/local/sbin/' >> ~/.bashrc
    echo 'export MANPATH=$MANPATH:/opt/local/man' >> ~/.bashrc
    echo 'source ~/.bashrc' >> ~/.bash_profile
    sudo port -d selfupdate
    sudo port -d sync

    perlのPATHを変更

    元のperlをperl.bakにリネームして、シンボリックリンクを貼る。これをしておかないと元々インストールしてあるperl(/usr/bin/perl)を参照してしまうため。

    cd /usr/bin/
    sudo mv perl perl.bak
    sudo ln -s /opt/local/bin/perl /usr/bin/perl

    cpanmをインストール

    perlモジュールを簡単にインストールできるcpanmをインストールする。

  • ArtifactSauce: cpanmをMac OS Xにインストールする
  • sudoでインストールすると /opt/local/lib 以下にインストールされる。

    sudo cpanm Mojolicious
    or
    cpanm -S Mojolicious

    ユーザー権限でインストールした場合は、ホームディレクトリ ~/perl5/lib/ 以下にインストールされるので、この場合はPATHの指定が必要。コード側に書くか、あらかじめ設定しておく必要がある。
    Apacheのconfigに設定するのが吉かな?

    httpd.confに記述

    SetEnv PERL5LIB /Users/clicktx/perl5/lib/perl5
  • KMsWiki: Perl/@INC – Perlのライブラリの検索PATHを格納した配列のこと。 例えば、コマンド…
  • CGIでの環境変数PERL5LIBの設定 | OKWave
  • MAMPでCGI(perl)を実行できるようにする

    /Applications/MAMP/conf/apache/httpd.conf を編集する。自分の場合は /Applications/MAMP/htdocs以下全部で実行したいので以下の場所を変更。

    453行目付近

        #AddHandler cgi-script .cgi
        AddHandler cgi-script .cgi .pl .pm ←追記

    httpd.confを編集したらMANPを再起動して設定を反映させる。

    CGI実行テスト

    /アプリケーション/MAMP/htdocs/ に test.cgiを作成する。

    #!/usr/bin/env perl
    print "Content-type:text/html\n\n";
    print "Hello, World!\n";
    exit;

    test.cgi に実行権を与える。

    $ cd /Applications/MANP/htdocs
    $ chmod 700 test.cgi

    webブラウザで http://localhost/test.cgi にアクセスして表示されたら成功。

    ちなみにMAMPの読み方はまんpーでいいんじゃないでしょうか?


    Filed under: Mac,MySQL,プログラミング

    Trackback Uri






    2011年 12月 12

    PerlでPayPalのExpressCheckoutを実装するのにBusiness::PayPal::APIを使っているのだけれど、日本語(2byte文字)がうまく送信できない。

    UTF-8で送ろうが、フラグ付きにしようが、だ。

    散々悩んだ挙句、原因はSOAP::Liteが勝手にbase64エンコードするからだと判明。

    Business::PayPal::APIは内部でSOAP::Liteを使用していて、Asciiだとそのままなのだけれど、それ以外はbase64にエンコードする仕様の様子。

    前々から、例えば、OrderDescription に日本語を使うと上手くいかないと思っていたのだけれど、、、。
    仕方がないから Business::PayPal::API::ExpressCheckoutをカスタマイズする。

    /usr/lib/perl5/site_perl/5.8.8/Business/PayPal/API/ExpressCheckout.pm

        ## add all the other fields
        for my $field ( keys %types ) {
      next unless defined $args{$field};
    
            if( $field eq 'MaxAmount' ) {
                push @secrd, SOAP::Data->name( $field => $args{$field} )->type( $types{$field} )
                  ->attr( {currencyID => $currencyID, xmlns => $self->C_xmlns_ebay} );
            }
            ## 追記ココから
            elsif($field eq 'Address'){
                my @addr;
                my $hash = $args{$field};
                for my $f ( keys %$hash) {
                   push @addr,  SOAP::Data->name( $f )->type(string => $args{$field}{$f} );
                }
                my $obj = SOAP::Data->name( $field => \SOAP::Data->value( @addr ));
                push @secrd,$obj;
            }
            ## 追記ココまで
            else {
                push @secrd, SOAP::Data->name( $field => $args{$field} )->type( $types{$field} );
            }
        }
    

    SOAPなんて使ってたらダメだね…


    Filed under: PayPal,perl

    Trackback Uri