RubyからMeCabを使う

MeCabをプログラムの中から使えるようにします。
しばらく離れていたrubyでやってみようと思います。

rubyのバージョン管理にrbenv使ってますのでまずはプロジェクト用にruby関係の設定をします

#まずプロジェクト用のフォルダ作って使用するrubyバージョンを分離します
$mkdir crossword_dic
$ cd crossword_dic/
$ rbenv version        
1.9.3-p194 (set by /home/kuroyanagi/.rbenv/version)
$ rbenv local 1.9.3-p194
$ rbenv version         
1.9.3-p194 (set by /home/kuroyanagi/workspace/crossword_dic/.rbenv-version)
#gemsetを作成します。
$ rbenv gemset create 1.9.3-p194 mecab-ruby
created mecab-ruby for 1.9.3-p194
#プロジェクトフォルダでこのgemsetを使うように設定します。
$ echo mecab-ruby > .rbenv-gemsets
#プロジェクトフォルダで設定が有効か確認してみます
$ rbenv gemset active
mecab-ruby global
$ rbenv gemset list  
1.9.3-p194:
  mecab-ruby

rubyからmecabを使用するためにはmecab-rubyを使用しますがgemにはないので
MeCab-Japanese morphological analyzerからダウンロードして使用します。
http://code.google.com/p/mecab/downloads/list
バージョンがいっぱいありますが、インストールしたmecabのバージョンに近いものを入れます。

$ mecab -v
mecab of 0.98
#今の環境はmecab 0.98なのでmecab-ruby-0.98.tar.gzをダウンロードします。

#ダウンロードしたファイルを展開してgemspecを作成します。
$ tar -zxvf mecab-ruby-0.98.tar.gz 
mecab-ruby-0.98/
mecab-ruby-0.98/bindings.html
mecab-ruby-0.98/README
mecab-ruby-0.98/extconf.rb
mecab-ruby-0.98/LGPL
mecab-ruby-0.98/mecab-ruby.gemspec
mecab-ruby-0.98/COPYING
mecab-ruby-0.98/BSD
mecab-ruby-0.98/GPL
mecab-ruby-0.98/AUTHORS
mecab-ruby-0.98/test.rb
mecab-ruby-0.98/MeCab_wrap.cpp
$ cd mecab-ruby-0.98/
$ gem build mecab-ruby.gemspec 
  Successfully built RubyGem
  Name: mecab-ruby
  Version: 0.97
  File: mecab-ruby-0.97.gem
#ここでできたgemを使ってインストールします。
$ gem install mecab-ruby-0.97.gem
Building native extensions.  This could take a while...
Successfully installed mecab-ruby-0.97
1 gem installed

動作確認のためにこの様なソース書いて

# coding: utf-8
require 'MeCab'
mecab = MeCab::Tagger.new()
puts mecab.parse("MeCabっていうのは日本語の文書を分析して単語の塊に分けてくれる(形態素解析)ソフトです。")

実行すると

$ ruby test.rb
MeCab	名詞,固有名詞,組織,*,*,*,*
っていう	助詞,格助詞,連語,*,*,*,っていう,ッテイウ,ッテユウ,,
の	名詞,非自立,一般,*,*,*,の,ノ,ノ,,
は	助詞,係助詞,*,*,*,*,は,ハ,ワ,,
日本語	名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ,,
の	助詞,連体化,*,*,*,*,の,ノ,ノ,,
文書	名詞,一般,*,*,*,*,文書,ブンショ,ブンショ,,
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
分析	名詞,サ変接続,*,*,*,*,分析,ブンセキ,ブンセキ,,
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ,,
て	助詞,接続助詞,*,*,*,*,て,テ,テ,,
単語	名詞,一般,*,*,*,*,単語,タンゴ,タンゴ,,
の	助詞,連体化,*,*,*,*,の,ノ,ノ,,
塊	名詞,一般,*,*,*,*,塊,カタマリ,カタマリ,,
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ,,
分け	動詞,自立,*,*,一段,連用形,分ける,ワケ,ワケ,わけ/分け,
て	助詞,接続助詞,*,*,*,*,て,テ,テ,,
くれる	動詞,非自立,*,*,一段・クレル,基本形,くれる,クレル,クレル,,
(	記号,括弧開,*,*,*,*,(,(,(,,
形態素	名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ,,
解析	名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ,,
)	記号,括弧閉,*,*,*,*,),),),,
ソフト	名詞,一般,*,*,*,*,ソフト,ソフト,ソフト,,
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス,,
。	記号,句点,*,*,*,*,。,。,。,,
EOS

よさそうです。

UbuntuでMecabを使ってみる

ブログを久々に書き始めていたら、やりたいことが浮かんだのでしばらくメモがわりにブログ書いてみます。

今回やりたいと思うことは、自然言語の処理なので何はともあれMecabを入れてみます。

Mecabっていうのは日本語の文書を分析して単語の塊に分けてくれる(形態素解析)ソフトです。
またただ単語に分けるだけでなく分けられた単語の種類(名詞、動詞、形容詞...)を判別してくれたりします。

mecabのインストール

って言っても手抜きしてapt頼みです。
NAIST辞書があったのでこっち使ってみます。
mecab本体と開発用ライブラリ、辞書(NAIST辞書)

$ sudo apt-get install mecab libmecab-dev mecab-naist-jdic

mecabを試してみる

$ echo Mecabっていうのは日本語の文書を分析して単語の塊に分けてくれる(形態素解析)ソフトです。 | mecab
Mecab	名詞,固有名詞,組織,*,*,*,*
っていう	助詞,格助詞,連語,*,*,*,っていう,ッテイウ,ッテユウ,,
の	名詞,非自立,一般,*,*,*,の,ノ,ノ,,
は	助詞,係助詞,*,*,*,*,は,ハ,ワ,,
日本語	名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ,,
の	助詞,連体化,*,*,*,*,の,ノ,ノ,,
文書	名詞,一般,*,*,*,*,文書,ブンショ,ブンショ,,
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
分析	名詞,サ変接続,*,*,*,*,分析,ブンセキ,ブンセキ,,
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ,,
て	助詞,接続助詞,*,*,*,*,て,テ,テ,,
単語	名詞,一般,*,*,*,*,単語,タンゴ,タンゴ,,
の	助詞,連体化,*,*,*,*,の,ノ,ノ,,
塊	名詞,一般,*,*,*,*,塊,カタマリ,カタマリ,,
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ,,
分け	動詞,自立,*,*,一段,連用形,分ける,ワケ,ワケ,わけ/分け,
て	助詞,接続助詞,*,*,*,*,て,テ,テ,,
くれる	動詞,非自立,*,*,一段・クレル,基本形,くれる,クレル,クレル,,
(	記号,括弧開,*,*,*,*,(,(,(,,
形態素	名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ,,
解析	名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ,,
)	記号,括弧閉,*,*,*,*,),),),,
ソフト	名詞,一般,*,*,*,*,ソフト,ソフト,ソフト,,
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス,,
。	記号,句点,*,*,*,*,。,。,。,,
EOS

うん、ちゃんと動いてる。とりあえずaptで入る辞書しか入れてませんが、ユーザが用意した辞書を入れることもできます。
それはまた別のお題で

Titanium CLIを使ってみる

Titanium Mobileの復習をしてみたいと思います。

まずは、開発環境を構築しますが、今回はコマンドラインでの構築ツールである Titanium CLIを使います。

インストールにはnodeのパッケージ管理ツールであるnpmを使用しますのであらかじめインストールしておきます。

$ npm install titanium
$ titanium
Titanium Command-Line Interface, CLI version 3.0.18, Titanium SDK version 3.0.0.v20121017192538
Copyright (c) 2012, Appcelerator, Inc.  All Rights Reserved.

Please report bugs to http://jira.appcelerator.org/

Usage: titanium <command> [options]

Commands:
   build     builds a project
   clean     removes previous build directories
   config    get and set config options
   create    creates a new mobile application or module
   help      displays this help screen
   info      display development environment information
   login     logs into the Appcelerator network
   logout    logs out of the Appcelerator network
   module    manages installed Titanium Modules
   plugin    manages installed Titanium Plugins
   project   get and set tiapp.xml settings
   sdk       manages installed Titanium SDKs
   setup     run the setup wizard
   status    displays session information
 
Global Flags:
   --banner, --no-banner   displays Titanium version banner  [default: true]
   --colors, --no-colors   use colors in the terminal  [default: true]
   -h, --help              displays help 
   --prompt, --no-prompt   prompt for missing options  [default: true]
   -q, --quiet             suppress all output 
   -v, --version           displays the current version 

インストールが終わったらまずは設定をします。

$ titanium setup
Titanium Command-Line Interface, CLI version 3.0.18, Titanium SDK version 3.1.0.v20121121154400
Copyright (c) 2012, Appcelerator, Inc.  All Rights Reserved.

Please report bugs to http://jira.appcelerator.org/

Enter ctrl-c at any time to quit

What is your name? (this is used as the default for the "author" field in the tiapp.xml or module manifest file when creating new projects) (xxxxxxxx) 
What is your email address used for logging into the Appcelerator Network?  (xxxxxxxx@gmail.com)
What would you like as your default locale? (examples: "en", "de", "fr") (ja) 
What Titanium SDK would you like to use by default? (3.1.0.v20121121154400) 
Path to your workspace where your projects should be created: (/home/xxxxxxxx/Titanium_Studio_Workspace) 
Path to the Android SDK: (this is needed for building Android apps) (/home/xxxxxxxx/android-sdk-linux) 

Configuration saved

setupで聞かれる内容は
1. What is your name?
 tiapp.xmlのauthorフィールド、またはmoduleマニフェストに記載される名前
2. What is your email address used for logging into the Appcelerator Network?
 Appcelerator Networkに登録されているメールアドレス
3. What would you like as your default locale?
 言語ロケール
4. What Titanium SDK would you like to use by default?
 デフォルトで使用するTitaniumのSDKのバージョン
5. Path to your workspace where your projects should be created:
 プロジェクトを入れるワークスペースのパス
6. Path to the Android SDK:
 AndroidSDKのパス
です。

プロジェクトを作成するには、 titanium create とタイプします。

$ titanium create
Titanium Command-Line Interface, CLI version 3.0.18, Titanium SDK version 3.1.0.v20121121154400
Copyright (c) 2012, Appcelerator, Inc.  All Rights Reserved.

Please report bugs to http://jira.appcelerator.org/

Target platforms: (android,ios,ipad,mobileweb) android
App ID: com.example.sample
Project name: sample

[INFO] Creating Titanium Mobile application project
[INFO] Project 'sample' created successfully in 34ms

途中聞かれる内容は
1. Target platforms: (android,ios,ipad,mobileweb) android
 ターゲットになるプラットフォーム
2. App ID: com.example.sample
 ドメインの逆順 + プロジェクト名とか
3. Project name: sample
 この名前でプロジェクトフォルダが作成されます。
です。

$ titanium build -p android
Titanium Command-Line Interface, CLI version 3.0.18, Titanium SDK version 3.1.0.v20121121154400
Copyright (c) 2012, Appcelerator, Inc.  All Rights Reserved.

Please report bugs to http://jira.appcelerator.org/

[INFO] logfile = /home/kuroyanagi/Titanium_Studio_Workspace/sample/build.log
[DEBUG] /home/kuroyanagi/.titanium/mobilesdk/linux/3.1.0.v20121121154400/android/builder.py simulator sample /home/kuroyanagi/android-sdk-linux /home/kuroyanagi/Titanium_Studio_Workspace/sample com.example.sample 7 HVGA
[TRACE] app property, ti.ui.defaultunit : system
[INFO] Building sample for Android ... one moment
[INFO] Titanium SDK version: 3.1.0 (11/21/12 15:44 32f6284)
[DEBUG] Waiting for device to be ready ...
[TRACE] adb devices returned 0 devices/emulators

エミュレータが立ち上がって

この様な画面が表示されます。

Rhodes使ってAndroidアプリをRubyで書いてみる(導入まで)

久々に、ブログ更新します。
昨年から、Ruby On Railsをお仕事で触っておりまして、地元の勉強会にも参加させてもらうようになりました。
スマホの開発と言えば、JavaObjective-Cのネイティブアプリ開発、JQuery MobileのようなWebアプリ、また最近はJavascriptを使った Titanium Mobileなどいろいろな開発手法があります。しかし、今回は最近触っているRubyでスマホのアプリ(Webアプリじゃないよ)を作成する方法を勉強会のネタに選んでみたので、どんな感じでできるのか備忘で残したいと思います。

今回紹介するのは Rhodes というフレームワークMotorola社のプロダクトです。
Rhodes - Motorola Solutions USA

まずは、インストールまでを資料にしてみました。

Introduction of Rhodes
View more presentations from Hitoshi Kuroyanagi

接続情報の暗号化

DB接続に関する情報を暗号化したいということで調べてみました。
app.configの暗号化というキーワードで検索の結果gsf_zero1さんのブログより
id:gsf_zero1:20070812:p3接続文字列の暗号化の記事を発見、それにならい
app.config内ConnectionStringsに記述して、それをQuillから参照させようとしておりましたが、
残念ながらできず...
半ばあきらめてやけになってquillセクションを指定してみたら
何のことはなく暗号化できることが分かりました。

手順はgsf_zero1の記事に詳しくありますのでそちらをご覧ください。

<configuration>
  <configSections>
    <section name="quill" type="Seasar.Quill.Xml.QuillSectionHandler, Seasar.Quill" />
  </configSections>
    ・・・
<configuration>

<quill>
    <dataSources>
      <dataSource name="ds">
        <provider>Firebird</provider>
        <connectionString>
          "ServerType=1;User=ユーザー;Password=パスワード;
            Database=C:\Firebird\データベース.FDB"
        </connectionString>
        <class>Seasar.Extension.Tx.Impl.TxDataSource</class>
      </dataSource>
    </dataSources>
    <assemblys>
      <assembly>
       FirebirdSql.Data.FirebirdClient, Version=2.1.0.0, 
         Culture=neutral, PublicKeyToken=3750abcc3150b00c
      </assembly>
    </assemblys>
  </quill>

1.こんなapp.configをweb.configにりネーム
2.aspnet_regiisを実行

aspnet_regiis -pef "quill" .

を実行します。
ただこれを実行すると

Quillのための構成セクションハンドラを作成中にエラーが発生しました。
ファイルまたはアセンブリ'Seasar.Quill'、またはその依存関係の1つが読み込めませんでした。

とエラーになってしまいます。なんか良く分からなかったので仕方なく

<!--
    <section name="quill" type="Seasar.Quill.Xml.QuillSectionHandler, Seasar.Quill" />
-->

と一旦コメントにして実行したら無事成功しました。
3.再びweb.configをapp.configにリネーム
さっきコメントにした部分を元に戻して終了です。
アプリケーション側では特に復号化とかの処理を書かなくてもちゃんとDB接続できました。

タスクの手動登録

.NETだけやっておりましたが、Javaも触る機会ができましたので、その中での情報なども書いていくことにします。
今回の案件でJavaでタスクジョブのスケジューリングを管理する必要が出てきてしまい購入した「Seasar2徹底入門」に紹介されているS2Chronosが今回の案件に使えそうなので機能の確認を行いました。
サーバー起動時にタスクが登録され実行されることは確認できたのですが、使用者が手動でタスクの登録、停止などを行いたいと思い、kzk-yさんの記事 id:kzk-y:20090312を参考に試したのですが、(2008-09-08 s2chronos-core-1.0.0)では、コンパイルエラーになってしまいました。どうもタスク登録を行う時のAddTaskの仕様が変わったようです。

Actionの方はこんな感じに記述したら動作しました。

  public class SampleAction {

    public Scheduler scheduler;

    public String doClick() {
        // タスク登録
        scheduler.addTask(TestTask.class);
    }
  }

public 変数のschedulerはインジェクションされるので
元の記事の通り privateにして、setterメソッドを書いても同じです。

S2Chronosのセットアップにはgungnir_odinさんの以下の記事を参考にしました。
id:gungnir_odin:20100421:1271856739
ただし、

  • 必要なファイルをダウンロード
  • ビルドパスに追加

については
Maven2環境にて構築しましたのでpom.xml

    <dependency>
      <groupId>org.seasar.chronos</groupId>
      <artifactId>s2chronos-core</artifactId>
      <version>1.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.seasar.chronos</groupId>
      <artifactId>s2chronos-extension</artifactId>
      <version>1.0.0</version>
    </dependency>

を追加した後 mvn eclipse:eclipseをコマンドラインで実行し、必要なjarをダウンロードしました。

Seasar 2 徹底入門 SAStruts/S2JDBC 対応

Seasar 2 徹底入門 SAStruts/S2JDBC 対応

残念

VS2008ではProfessionalエディションでVSTO開発ができるようになったので
張り切って今までEXCEL VBAで作成していたアプリを置き換えてみた。
いざユーザーのところに導入してみたのに、
あれ、出てくるはずの作業ウィンドが出てこない?????

よくよく調べたらこんな落とし穴が!!
VSTO で開発したアプリケーションを Standard/Personal 版 Office で実行させることはできません」
http://www.microsoft.com/japan/msdn/vstudio/office/productinfo/faq/

こちらの事前調査不足はもちろん反省しますが
どんなに大きな企業とはいえExcel、Wordを導入するにあたって、少しでも経費は削りたいもの
通常使う上ではPersonalで十分なはず。
これからも、ちょっとこれじゃ開発に採用しようって気にはならないな〜