Loading [MathJax]/extensions/tex2jax.js

2013-07-25

RMeCab on RServe で頻度情報の抽出方法(複数ファイルを対象)

RMeCab on RServe で複数のファイルを対象にした場合の頻度情報の抽出方法についてです。結果として出力される単語は属性、頻度はデータとして出力されますが、やっかいなのはそれらは全て1次元となっている点です。つまり、抽出された単語数がx、文書数がyであれば、x*yの大きさの1次元配列が出てきます。これらは多次元配列として扱うのが得策でしょう(データクラスを定義するのが一番クールだと思います)

x = c.eval("res");//複数ファイルの頻度情報の結果(式は略)
REXPList temp1 = x._attr();
RList list1 = temp1.asList();
REXP temp = list1.at(1);
RList temp2 = temp.asList();
//区切られた単語が1次元配列に入っている
String[] words =temp2.at(0).asStrings();
//頻度情報が1次元配列で入っている
double[] freq = x.asDoubles();


2013-07-24

C#:プロパティを理解する(2) ~インクリメント演算と制御~

プロパティについての紹介(2)です。(初心者向け記事です)
前記事(C#:プロパティを理解する)で書いたように、C#には、プロパティと呼ばれるメソッドと変数の中間のものがあります。
int型のプロパティは、通常のint型変数のようにインクリメント演算が使えます。また、set時に値の上限下限の制限を与えることで、予期せぬ値の変更に対応することができます。

class Program {
static void Main(string[] args) {
testData td = new testData();
for (int i = 0; i < 20; i++) {
td.Count++;
Console.WriteLine(td.Count);
}
Console.ReadKey();
}
}
class testData {
private int max = 10;
private int count;
public int Count {
get { return count; }
set {
if (value <= max) {
count = value;
}
}
}
}


2013-07-20

RMeCab on RServe で頻度情報を抽出する

RMeCab on RServe で頻度情報を抽出してみました。注意事項ですが、Rの出力と行列の関係が異なっています。つまり、結果が列毎に文字列配列として格納されていますので注意して下さい。

System.out.println("テスト");
c = new RConnection("192.168.1.50");
c.eval("library(RMeCab)");
REXP res = c.eval("RMeCabFreq(\"/home/ochi/test.txt\")");
RList dataList = res.asList();
int num = dataList.size();
System.out.println("num=" + num);
for (int i = 0; i < num; i++) {
REXP data = (REXP) dataList.get(i);
String[] dataStringArray = data.asStrings();
for (String str : dataStringArray) {
System.out.print(str + " ");
}
System.out.println("");
}
view raw RMeCabFreq.java hosted with ❤ by GitHub


2013-07-19

RMecab on RServeで簡単な形態素解析をしてみた

RMecabで簡単な形態素解析をして、それをRServe経由で結果を取得してみました。あっさり書いてますが、かなり苦労しました。RMecabの出力結果に応じて変えていく必要がありそうなので、要注意です。

c.eval("library(RMeCab)");
REXP res =c.eval("RMeCabC(\"我輩は猫である。名前はまだ無い。\")");
RList list = res.asList();
int num =list.size();
for(int i=0;i<num;i++){
//品詞情報
REXP re = (REXP)list.at(i);
REXPList list2 =re._attr();
RList list3=list2.asList();
System.out.print(i+":"+list3.at(0).asString()+",");
//単語だけ出てくる
String s=re.asString();
System.out.println(s);
}
view raw rmecab.java hosted with ❤ by GitHub


2013-07-17

MeCabとRMeCabをインストールした(Scientific Linux)

Rで言語解析をしようかと思い、RMeCabを利用することになりました。Scientific Linuxにインストールしたメモ書きです。コマンドは下記に載せてますので、ポイントをピックアップします。

Mecabのインストール
Mecabの公式サイトからtarボールをダウンロードして、make してインストールしましょう。特に問題はないと思います。

辞書のインストール
辞書はいろいろあるようですが、IPADICがオススメらしいのでそれをダウンロードし、make してインストールしましょう。ファイルは、Mecabの公式サイトに載ってます。これもインストールにはとくに問題はないと思います。

RMeCabのインストール
公式サイトがいまいちわかりにくいんですが(失礼  ^^; )、ファイルは32bit版と64bit版の2種類があります。ファイル本体は、作者所属の徳島大に置いてあります。
ここでの注意点は、Rのバージョンとbit(32bitか64bitか)です。これが合ってないとインストールできませんインスールはできますが、Rで呼び出せません。自分がいれたRを確認しましょう。確認方法は、コンソールでRを起動し、メッセージを確認すればいいです。

## MeCabのインストール
$ ./configure --with-charset="utf8"
$ make
$ make install
$ sudo ldconfig
## IPADICのインストール
$ tar zxf mecab-ipadic-2.7.0-20070****.tar.gz
$ cd mecab-ipadic-2.7.0-20070****
$ ./configure --with-charset="utf-8"
$ make
$ make install
## RMeCabのインストール
R CMD INSTALL RMeCab_0.999_R_i686-pc-linux-gnu.tar.gz
view raw rmecab.sh hosted with ❤ by GitHub


2013-07-11

C++: IntelliSense: PCH 警告: 適切なヘッダー停止位置が見つかりません。

Visual C++の開発で、関数のプロトタイプ宣言がないまま関数定義をしようと
IntelliSense: PCH 警告: 適切なヘッダー停止位置が見つかりません。Intellisense PCH ファイルは生成されませんでした。
というエラーが出ます。C言語は、C#やJavaと違って、関数本体の記述の前に引数や戻り値を定義したプロトタイプ宣言が必要ですので、注意して下さい。


2013-07-08

MacにインストールしたEclipseが起動しない場合の対処法 ~Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception~

MacにEclipseをインストールし、さあ起動!とクリックすると、
予期せぬエラー
みたいな感じで、Eclipseが全く起動しない状況が発生。エラー詳細をみると、
Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception
というエラーで、正直意味不明。。。で、解決策ですが、
  • ダウンロードしたEclipseのtarボールをダブルクリック解凍するのではなく、tarコマンドを利用して解凍する。。( tar -zxvf eclipse-XXXXXX.tar.gz )
という方法でOK。騙されたと思ってやってみて下さい。


2013-07-06

Google Apps Script勉強会に参加&発表してきました


先日、GDG京都と京都GASとの共催のGoogle Apps Script勉強会(GAS勉強会)に参加してきました。私はGDG京都の運営スタッフ兼発表者として参加しました。

GAS概要(私)
ここは私が担当しました。。。が、このBLOGでも書いているとおり、GASについては最近はじめたばかりで、何か特別なことを話せるというネタはなかったのですが、自分自身の勉強のきっかけも兼ねて、GASの概要を調べて説明しました。正直、資料を作る時間が思ったよりもとれず自分でも未確認のところが多かったので、見当違いのことを話してるんじゃないかと柄になくめちゃめちゃ緊張しました。あと、個人的に時間オーバーする傾向があるので、ちょっと早めに喋ってたら思った以上に早く終わってしまい、ちょっとプレゼン的には失敗したかなという反省。ただ、ポイントは抑えたつもりで、後の発表の前知識としてはまずますだったかなと思います。あえて言えば、もう少しソースコードを見せてもよかったですね。

Google Apps ScriptとクラウドBPMとの連携(日下さん@クエステトラ)
自社のクラウドサービスにGASを連携させている事例の発表でした。GASによって既存のシステムを補完するというスタンスで、大変興味深い内容だったと思います。

Google Apps Scriptの業務での活用事例(佐藤さん@らしく)
SpreadSheetをサーバ的に利用する事例について報告されてました。また、GASをプログラミング教育のツールとしてとらえて活動をはじめていくようです。

Google Apps Scriptの新機能(小川さん@トップゲート)
最後は、本勉強会のメインディシュでもあるGoogle Expertの小川さんに今年のGoogleIOで紹介されたGASの新機能についてお話がありました。ライブコーディングで新機能を説明されるのは圧巻です(個人的にネット経由で小川さんのライブコーディングを背景したことはありますが、生で見るのは初めてです)。個人的に一番気になったのはGASによるFormsプログラミングですね。

自分ならびに他の3名の話を聞いて共通して感じたことは、GASは
  • とてもお手軽
  • しかもいろいろなことができてしまう
という点ですね。特に私は、佐藤さんも話していたのですがプログラミング教育の言語としての可能性をビリビリと感じました。商品などでの実利用は確かにまだリスクはありますが、ゼミでの卒研等でも使えそうですし、教育の場で利用してもいいかなと思ってます。

GAS関連のイベントがあれば、積極的に参加するつもりです。





2013-07-04

XNA と RADEON系グラフィックボードの相性が悪いかもしれない話

ラボでは、XNAライブラリを利用したシステム開発プロジェクトが1つあるのですが、先日、マシンを変更した時に今まで動いていたプログラムが正常に動かなくなりました、、、正確に言うと
コンパイルは通って実行できるのに描画内容が違う
というトラブルが発生しました。

(1)スペック不足?
 最新型に乗り換えたのでそれはないですね。
(2)ソフトウェアのライブラリのバージョン違い?
XNA, Visual Studio, Win7, DirectX いずれもバージョンが同じであることを確認。
(3)ディスプレイ関係
以前と同じ。グラフィックカードのスペックも高性能になっているし、ドライバの最新版にアップデートしても状況変わらず。
(4)機種依存の実装をしている?
別のノートPCで動いた実績ありなので、これも却下

という感じで、もう、何が起こってるのか、わけがわからないよ!とお手上げ状態だったのですが、1点グラフィックボードの種類に問題があるのではという事に気づきました。

グラフィックカードには、
  • RADEON系
  • GeForce系
の2大勢力があるのですが、トラブルが起こったマシンはRADEON系。今まで動いていたマシンはGeForce系です。で、ネットをぐぐってみると、RADEON系ボードでXNAのプログラムが正しく動かないという事例があることがわかりました。おそらくこれが原因でしょう。別途ボードを用意して確認したいと思います。

そういえば以前、RADEON系ドライバとVistaの相性が悪い事例がありました。RADEONは要注意ですかね?



2013-07-01

RServeでJavaからRを呼び出す

RServeを利用してJavaからRを呼び出すサンプルです。

(1)ライブラリのダウンロードとクラスパス追加
http://www.rforge.net/Rserve/files/ から、
  • REngine.jar
  • RserveEngine.jar
の両方をダウンロードして、クラスパスに追加して下さい。

(2)サンプルコード
下記、サンプルではリモートマシンにあるRを呼び出していますが、ローカルの場合はアドレス指定なしでOKです。

REXP x ;
RConnection c;
try {
c = new RConnection("192.168.XX.XX");
//直接コマンドで代入
c.eval("x<-10");
//代入はこの書き方がたぶん正解
int xx=10;
c.assign("x",xx);
x = c.eval("x/2");
System.out.println(x.asString());
}catch (RserveException e) {
e.printStackTrace();
} catch (REXPMismatchException e) {
e.printStackTrace();
}


RServeのインストールと起動コマンド

JavaからRを呼び出すには、RServeが便利そうなのでRServeインストールしてみました。

(1)RServeのダウンロード
http://www.rforge.net/Rserve/files/ からSource package(tar.gz形式のファイル)をダウンロードして下さい。

(2)RServeのインストール
R のインストールコマンドを利用します(下記参照)。

(3)リモート接続許可のための設定記述
/etc/Rserv.conf に
remote enable
と記述します。このファイルは初期状態ではありませんので、自分で作る必要があります。このファイルで設定できることは、マニュアルに書いてます。

(4)ファイヤウォール設定
リモートからのアクセスを許可するには、
  • 6311ポートを公開
してください。

(5)RServeの起動
Rのコマンドで起動します(下記参照)。

#Rserveのインストール
$ R CMD INSTALL Rserve_1.7-0.tar.gz
#RServeを起動
$ R CMD Rserve
view raw RserveSetup.sh hosted with ❤ by GitHub
これで、各クライアント毎にRをインストールしなくても容易にRを呼び出すことができそうです。