読者です 読者をやめる 読者になる 読者になる

意見(評価表現)抽出ツール を Docker で動かせるようにした

docker nlp

NICT が公開している意見(評価表現)抽出ツール を Docker で動かせるようにした。

github.com

Docker イメージのビルド

$ git@github.com:holidayworking/docker-extractopinion.git
$ cd docker-extractopinion
$ docker build -t holidayworking/extractopinion .

意見(評価表現)抽出ツールの実行

オプションなしで Docker コンテナを起動すると、意見(評価表現)抽出ツールに含まれているサンプルファイルを引数として extract.sh が実行されるようになっている。

$ docker run holidayworking/extractopinion
変換処理を開始します...
変換処理が終了しました...
/opt/extractopinion-1.2/sample.txt.euc  1       [著者]  メリット+       ビタミンが豊富だ。
/opt/extractopinion-1.2/sample.txt.euc  2
/opt/extractopinion-1.2/sample.txt.euc  3       [著者]  批評-   良くない。
/opt/extractopinion-1.2/sample.txt.euc  4       [著者]  当為    学校に行くべきだ。
/opt/extractopinion-1.2/sample.txt.euc  5       [著者]  メリット+       地域経済の活性化が図られるので、
/opt/extractopinion-1.2/sample.txt.euc  5       [著者]  メリット+       商機が拡大すると考えられる。

任意のファイルに対して extract.sh を実行したい場合は、下記のように Docker コンテナを実行する。

$ cat sample.txt
ほうれん草はビタミンが豊富だ。
京都は日本にある。
商品Aは良くない。
太郎は学校に行くべきだ。
道州制は国の一律の規制が解かれ地域経済の活性化が図られるので、商機が拡大すると考えられる。
意見(評価表現)抽出ツール を Docker で動かせるようにした。
$ docker run -it -v `pwd`:/data holidayworking/extractopinion /opt/extractopinion-1.2/extract.sh /data/sample.txt
変換処理を開始します...
変換処理が終了しました...
/data/sample.txt.euc    1       [著者]  メリット+       ビタミンが豊富だ。
/data/sample.txt.euc    2
/data/sample.txt.euc    3       [著者]  批評-   良くない。
/data/sample.txt.euc    4       [著者]  当為    学校に行くべきだ。
/data/sample.txt.euc    5       [著者]  メリット+       地域経済の活性化が図られるので、
/data/sample.txt.euc    5       [著者]  メリット+       商機が拡大すると考えられる。
/data/sample.txt.euc    6

xhyve で FreeBSD を動かしてみた

osx xhyve freebsd

xhyve で FreeBSD をサポートさせるプルリクを見つけたので、xhyve で FreeBSD を動かしてみた。

github.com

xhyve のビルド

プルリクのトピックブランチを取得して xhyve をビルドした。

$ git clone git@github.com:mist64/xhyve.git
$ cd xhyve
$ git checkout -b xez-freebsd master
$ git pull git@github.com:xez/xhyve.git freebsd
$ make

これで FreeBSD に対応した xhyve のバイナリーが生成される。

FreeBSD の起動

起動用スクリプトの作成

下記の内容で起動用スクリプト xhyverun-freebsd.sh を作成した。

#!/bin/sh

USERBOOT="test/userboot.so"
BOOTVOLUME="FreeBSD-10.1-RELEASE-amd64.raw"
KERNELENV=""

MEM="-m 1G"
#SMP="-c 2"
#NET="-s 2:0,virtio-net"
#IMG_CD="-s 3,ahci-cd,/somepath/somefile.iso"
#IMG_HDD="-s 4,virtio-blk,/somepath/somefile.img"
PCI_DEV="-s 0:0,hostbridge -s 31,lpc"
LPC_DEV="-l com1,stdio"
#UUID="-U deadbeef-dead-dead-dead-deaddeafbeef"

build/xhyve -A $MEM $SMP $PCI_DEV $LPC_DEV $NET $IMG_CD $IMG_HDD $UUID -f fbsd,$USERBOOT,$BOOTVOLUME,"$KERNELENV"

BOOTVOLUME で指定している FreeBSD-10.1-RELEASE-amd64.rawここからダウンロードしてきたものである。

起動

$ sudo ./xhyverun-freebsd.sh 

FreeBSD のブートメニューが表示される。 f:id:holidayworking:20150627183706p:plain ただし、ディスクをマウントすることができず、ブート中にエラーが発生してしまった。 f:id:holidayworking:20150627184726p:plain FreeBSD にディスクを認識されていないため、マウントに失敗するようである。

Docker Machine で RancherOS を起動してみる

docker rancheros

Docker Machine で RancherOS が起動できるようになっていたので、早速試してみることにした。

blog.docker.com

virtualbox-boot2docker-url オプションに RancherOS の ISO イメージの URL を指定して、マシンを作成するようにする。virtualbox-boot2docker-url オプションを指定しない場合は boot2docker でマシンが作成されるようになっている。

$ docker-machine create -driver virtualbox --virtualbox-boot2docker-url https://releases.rancher.com/os/v0.3.1/machine-rancheros.iso RancherOS
Downloading boot2docker.iso from https://releases.rancher.com/os/v0.3.1/machine-rancheros.iso...
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env RancherOS

作成したマシンへのログインして、本当に RancherOS が起動されているかを確かめてみた。

$ docker-machine ssh RancherOS
[docker@RancherOS ~]$ cat /etc/lsb-release 
DISTRIB_ID=RancherOS
DISTRIB_RELEASE=v0.3.1
DISTRIB_DESCRIPTION="RancherOS v0.3.1"
[docker@RancherOS ~]$ ps axuww | head -n 2
PID   USER     COMMAND
    1 root     {system-docker} docker -d --log-driver syslog -s overlay -b docker-sys --fixed-cidr 172.18.42.1/16 --restart=false -g /var/lib/system-docker -G root -H unix:///var/run/system-docker.sock

Riak Erlang MapReduce でハマってしまった

riak mapreduce erlang

Riak の MapReduce は Erlang と JavaScript で書くことができるが、JavaScript のサポートは将来的に廃止されることが決まっている。

JavaScript MapReduce is deprecated; we have expanded our Erlang MapReduce documentation to assist with the transition.

riak/riak-2.0.md at develop · basho/riak · GitHub

MapReduce を書くときは JavaScript で書いていたのだが、将来的にサポートされなくことを考えると Elarng でも書けるようになっておいたほうが良いので、簡単な処理から Erlang に移植しようと考えてみた。

試しに下記の MapReduce を実行してみることにした。

Riak::MapReduce.new(client).
  index(bucket, 'time_int', 1434812400..1434898799).
  map('fun(_, _, _) -> [1] end.', language: 'erlang').
  reduce(['riak_kv_mapreduce', 'reduce_sum'], keep: true).
  run

そうしたら、下記のようなエラーが発生した。

Riak::ProtobuffsErrorResponse: Expected success from Riak but received 0. {"phase":0,"error":"[worker_startup_failed]","input":"{{{<<\"yokozuna\">>,<<\"action_logs\">>},<<\"2015-06-20-274335d7-e277-458c-850f-a8bd813472c8\">>},undefined}","type":"result","stack":"[]"}

Stack Overflow で似たような質問をしている方がいて、このような書き方をする場合は advanced.config に下記を記述する必要があるとのこと。

[
    {riak_kv, [
        {allow_strfun, true}
    ]}
].

セキュリティリスクがあるという回答をしている方もいたが、今回は勉強も兼ねているので advanced.config を編集することで対処することにした。

そうしたら、期待通りの結果を得ることができた。

Riak::MapReduce.new(client).
  index(bucket, 'time_int', 1434812400..1434898799).
  map('fun(_, _, _) -> [1] end.', language: 'erlang').
  reduce(['riak_kv_mapreduce', 'reduce_sum'], keep: true).
  run
=> [15]

本来は Erlang モジュールを作成して、そのモジュールの関数を呼び出すようにするのがベストだと思われる。

Riak Ruby Client 2.2.1 のリリース

ruby riak

Riak Ruby Client 2.2.1 がリリースされた。

このリリースではバグ修正と試験的な実装が行われている。

Version 2.2.1 is a bugfix release, and includes additional testing of character encodings.

Bug fixes:

  • Support bucket-typed buckets when creating secondary-index input phases for map-reduce, thanks to Hidekazu Tanaka.
  • Support Riak Search 2 / Yokozuna results as input phases for map-reduce, thanks again to Hidekazu Tanaka.
  • BucketTyped::Bucket#get_index now includes the bucket type name in the 2i request.
  • Bucket#== now performs an encoding-independent comparison on bucket names.
  • BucketType#== also does an encoding-independent comparison on type names.

Testing enhancements:

riak-ruby-client/RELEASE_NOTES.md at master · basho/riak-ruby-client · GitHub

MapReduce のバグ修正は僕が対応したもので、下記を MapReduce の入力とする場合の書き方が改善されている。

  • バケットタイプが指定されたバケットに対するセカンダリインデックスの検索結果
  • Riak Search (Yokozuna) の検索結果

どのように改善されたのかを簡単に説明する。

続きを読む

Homebrew で xhyve がインストールできるようになった

osx homebrew xhyve

homebrew-head-only に xhyve が formula が追加されていた。

github.com

この formula を使って xhyve をインストールするには、下記のように実行すればよい。

$ brew tap homebrew/head-only
$ brew install --HEAD homebrew/head-only/xhyve