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

AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

文章中の単語の共起回数を数える

http://rafeel.s602.xrea.com/honyaku/mecab.cgi
先ほどの形態素解析のテスト用の文章を利用して、1文毎に形態素の共起回数を数えてみました。
なにぶん14文ですので、単語の出現数も共起数も少ないですが

以下の様な感じに。マクドナルドの話なので、そっち系の言葉が多いですね。
助詞とか多いので、ひらがなは除外しました。対象は漢字かカタカナ。
こうゆうのを新聞サイトとかクロールしてもっと大規模にやればいいと思います。
副作用対策では、別途単語の出現回数も数えて、割ってやれば、ありふれた単語は得点が下がって
レアな単語の得点が上がるといったことができますね。
TF-IDFみたいな考え方です

マック<>フレバ-->5
セット<>円-->2
チキン<>アクセント-->2
チキン<>カボチャ-->2
チキン<>タマネギ-->2
チキン<>トマト-->2
チキン<>ナマ-->2
チキン<>パンズ-->2
チキン<>フレバ-->2
チキン<>プラス-->2
チキン<>ポテト-->2
チキン<>円-->2
チキン<>出し-->2
チキン<>厚-->2
チキン<>味わえる-->2
チキン<>混ま-->2
チキン<>程度-->2
チキン<>練り-->2
チキン<>良い-->2
チキンバーガー<>チキン-->2
バーガー<>円-->2
フレッシュネスバーガー<>マクドナルド-->2
フレバ<>決まる-->2
フレバ<>運命-->2
マクドナルド<>客-->2
マクドナルド<>復活-->2
マック<>チキン-->2
マック<>後-->2
マック<>復活-->2
マック<>決まる-->2

プログラムは行ごとに、単語と単語で3重ループですね。
InKatakanaの部分で、かたかなのみといったマッチングができます(perl文字コードがらみややこしい)

	my @words = split(/@@/,$lines[$i]);
	for(my $j=0;$j<@words;$j++)
	{
		my $word=$words[$j];
		print $word."|";
		if (decode_utf8($word) =~ /(\p{InKatakana}|\p{InCJKunifiedideographs})/) {
			for(my $k=$j+1;$k<@words;$k++)
			{
				my $word2=$words[$k];
				if (decode_utf8($word2) =~ /(\p{InKatakana}|\p{InCJKunifiedideographs})/) {
					if( defined $col{$word."<>".$word2} ) { $col{$word."<>".$word2}++; }
					else { $col{$word."<>".$word2} = 1; }
				}
			}
		}
	}
	print "<br>\n";
広告を非表示にする