トップページ > プログラム > 2016年04月14日 > zK0B8WUx

書き込み順位&時間帯一覧

9 位/222 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000021000010000004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
スレ立てるまでもない質問はここで 142匹目 [無断転載禁止]©2ch.net

書き込みレス一覧

スレ立てるまでもない質問はここで 142匹目 [無断転載禁止]©2ch.net
537 :デフォルトの名無しさん[]:2016/04/14(木) 11:28:30.22 ID:zK0B8WUx
>>536
PHPでいま作った。単語の重み、重要度考慮なし。参考。http://altarf.net/computer/ruby/3226


$A="1192年鎌倉幕府が誕生し、源頼朝が最初の征夷大将軍になった。";$B="源頼朝が征夷大将軍となり、鎌倉に幕府が誕生したのが1192年のことであった。";
$A = tovector($A); $B = tovector($B); echo "類似度は " .cossimilar($A, $B)."です。\n"; // 0.747
$A="のび太とドラえもん"; $B="ドラえもんと野比のび太";
$A = tovector($A); $B = tovector($B); echo "類似度は " .cossimilar($A, $B)."です。\n"; // 0.819
return;

function cossimilar($X, $Y) {
$s=0.0; reset($X); reset($Y);
do { $m = key($X); $n = key($Y);
if($m < $n) { if(!next($X)) break; continue; }
if($m > $n) { if(!next($Y)) break; continue; }
$s += current($X)*current($Y);
$f = next($X); $g = next($Y);
if(!$f && !$g) break; if(!!$f && !!$g) continue;
if(!$f) end($X); else end($Y); } while(1);
return sqrt($s); }

function normalization($V) {
ksort($V);
$s=0.0; foreach ($V as &$x) $s += $x*$x; $s=sqrt($s);
foreach ($V as &$x) $x /= $s; return $V; }

function tovector($A) {
$tango = array(); $X = unpack( "C*", $A );
for($n=1; $n+2<=count($X); $n++) {
$y = $X[$n] + 256*$X[$n+1] + 256*256*$X[$n+2];
if( !isset($tango[$y])) $tango[$y]=1;else $tango[$y]++; }
return normalization($tango); }
スレ立てるまでもない質問はここで 142匹目 [無断転載禁止]©2ch.net
538 :デフォルトの名無しさん[]:2016/04/14(木) 11:37:07.70 ID:zK0B8WUx
>>537で全角ひらがなの価値をゼロにしたら少しは改善する気はする。
それをやってみるか。
スレ立てるまでもない質問はここで 142匹目 [無断転載禁止]©2ch.net
539 :デフォルトの名無しさん[]:2016/04/14(木) 12:22:59.25 ID:zK0B8WUx
ひらがな無視したら95%の類似度になった。

$A="1192年鎌倉幕府が誕生し、源頼朝が最初の征夷大将軍になった。";$B="源頼朝が征夷大将軍となり、鎌倉に幕府が誕生したのが1192年のことであった。";
$A = tovector($A); $B = tovector($B); echo "類似度は " .cossimilar($A, $B)."です。\n"; // 0.95

function cossimilar($X, $Y) {
$s=0.0; reset($X); reset($Y);
do { $m = key($X); $n = key($Y);
if($m < $n) { if(!next($X)) break; continue; }
if($m > $n) { if(!next($Y)) break; continue; }
$s += current($X)*current($Y);
$f = next($X); $g = next($Y);
if(!$f && !$g) break; if(!!$f && !!$g) continue;
if(!$f) end($X); else end($Y); } while(1);
return sqrt($s); }

function normalization($V) {
ksort($V);
$s=0.0; foreach ($V as &$x) $s += $x*$x; $s=sqrt($s);
foreach ($V as &$x) $x /= $s; return $V; }

function tovector_sub( &$tango, $A) {
$X = unpack( "C*", $A );
for($n=1; $n+2<=count($X); $n++) {
$y = $X[$n] + 256*$X[$n+1] + 256*256*$X[$n+2];
if( !isset($tango[$y])) $tango[$y]=1;else $tango[$y]++; }}

function tovector($A) {
$tango = array();
$X = preg_split("/[。、ぁ-ん]/u", $A, -1, PREG_SPLIT_NO_EMPTY);
foreach ($X as $x) tovector_sub( $tango, $x);
return normalization($tango); }
スレ立てるまでもない質問はここで 142匹目 [無断転載禁止]©2ch.net
545 :デフォルトの名無しさん[]:2016/04/14(木) 17:43:02.68 ID:zK0B8WUx
意味までいくと、英語、ロシア語、中国語でも判定しないといけないだろうし
翻訳ソフトなみの技術、手間がかかるな。まともな検索エンジンを作ることとも似てるが。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。