AWS EC2上にNExTをインストールする


AWS EC2上にNExTをインストールするメモ。


Named Entity Extraction Tool(以下NExT)は、固有表現抽出ツールである。詳しくは、参考URLからオリジナルのサイトを参照のこと。


NExT Ruby版は、RubyとChasenを使うので、一緒にインストールする必要がある。


# 0. instance立ち上げ

EC2上にinstanceを立ち上げる。
とりあえず、お試しならt1.microでも良いかも。

AWS t1.micro
OS: Aamzon Linux

ツール、データはS3上に上げておくと、外部からダウンロードするより少し早いし、お財布にも少し優しい。


# 1. yum update

```bash
$ sudo yum update
```

# 2. swap設定

EC2instanceがt1.microのときswap領域を設定する

```bash
$ sudo dd if=/dev/zero of=/swap.img bs=1M count=2048
$ sudo chmod 600 /swap.img
$ sudo mkswap /swap.img
$ sudo vi /etc/fstab
```

以下を追加

```
/swap.img    swap    swap    defaults    0    0
```

swapを有効にする

```bash
$ sudo swapon -a
```

# 3. 日本時間に設定

```bash
$ sudo vi /etc/sysconfig/clock
```
ZONE="Asia/Tokyo"
に書き換える。

```bash
$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ sudo reboot
```

# 4 .  epelリポジトリの有効化

Amazon Linux AMIでEPELの設定だけはすでに行われている。
EPELを使いたいパッケージのところでyum --enablerepo=epel install -y xxxxと実行する。
というのを確認したら、次のステップへ。

# 5. S3ツールのインストール (S3を利用しない場合は、不要)

```bash
$ sudo yum install gem
$ sudo yum install rubygem-aws-sdk
$ sudo yum -y --enablerepo epel install s3cmd
$ s3cmd --configure
```
 
Access KeyとSecret Keyを設定する
httpsを使うにyes

s3cmdで日本語を正しく扱うための設定

```bash
$ sudo vi /usr/lib/python2.6/site-packages/sitecustomize.py
```

```py:/usr/lib/python2.6/site-packages/sitecustomize.py
import sys
sys.setdefaultencoding('utf-8')
```

# 6. 開発環境インストール

```bash
$ sudo yum -y install gcc*
$ sudo yum -y install make
$ sudo yum -y install ruby-devel
```
# 7. Dartsインストール

```bash
$ wget http://chasen.org/~taku/software/darts/src/darts-0.32.tar.gz
$ gtar xvzf darts-0.32.tar.gz
$ cd darts-0.32
$ ./configure
$ make
$ make check
$ sudo make install
```

# 8. ChaSenインストール

```bash
$ wget http://iij.dl.sourceforge.jp/chasen-legacy/56305/chasen-2.4.5.tar.gz
$ tar xzf chasen-2.4.5.tar.gz
$ cd chasen-2.4.5
$ sudo ./configure
$ sudo make
$ sudo make install
$ sudo vi /etc/ld.so.conf.d/usr-local.conf
$ cat usr-local.conf
/usr/local/lib
$ sudo ldconfig
```

# 9. ipadic をインストール

```bash
$ wget http://jaist.dl.sourceforge.jp/ipadic/24435/ipadic-2.7.0.tar.gz
$ tar zxf ipadic-2.7.0.tar.gz
$ cd ipadic-2.7.0
$ ./configure
```

辞書ファイルをUTF-8に変換

```bash
$ vi convert.sh
```

```bash:convert.sh
#!/bin/sh
for file in *.dic *.cha
do
if [ -f $file ]; then
echo $file
iconv -f euc-jp -t utf-8 $file > tmpfile
mv tmpfile $file
fi
done
exit
```

```bash
$ sh ./convert.sh
$ `chasen-config --mkchadic`/makemat -i w
$ `chasen-config --mkchadic`/makeda -i w chadic *.dic
$ sudo make install
```

# 10. chasenrcもUTF-8に変換

```bash
$ cd /usr/local/etc
$ sudo cp -p chasenrc chasenrc.orig
$ iconv -f euc-jp -t utf-8 chasenrc > /tmp/chasenrc.tmp
$ sudo mv /tmp/chasenrc.tmp chasenrc
$ sudo chown root:root chasenrc
```

# 11. テスト

```bash
$ chasen -iw
今日の天気は雨です。
今日     キョウ     今日     名詞-副詞可能
の     ノ     の     助詞-連体化
天気     テンキ     天気     名詞-一般
は     ハ     は     助詞-係助詞
雨     アメ     雨     名詞-一般
です     デス     です     助動詞     特殊・デス     基本形
。     。     。     記号-句点
EOS
``` 

# 12. Ruby

- Install Git

```bash
$ sudo yum install -y git
```

- Install RBEnv and the ruby-build plugin for it

```bash
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
$ source ~/.bash_profile
```

- rbenv installと同時にインストールするgemパッケージ

```bash
$ git clone https://github.com/sstephenson/rbenv-default-gems.git ~/.rbenv/plugins/rbenv-default-gems
```

~/.rbenv/default-gems に以下のような内容を書く

```rb:~/.rbenv/default-gems
rubygems-update
aws-sdk
pit
ec2ssh
parallel
elastic-mapreduce
```

- libxml2 と libxslt のヘッダファイル (nokogiri用)

```bash
$ sudo yum install libxml2-devel
$ sudo yum install libxslt-devel
```

- Install Ruby

2.0.0をインストールする

```bash
$ sudo yum install -y gcc make zlib zlib-devel openssl openssl-devel
$ rbenv install 2.0.0-p0
$ rbenv rehash
$ rbenv global 2.0.0-p0

$ gem update
```

2.0.0でうまく動かないようなら、1.8.7をインストールする。

```bash
$ rbenv install 1.8.7-p374
$ rbenv rehash
$ rbenv global 1.8.7-p374
 
$ gem update
```

# 13. ruby-chasenインストール

```bash
$ wget https://sites.google.com/a/ixenon.net/ruby-chasen/home/chasen1.7.tar.gz?attredirects=0&d=1
$ mv chasen1.7.tar.gz\?attredirects\=0 chasen1.7.tar.gz
$ tar zxvf chasen1.7.tar.gz
$ mv chasen1.7 ruby-chasen-1.7
$ cd ruby-chasen-1.7
$ ruby extconf.rb
$ make
$ make instal
```

# 13. nkfのインストール

```bash
$ wget http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm
$ sudo rpm -ivh nkf-2.0.8b-6.2.el6.x86_64.rpm
```

# 14. NExTインストール
EUC-JPからUTF-8対応に変更してインストール

```bash
$ cd $HOME
$ wget http://www.ai.info.mie-u.ac.jp/~next/versions/nextr-0.1.tar.gz
$ tar zxvf nextr-0.1.tar.gz
$ cd nextr-0.1
```

EUCをUTF-8に変換

```bash
find . -type f | xargs -n 10 nkf -w —overwrite
```

chasenにUTF-8のオプションを追加

```bash
$ cd $HOME/nextr-0.1/data/nextr
$ cp -p pre-setup.rb pre-setup.rb.orig
$ vi pre-setup.rb
$ diff pre-setup.rb.orig pre-setup.rb
1c1
< unless system("chasen -c suffix_s.org > suffix.dic") and system("chasen -c mid_s.org > mid.dic") and system("chasen -c match_s.org > match.dic")
---
> unless system("chasen -iw -c suffix_s.org > suffix.dic") and system("chasen -iw -c mid_s.org > mid.dic") and system("chasen -iw -c match_s.org > match.dic”)
```

```bash
$ cd $HOME/nextr-0.1/lib/nextr
$ cp -p dic.rb dic.rb.orig
$ vi dic.rb
$ diff dic.rb.orig dic.rb
64c64
<       text.scan(/.*?EOS\n/me) do |t|
---
>       text.scan(/.*?EOS\n/mu) do |t|
```

```bash
$ cp -p tagger.rb tagger.rb.orig
$ vi tagger.rb
$ diff tagger.rb.orig tagger.rb
59c59
<       Chasen.getopt('-c')
---
>       Chasen.getopt(‘-iw’, '-c’)
```

```bash
$ cp -p conf.rb conf.rb.orig
$ vi conf.rb
$ diff conf.rb.orig conf.rb
23c23
<       text.scan(/^\s*([^#\n]+?)[\s\t]+\(([^#\n]+)\)\s*$/){ @groups[$1] = /\A(#{$2})\Z/e }
---
>       text.scan(/^\s*([^#\n]+?)[\s\t]+\(([^#\n]+)\)\s*$/){ @groups[$1] = /\A(#{$2})\Z/u }
```

```bash
$ cd $HOME/nextr-0.1
$ ruby setup.rb config --prefix=$HOME
$ ruby setup.rb setup
$ ruby setup.rb install
```

テスト

```bash
$ chasen -iw -cj $HOME/nextr-0.1/README | nextr PERSON
 ```

```bash
$ vi test.rb
```

```rb:test.rb
require 'nextr/tagger'
require 'chasen'

tagger1 = NExTR::Tagger.new('/home/ec2-user/etc/nextrc')
tagger2 = NExTR::Tagger.new('/home/ec2-user/etc/nextrc', 'PERSON')

Chasen.getopt('-iw', '-c')

puts tagger1.tag(Chasen.sparse('先日の青木教授の授業は楽しかった'))
                #=> <DATE>先日</DATE>の<PERSON>青木</PERSON>教授の授業は楽しかった。

puts tagger2.tag(Chasen.sparse('先日の青木教授の授業は楽しかった'))
                #=> 先日の<PERSON>青木</PERSON>教授の授業は楽しかった。
```

```bash 
$ ruby test.rb
```


# 参考URL：
- [Python - ChaSenのインストール- Qiita](http://qiita.com/yss44@github/items/cfc05860523d673d9000) 
- [NExT - NE Tagger](http://www.ai.info.mie-u.ac.jp/~next/next.html)