カテゴリー別アーカイブ: プログラム

会話してくれる人工無能「Parade」

人工無能 Parade

 ようやく完成しました~。構想5分、実作業1週間・・・。
 名前は「Parade(パレード)」。こいつは、解析された形態素の前後関係をテーブルに保存し、会話に合わせて適宜取り出し結合して発言するように出来ています。まさに行列。これが名前の由来です。

 ちなみに、「完成」といいましたけど、今現在もちょいちょい改造したりしてます。一応公開してもいいかな~くらいのレベルに達したので公開しました。
 現在(2014/12/01)は、暴言ばっかり覚えさせてるので超喧嘩腰です。今後ちょっとずつこだわりながら学習させていくつもりです。

 使い方は特にありません。自由に話しかけて貰って構いません。
 Paradeの無能さを楽しんでみてください。

テキストを形態素解析します。

形態素解析

igoを使って形態素解析するサイト。MeCabとほとんど同じ結果が出せるらしい。
フィラーとかまで判定してくれるし、なにより「すもももももももものうち」が正しく解析できるのに驚き。
用途はあんまりないかと思うけど、日本語勉強してる人には役に立つかも?

形態素解析してくれるライブラリ「igo-php」

用意するものは3つ。まずそれらを全部ダウンロードしときます。

① igo-php 0.1.7.zip
ここからダウンロードできます。→http://sourceforge.jp/projects/igo-php/

igo-php 0.1.7 (日付: 2012-02-27)をクリック。


igo-php-0.1.7.zipをクリック。勝手にダウンロードが始まります。

② igo-0.4.5.jar
ここからダウンロードできます。→http://sourceforge.jp/projects/igo/releases/

だいぶ下にスクロールして、ページの中頃にあるigo-0.4.5.jarをクリック。勝手にダウンロードが始まります。

③ mecab-ipadic-2.7.0-20070801.tar.gz
ここからダウンロードできます。→http://sourceforge.net/projects/mecab/files/mecab-ipadic/

2.7.0-20070801をクリック。


mecab-ipadic-2.7.0-20070801.tar.gzをクリック。勝手にダウンロードが始まります。

 

3つインストールしたら、それぞれ解凍するなどして、一つのフォルダに入れときます。そのフォルダをデスクトップに作っておきます。名前は何でもいいんですが、ここでは「igo-php」としときます。

igo-php 0.1.7.zipを解凍して、その中にある「lib」フォルダを「igo-php」フォルダにコピー。

igo-0.4.5.jarは解凍できませんので、そのまま「igo-php」フォルダに移動します。

mecab-ipadic-2.7.0-20070801.tar.gzを解凍して、その中にある「mecab-ipadic-2.7.0-20070801」フォルダを「igo-php」フォルダにコピー。
※拡張子.gzはLhaca デラックス版などで解凍できます。

「igo-php」フォルダの中身がこうなってればおk。

 

コマンドプロンプトを起動。以下のコマンドを1行ずつ入力する。
[php]
cd C:Users?????Desktopigo-php
java -Xmx1024m -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP
[/php]
DONEとなれば成功。

「igo-php」フォルダに新しく「ipadic」フォルダができているはずです。

使うのは、「ipadic」フォルダと「lib」フォルダのみ。この2つをFTPサーバの同じ階層に置いておしまい。

 
コードは以下。インクルードする階層などは適宜調整。

[php]
<?php
$text = "私は日本人です。";

include_once "lib/Igo.php";
$igo = new Igo("./ipadic", "UTF-8");
$result = $igo->wakati($text);

echo ‘【wakati】</br>’;
for ( $i=0 ; isset( $result[$i] ) ; $i++ ) {
echo ‘$result[‘ . $i . ‘] => ’ . $result[$i] . ‘</br>’;
}

echo ‘</br>【parse】</br>’;
$result = $igo->parse($text);

foreach($result as $value){
echo $value->surface . ‘</br>’;
$feature = explode(",", $value->feature);
for ( $i=0 ; isset( $feature[$i] ) ; $i++ ) {
echo ‘$feature[‘ . $i . ‘] => ’ . $feature[$i] . ‘</br>’;
}
echo ‘スタート位置:’ . $value->start . ‘</br>’;
echo ‘</br>’;
}
?>
[/php]

wakatiは値が取り出しやすいのに対して、parseは正直よくわかんない。foreachで配列から値を取り出さないといけないみたいで、surfaceには分かち書き、featureには品詞などの詳細、startには開始位置が格納。

形態素に分けて品詞も分かるならいろいろ面白いことができそう。