Created
June 20, 2012 06:52
-
-
Save mironal/2958500 to your computer and use it in GitHub Desktop.
形態素解析からのマルコフ連鎖
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script type="text/javascript" src="js/tiny_segmenter-0.1.js" charset="UTF-8"></script> | |
<script type="text/javascript" src="js/kumono_ito.js" charset="UTF-8"></script> | |
<script> | |
$(function(){ | |
/* 形態素解析される文章(text)は、kumono_ito.js内に定義されている. */ | |
/*形態素解析機 */ | |
var segmenter = new TinySegmenter(); | |
/* 解析 & 形態素解析した結果が入る */ | |
var segs = segmenter.segment(text); | |
/* マルコフ連鎖によって作られた文章が入る. */ | |
var make_sentence = []; | |
var endMark = /。$/; | |
/* マルコフ連鎖の次数は、とりあえず2次で固定 */ | |
/* 最初に選ばれる単語を決めるための乱数 */ | |
var firstIndex = Math.floor(Math.random() * (segs.length - 2)); /* 2次で固定なので、2引く、n次の場合はnを引く */ | |
/* 形態素の中から、2個選ぶ */ | |
make_sentence.push(segs[firstIndex]); | |
make_sentence.push(segs[firstIndex + 1]); | |
while(true){ /* 無限ループ */ | |
/* 次に続くことが可能な単語達が入る */ | |
var words = []; | |
/* 簡単化の為、1個ずつ回す */ | |
for(var i = 0; i < (segs.length - 2); i++){ | |
/* 2個前 */ | |
if( ( make_sentence[make_sentence.length - 2] === segs[i]) && | |
/* 1個前 */ | |
( make_sentence[make_sentence.length - 1] === segs[i + 1]) ){ | |
/* 2個とも一致していたら、候補に入れる. */ | |
words.push(segs[i + 2]); | |
} | |
} | |
if(words.length > 0){ | |
/* 1個以上の候補があった場合、候補の中からランダムに1個選んで文の中に追加 */ | |
r = Math.floor(Math.random() * words.length); | |
/* 追加 */ | |
make_sentence.push(words[r]); | |
/* 毎回表示してみる. 階段上につながっていくのが分かる. */ | |
console.log("make_sentence = " + make_sentence.join("")); | |
/* 画面へ書き出し */ | |
$('#result').append($('<p>').text(make_sentence.join("")).hide().fadeIn("slow").focus()); | |
/* 終了文字(。)だったら終了. */ | |
if(endMark.test(words[r])){ | |
break; | |
} | |
}else{ | |
/* 候補がない(0個)だったら終了. */ | |
break; | |
} | |
} | |
}); | |
</script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment