macにwgetを入れてみた

MacOSX10.8にはデフォルトでwgetが入っていません。必要ならばソースコードからコンパイルする必要があります。

まず手始めにはgccをインストールする必要があります。こちらを参考にコマンドライン版gccもいれます

wgetはソースコードからコンパイルするため、ブラウザでGNUのページからダウンロードします

$ cd /Users/UserName/Downloads
$ tar zxvfp wget-1.14.tar.gz
$ cd wget-1.14
$ ./configure --with-ssl=openssl
$ make
# su
# make install

こんな感じでインストールできます。

ちなみに–with-ssl=opensslをつけないとconfigureに失敗しました

KH CoderをMacにインストール

KH Coderという、自然言語の解析用の統合ソフトウエアをMacにインストールする際のメモ

環境

    • MacOS10.11
  • 関連モジュールのインストール

    まず、関連するモジュールをインストールします。KH Coderは内部でR,MySQL,mecab,Perlを使用しますのでMacにあらかじめこれらを入れておく必要があります。

    mysql

    brewで入れるのが簡単です
    brewって何って言う人はこのあたりを参考に入れてみてください
    このあたりを参考にインストールします。DBのユーザ名、パスワードは任意に決めておきます

    $ brew install mysql
    $ echo "[mysqld]" > /usr/local/etc/my.cnf
    $ echo "sql_mode = \"\"" >> /usr/local/etc/my.cnf
    $ mysql.server start
    

    KH CoderはMySQL5.7だと不具合が出るのでsql_modeをブランクにしておきます
    確認します

    $ mysql -uroot
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 243
    Server version: 5.7.12 Homebrew
    
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    
    

    R

    同じくBrewが簡単です

    $ brew install r
    

    mecab

    $ brew install mecab
    $ brew install mecab-ipadic
    

    Perl

    Macには初めからPerlがインストールされているので、今回は関連するモジュールを追加します。

    $ sudo su -
    # perl -MCPAN -e shell
    

    初めて起動する際には色々聞かれますがデフォルトで全てOKです。黙ってリターンキーを押しましょう
    CPANのシェルが起動すれば黙々と以下インストールします

    cpan> install Jcode
    cpan> install Tk
    cpan> install DBD::CSV
    cpan> install Net::Telnet
    cpan> install YAML
    cpan> install Spreadsheet::ParseExcel
    cpan> install Spreadsheet::ParseXLSX
    cpan> install Clipboard
    cpan> install Statistics::Lite
    cpan> install Algorithm::NaiveBayes
    cpan> install Text::Iconv
    

    こんな感じでインストールしていきます。
    たまにエラーが出る場合にはあわてず以下の通りにします

    例えば Spreadsheet-ParseExcelがエラーになった場合には

    # cd ~/.cpan/build
    # cd Spreadsheet-ParseExcel-0.65-OEiGuu
    # perl Makefile.PL
    # ./configure
    # make
    # make install
    

    こんな感じです。

    KH Coder

    こちらからソースコードをダウンロードして解凍しておきます
    KH Coderをダウンロードしたディレクトリに移動し一度起動します。こすればconfigいかにファイルが作成されます

    $ perl kh_coder.pl
    

    そのあと設定ファイルを設定します。インストールした際のMySQLのユーザ名とパスワード、Mecabを設定します。

    $ vi kh_coder/config/config.ini
    c_or_j          mecab
    sql_username    ユーザ
    sql_password    パスワード
    

    設定ファイルの文字コードを修正します。nkfが入っていない場合にはbrew でインストールしてください

    $ cd config
    $ nkf -s hinshi_mecab > /tmp/$$ && mv -f /tmp/$$ hinshi_mecab
    

    起動

    KH Coderをダウンロードしたディレクトリに移動します

    $ perl kh_coder.pl
    

    これで起動できるはずです。

    こんな感じでPerlのエラーが出た際には、Perlのモジュールを入れてください。以下の例だとDBD/CSV.pmが足りないので install DBD::CSVをインストールします

    $ perl kh_coder.pl 
    Can't locate DBD/CSV.pm in @INC (you may need to install the DBD::CSV module) (@INC contains: /Users/utsubo/Downloads/kh_coder/kh_lib /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2/darwin-thread-multi-2level /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/L
    
    cpan> install DBD::CSV
    

    おまけ

    mysql5.7でのエラーについて

    前処理を実行するとこういうエラーが出ます

    DBD::mysql::db do failed: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'khc0.hinshi.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by at /Users/utsubo/Downloads/kh_coder/kh_lib/mysql_exec.pm line 256.
    Exit (gui_errormsg.pm)
    

    こちらによると5.7からGroupBYの仕様が変わったらしいです。

    Day Of Yearカレンダープラグイン

    WordPressのプラグインでDayOfYearを表示するものを作成してみました

    プラグイン作成準備

    最初にディレクトリを作成します。今回は自分用に作成するので特に名前も気にしていないのですが、公開する場合には名前のかぶらないものにすることをお勧めします。

    $ mkdir utbt_doycalendar
    

    このディレクトリにplugin.phpファイルを作成しヘッダを作成します。
    この辺りはお決まりですので、このあたりのサイトに書かれている通りにします

    
    
    
    

    こんな感じで十分でしょうか?

    ショートコード対応

    今回はWordpressのプラグインとしてショートコードをページに記入レバ表示できるような仕様にします。
    また、ページには1年間分のカレンダーを表示し、年をテキストボックスでフォーム入力し、Submitすることにより切り替えます。
    この際に、FormからはGetパラメタで送信し、プラグイン内でGetパラメタを取得して年を切り替えます。

    カレンダー作成

    最初から作ってもいいのですが、こちらを参考にさせていただきました。

    ソースコード

    で、完成したコードがこちら

    
    
    calendar($year);
    }
    
    add_shortcode('utbt_calendar','utbt_calendar_func');
      class UtbtCalendar{
    
        function calendar($year=''){
    
    
            if (empty($year) && empty($month)) {
                $year = date('Y');
            }
            $html="
    Input Yea r:"; for($i=1;$i<=12;$i++){ $html.=$this->calendar_exec($year,$i); } $html.="
    "; return $html; } //http://shanabrian.com/web/php_calendar.php private function calendar_exec($year = '', $month = '') { $tab=""; $str=""; if (empty($year) && empty($month)) { $year = date('Y'); $month = date('n'); } //月末の取得 $l_day = date('j', mktime(0, 0, 0, $month + 1, 0, $year)); //初期出力 $html = << {$year}/{$month} Sun Mon Tue Wed Thr Fri Sat \n EOM; $lc = 0; // 月末分繰り返す for ($i = 1; $i < $l_day + 1;$i++) { $classes = array(); $class = ''; // 曜日の取得 $week = date('w', mktime(0, 0, 0, $month, $i, $year)); // 曜日が日曜日の場合 if ($week == 0) { $str .= $tab."\t\t\n"; $lc++; } // 1日の場合 if ($i == 1) { if($week != 0) { $str .= $tab."\t\t\n"; $lc++; } $str .= $this->repeatEmptyTd($week); } if ($week == 6) { array_push($classes, '#0000FF'); } else if ($week == 0) { array_push($classes , '#FF0000'); } if (count($classes) > 0) { $class = '"'.implode(' ', $classes).'"'; } $doy = date('z', mktime(0, 0, 0, $month, $i, $year))+1; $str .= $tab."\t\t\t".''.$i.'('.$doy.')'."\n"; // 月末の場合 if ($i == $l_day) { $str .= $this->repeatEmptyTd(6 - $week); } // 土曜日の場合 if ($week == 6) { $str .= $tab."\t\t\n"; } } $html .=$str; $html .= "\n"; return $html; } private function repeatEmptyTd($n = 0) { return str_repeat("\t\t \n", $n); } } ?>

    リリース

    できたコードをディレクトリごとZIPファイルにし、Wordpressのプラグインに追加します。
    また、ページにはこんな感じで書けば無事カレンダーが表示されます

    [utbt_calendar]
    

    デモ

    作成したデモサイトはこちらになります

    pdftotextでPDFを文字列化

    最近の人工知能ブームでテキストマイニングから法則を発見するといったこともしばしば行うようになってきました。
    PDFから文字列を抽出する方法をメモっておきます

    環境

    • mac os 10.11

    インストール

    まずはpdftotextをインストールします

    $ brew install homebrew/x11/xpdf-japanese
    

    このまま実行するとエラーになります

    $ pdftotext test.pdf
    Syntax Error: No font in show
    Syntax Error: Unknown character collection 'Adobe-Japan1'
    

    こちらを参考に修正します

    $ wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-japanese.tar.gz
    $ tar zxvpf xpdf-japanese.tar.gz
    $ mkdir -p /usr/local/share/xpdf/japanese 
    $ mv xpdf-japanese/* /usr/local/share/xpdf/japanese/
    $ echo "textEncoding UTF-8" >> /usr/local/etc/xpdfrc
    $ echo "cidToUnicode    Adobe-Japan1    /usr/local/share/xpdf/japanese/Adobe-Japan1.cidToUnicode" >> /usr/local/etc/xpdfrc
    $ echo "unicodeMap  ISO-2022-JP /usr/local/share/xpdf/japanese/ISO-2022-JP.unicodeMap" >> /usr/local/etc/xpdfrc
    $ echo "unicodeMap  EUC-JP      /usr/local/share/xpdf/japanese/EUC-JP.unicodeMap" >> /usr/local/etc/xpdfrc
    $ echo "unicodeMap  Shift-JIS   /usr/local/share/xpdf/japanese/Shift-JIS.unicodeMap" >> /usr/local/etc/xpdfrc
    $ echo "cMapDir     Adobe-Japan1    /usr/local/share/xpdf/japanese/CMap" >> /usr/local/etc/xpdfrc
    $ echo "toUnicodeDir            /usr/local/share/xpdf/japanese/CMap" >> /usr/local/etc/xpdfrc
    

    実行

    2ページ目から出力してみます。

    $ pdftotext -f 2 -raw -layout -enc UTF-8 test.pdf 
    

    test.txtというファイル名で作成されます