Authentication




Cancel OK
B!コメントする  2013-02-19 14:03:00 by old

正規表現で片っ端から配列に入れる

需要はないと思うけど文章を指定する文字で区切って配列化してみた。
単純に無能君っぽいものを作ってみたいと……

$target = "こんにちわ今日もいい天気ですね。何かいいことが起こりそうな予感がします。メロスもそう思っているでしょう?そうでなければ理由を説明するべきです。";

while(1)
{
pregmatch("/[一-龠]+|[ァ-ヴー]+|が|の|に|を/u", $target, $match);
$match = $match['0'];

if( strlen($target) <= 0 or $match == "" )
{
array
push($tokenjoshi, $target);
break;
}

// 一致文字列長
$position
before = strlen($match);
// 一致文字列までの長さ
$positionafter = substr($target, 0, strpos($target, $match) );

// 一致文字列までを配列へ
array
push($tokenjoshi, $positionafter);
// 一致文字列を配列へ
arraypush($tokenjoshi, $match);

// 一致文字列までの内容を削除
$target = substr($target, $positionbefore+strlen($positionafter), strlen($target));
}


これを実行するとこんな感じになる。

array(27) {
[0]=>
string(6) "こん"
[1]=>
string(3) "に"
[2]=>
string(6) "ちわ"
[3]=>
string(6) "今日"
[4]=>
string(9) "もいい"
[5]=>
string(6) "天気"
[6]=>
string(12) "ですね。"
[7]=>
string(3) "何"
[8]=>
string(15) "かいいこと"
[9]=>
string(3) "が"
[10]=>
string(0) ""
[11]=>
string(3) "起"
[12]=>
string(15) "こりそうな"
[13]=>
string(6) "予感"
[14]=>
string(0) ""
[15]=>
string(3) "が"
[16]=>
string(12) "します。"
[17]=>
string(9) "メロス"
[18]=>
string(9) "もそう"
[19]=>
string(3) "思"
[20]=>
string(48) "っているでしょう?そうでなければ"
[21]=>
string(6) "理由"
[22]=>
string(0) ""
[23]=>
string(3) "を"
[24]=>
string(0) ""
[25]=>
string(6) "説明"
[26]=>
string(21) "するべきです。"
}

(空白対策なんかはnot careな感じで)

さすがに単純にぶった切っただけなので意味不明な感じもするけど、これの精度をあげていけばきっと世界に名だたる構文解析みたいな感じになるんだろうか。
もちろん日本語すら怪しい脳みそしかないのでそんなのは作れないけど、これを使ってなんちゃって解析みたいなのが作れそうな気がしないでもないけど何かの手掛かりにはなる・・・・か・・・?

仕組みとしてはこういったぶつ切りフィルターを多層にして前後の語彙なんかも含めていくといいんだろうけどまぁ遠い未来のお話として。

でも人工知能って憧れですよ。
知能じゃなくてもそれっぽいものが受け答え(的外れでも)しているのを見ると楽しいもんです。
きっとこれを元に何かが出来ていくような気がするようなしないような今日この頃です。


PHP  

  • コメント
  • コメントはまだありません