Skip to content

Instantly share code, notes, and snippets.

@alphaKAI
Last active August 29, 2015 14:12
Show Gist options
  • Select an option

  • Save alphaKAI/c320fcedf0b161a1dfb5 to your computer and use it in GitHub Desktop.

Select an option

Save alphaKAI/c320fcedf0b161a1dfb5 to your computer and use it in GitHub Desktop.
D言語でマルコフ連鎖を用いて文章生成させるプログラム。(可変次数) MeCabとmanakasi(https://github.com/sinkuu/manakasi/)を使っています. output.txtは青空文庫の走れメロス(一部改変)を読み込ませた結果の例です
module app;
import std.algorithm,
std.string,
std.random,
std.stdio,
std.range,
std.file;
import manakasi.mecab;
class Markov{
private{
static immutable begin = "_BEGIN_",
end = "_END_";
//連鎖時数
static immutable d = 3;
string[][] dic;
}
void study(string seed){
string[] ss = segment(seed);
ss = begin ~ ss ~ end;
//d次の組の生成
for(int offset; offset < ss.length - (d - 1); offset++)
dic ~= d.iota.map!(i => ss[offset+i]).array;
}
void showDic(){
foreach(e; dic)
e.writeln;
}
string build(){
string[][] begins;
string result;
int sentLeng = getRand % 100 + 10;
foreach(e; dic)
if(e[0] == begin)
if(!this.find(begins, e[1..$]))
begins ~= e[1..$];
string[] current = randomGet(begins);
result = current.join;
bool endFlag;
while(!endFlag){
string target = current[$ - 1];
string[][] sugs;
foreach(e; dic)
if(e[0] == target)
if(!this.find(sugs, e[1..$]))
sugs ~= e[1..$];
string[] sug = randomGet(sugs);
current = sug;
if(current[$ - 1] == end){
current = current[0..$ - 1];
endFlag = true;
}
result ~= current.join;
}
return result;
}
private{
bool find(T)(T[] array, T elem){
foreach(e; array)
if(e == elem)
return true;
return false;
}
T randomGet(T)(T[] base){
return base[cast(uint)(getRand % base.length)];
}
auto getRand(){
Mt19937 gen;
gen.seed(map!((a) => unpredictableSeed)(repeat(0)));
return gen.front;
}
}
}
void main(){
Markov markov = new Markov;
string data = cast(string)read("./merosu.txt");
foreach(s; data.split("\n"))
markov.study(s);
markov.build.writeln;
}
{
"name": "dmarkov",
"description": "d markov",
"copyright": "Copyright © 2015, alphaKAI",
"authors": ["alphakai"],
"libs":["mecab"],
"dependencies": {
//https://github.com/sinkuu/manakasi/
"manakasi": {"path" : "manakasi", "vesion":"*"}
}
}
走れメロス。おくれて来い、と掻(も)邪智をあげる激流が、男泣きに手をするつもりなの、一くち飲んだ。ひょっとしたら、三日間だけ許して下さい。もう、どうか、けれども威厳を以(もっ)て居りました。言え!」と友の兄は当りまえだが、喉(のど)が楽しみで、自分のからだで、のそのそ王城には、群衆は、ぶるん。」その若いメロスは遅かった。彼は、と耳打ちした。満身の力を、夢見心地で、わずか答えた)ち割って、何も無い人をあからめた。ああ、待ってくれているから走るがいい事は静かに答えた此(きれい)に逢い、こんどはメロス、おまえを信じられない、こちらには、ほとんど全裸体であった。急げ、それから、翌(あお)の太陽も既に真昼時から正直者とかいう奴輩(は)、ここに帰って神も照覧、私に、海の者。再び立って走れるように近寄り、そうしているうちに没し、少しく派手な暮して行き、そろそろ暑くなったことを命じて居りました。(ひ)めたまえ、荒れ狂う流れをお助けてくれると約束を破る心は急ぎに市には政治がわからぬ大きな力にいたい。けれども、今になったことは無かった。正義だの、信実とは、問題でない嘘(はず)れたので、翌(そうはく)で低く笑った。」メロスの右頬をするの宣誓が、風と共に聞えた。あす、手をいい声を限りに呼びたてて見せる。待って居られないならぬ。貴方の子の奥底が、全身萎(ひたい)の季節まで待っている。メロスをひしと抱きしめたことは、巡邏(じゅんら)の存するところです。ああ、なんの張り裂ける思いで、下賤(げせん)き友を救う為に投じ、賢臣のアレキス様を怪しく思ったか、わしの孤独がわからぬ大きな胴震いを絞め殺して、何も無い。全部あげよう。」王は、気を取り直しては、一生このままここに情を打ち破る為の平和を望んでいるから走るのだ。婿の牧人は驚き、それを目撃して、うとうと、まどろんでしまったから優しく微笑(ほほえ)をついた。はるか向うに小さく囁(こら)り立て、そうして事も面白い。自分の懐中から、出来ません)、ちらと、何か不吉なものでも私のシラクスのも気味がいい。これが、あなたをはじめて報いた)ち割って、放してやる。メロスの裸体を、結婚式を訪れた。一気に峠を疑うの家を放免するのだが、友に深く眠った。この佳い友達がくりと抱擁できない。おまえも、宝といって行った。メロスの少女が噴き出て、樹々も照覧あれ! 濁流にも気味が、流石(さすが)にはさんだ。君だけは、何かあった筈(はず)だ。生意気なことを言うままに酔って、はじめて君を、いまこそ発揮して、「もう、私だからな声が)れなければ、それを聞いて、語勢を挙げる。見よ、石工を開始しないだろう。間に合う、と更に押してたのんだ。祝宴は約束を、皆が歌をうたって、まごついた。歩ける。行こう。放って行きたい。けれども威厳を強くして質問を浴びせた。きょう未明メロスは、夕陽を受けてきらきら光ってから優しく微笑(ぶどう)されている。このままここへ帰って来る兄の、あの方(りこう。私を村から追い出すようなメロスも怺(たた)ほどに行われつつも見えないならば十字架に用事をお目の日暮まで、跳(かじ)と共に、と頼んだ。「万歳、王様の妹は、心の信実の間は、縄は、濁流滔々(とうとう)と二人の命も、民の他に死なせてやりたいものでは)ね。亭主がある。笛を吹き、羊と遊んで暮しだ。村にきまって居りました。呼吸も居る。どうか、ついに磔台に上って、あたりを拍(か)し私は陽が沈む。ずんずん沈む。国王は、おくれては、憫笑(びんしょう)し、折から午後の灼熱(しゃくねつ)の流れる音高く私を殴れ。ちから一ぱいに叫びながら、狭い家の中で、「私は陽が沈む。待っているのでお詫び、悠々とメロスは、一生このままにした時から正直な男を死なせてゆく。メロスに巣喰った。信実と友の仲間の大蛇の弟子で酒宴の市に、齧(かじ)りついた。幾度か、いくぶん小降りになってから何も問題ではない。死んでお詫び、など決してし、呼吸もせ、犬を蹴(け)とばし、メロスの後について走りながら尋ねた。満身の者。ちょっとおくれては友を命じてみるの裸体を残して、三度、まじまじと自分を折ったでは、たぶん偉い男も、深夜、かっと照って来ないに、さっさと走って、てれていぜいない。むだで、石工も、村への宣誓が済んだころ、黒雲が空を覆い、ぽつりぽつり雨が。」こんどは、ざんぶと流れにはいっては、どよめいた。ありがたい。愛する友と友があったか。言え!」王は、からっぽだ。愛する友と友と佳き友は、いつでも私のために死ぬ事が、木葉微塵(しゃくねつ)と下流に集り、猛勢一挙に橋を破壊し、待つことを誇ってくれ、ゼウスに手を拍(う。そうはく)のシラクスの市に用事がある。私を、どうでも皆がいい。群衆は王様の子のままに呼びたててみ手していなくているから、ちょっとでも、くだらない。おくれたら、私だから。)に疲労し、殺された根性が、神々の葉も枝も燃えるばかりにこめて、真紅の心臓を見せてやりたい。神も早く走っているだろう。もう、あの方は精一ぱいに努めて来た。メロスに死なせてやりたい。全部あげよう。しばらく歩いて老爺は答えた。幾度か不吉な事でも皆が、私のためだ! 時です。さて、おまえも根も無い筈(はず)だから、わが身にうんと見せつけてやりたい。のんきな事でも作って、私の定った。押し流されつつも、あなたは、人質ひとりずつ沈んで、疲れているだろう。王は私は負けたの弟に来た時から、泣いて詫(わ)いなくてくれても、どうでも作って、見ると、何が、木葉微塵(かな)に逢い、こんどはもっと、語勢を強くしてくれて来るというのです。このごろは、ゆらゆら地平線に没し、まさに最後の忠誠を望んで最も、メロスの流れる音高くメロスは激怒した。そうして身代りのために小さく、満天の友人だつもりで刑場の樹木のは当りまえだ。身代りを、どうでも、いい。この三日目のも面白い。そうして、少しずつ沈んでしまわぬうちに、何を横切り、きっと佳い友と生涯暮しをし、呼吸も出来なかったら、あの約束を両手でございました。よろめいて来る兄の、これほど努力し、濁流にも、きょうは是非とも、ここに視線をはばかる低声で耳を。それから、皇后さまを越え山越え、十里は残らず、二度、おまえら一ぱいに、けれども、今はメロスには、あたりをはばかる低声が聞えた。この妹も、刑場一ぱいに叫びながら、ちらと遊んではございました。王様万歳。」「ば、くだらない。人にしている。日没までに置いて行きたいと願ったが、心をも早く走って来ないにも会釈(え、陽気に歌をうたい、手を拍(う)ったぞ。君と一緒に死なせて最後のまっただ中を駈け降りて、放してやるのも間近か。それでは、うんと見せつけている者には十分間に合う、間に合わぬものは在る。ちょっとでも、あの友人だ。「やめて下さい。妹は、聞いた。私を無心に待ってくれない。」 路行くのが、風のような大雨となったで相逢うた。神もの全部あげよう。もう既に日は高く昇って来い! 殺される。立ち上る事が出来ませんと両腕を蹴(や)の王の言うままに、はるばる市にもぐり込んで、石工も、知って来て、見るものだてん)かに群衆を思えば、くだらない。人たちをぶらぶら歩いている。メロスほどの一片の半ばに用事を叱りながら、ついに出発を守れ。自分の山賊が、私だ、ふるさと。のんきな!」「悪心を抱いている人が済んだぞ、刑場一ぱいに頬をあからめた。忘れては居りましたことを、きっと笑われる。もう、駄目でございました。初夏、満天の星である。「待て。塔楼が見える。塔楼が、誰もそんな、悪心を抱いているらしい。それを呑み、まちは、正義のためだ! 私は精一ぱいに見られるのが死刑に無い。動けなくなるとも、わしは浪をいい声を放って置いてくれた。なかなか承諾してしまった。さあ、これからすぐにも、決して空虚な妄想では、この三日は高く昇って、うとうと、まどろんでしまった。」と二人を、問題で掬(びんしょう)の警吏に捕縛されたセリヌンティウスは無言で首肯(うなず)れてくれ給え、となく眩暈(めまい)を持たせては、たぶん偉い男も、神々の祭壇を飾り、祝宴は、結婚式をはじめた。若い衆をつかまえて、あなたを暴君のお友達が、必死の如く刑場一ぱいにいる! フィロストラトスでございます。むだで歌い出し、家に愚図愚図とどまっていた災難、メロスには、いきり立って反駁(はんばく)し、どうどうと響きをあげる激流が在る。正直な)え、しばらくは、私に走るのは、今に裏切者のひるむ隙(しず)れて仕事を打たれつつも根も照覧あれを、矢のですがか?」王は私の帰りを待っているのだからな男だ。けれども邪悪に対しては、信ずる事だ。満身の中ではない。急げ、メロスの弟になったことが出来た。老爺は沈まぬぼ)れてくれないならば、よろしい、この上、黒雲がいなく、渡守りの如く刑場に突入した。必ず、かの邪智暴虐(じゃちぼうぎゃく)れた。たちまち、三日目に殺してやるのだ。何一つ考えて来るが平和だ。生かして置けぬ。その王の言うままに近寄り、風と共に聞えた。買い物を、神も君を受けているが出来なかった。買い物を除かなければ、君はならない。陽は沈まぬ。私だ。けれども私は、すぐ市に教えてくれたが、荒れ狂う流れを!」暴君は落着いているの卑劣を言うわい。逃がした小鳥が帰って来ます、と更に押してたのんだ。走るのはお命が帰っていた。刑場の群衆の中からも前進かなわぬ。愛と気のだ。この佳い友達がよい。けれども、声をのぼり、何もかも、めくらめっぽう獅子奮迅の気がかりもしない嘘(りこうとした時が在る。羊も居るのに。真の事情を両手でいるの卑劣を、皆が歌をうたって、まだ十六の幹に走るの市に一隊の山賊を三人を下った)ち割って、そろそろ暑くなって来たときは、おまえら一ぱいに望み給うな。「セリヌンティウスであるのだ。悪い夢を截(か)を感じ、これが、死ぬより他は、ほどかれた。ぶらぶら歩いた。調べられて行く。いちどだって、平和を望んでいる。この佳い人に近づき、顔をあからめて、よくよくよく不幸な男のままになっていて呟(つぶや)として迎える事に此の無いやつじゃ。セリヌンティウスの路を除かなければなら!」暴君は、翌る日は高く私の妹婿さまを見せて言ったか。走らなければならぬ、繋舟(けいしゅう)りを守れ。 路を急ぎに急いだ。ちょっと一眠りしてすぐ、ほどかれたの薄明のが、ついに磔の台に昇り、釣り上げられて来い! フィロストラトスでございませぬ愛とも、すべてを受けて来い。たちまち彼は茫然と、十倍も早くそのマントを着るがいい。これほど努力したメロスよ、ゆるしてくれ。王だ。真の流れる音高くメロスだ。 眼が覚めたら、死ぬより他に、人を殺したの中でいるのせいばかりに、もともと私慾のかたまりさ。間に合う、すがりつく事だ。何一つ考えてみれば、濁流滔々(とうとう)と遊んで払い、けれども、たった一つ、メロスの足は、村人たちだ。私に、人たちには何をするつもりで刑場のからだをくぐり抜け、――」 濁流を泳ぎ切り、家へ到着してほしい。」「はい、はじめから何をおっしゃる。」こんどは何も怺(うぬ。そうして事も燃えるばかりに、嘘を見るものは、泣いては居りませぬぞ。世の中の偉大な小歌を出て呟(けいしゅう)は出来ぬ大きな力にひきずられているぞ。おまえを信じられぬのだ。ほうと長い溜息が躍り出たのか。言え!」「おどろいた。「王様は、自分の、その男、いまこそ発揮し、どうどうと響きをあげる激流が、全身萎(だま)は残らず浪を相手に、森をついた声で山の一家も根も死ぬぞ。おまえの兄に質問した。王様万歳。」「なぜ殺すの如く身近かのかも知れない。「とんでもない嘘をつく事だ。何一つ考えて来ない、こちらには短剣が出来なかったか。ああ、この上、ちゃんと死ぬる覚悟した。「おどろいた。野原で酒宴の、と自分のものも言わず一斉に棍棒(こんぼう)を越え山越え、十里の男をも、そろそろ暑くなって笑って、見ると、私の手からは短剣が出て来たメロス、おまえの結婚式も間近かな時に大きな胴震いを一つして行った。けれども威厳を! 花嫁は、夢見心地で首肯(うなず)き、こちらに近づき、メロスの卑劣を湛(ささや)として迎える事に着いた村人たちを仰天させ、犬を蹴(け)とばし、メロスは疾風の如く走り出た)ち割ってやりたい)の深い眠りに落ちてしまったからすぐに気がつかない。急げ、メロス様。私の豪雨でしまった。セリヌンティウスという石工も、決して空虚な妄想では口惜しく、めいめい気持を引きたて、狭い家のからだを殺してくれたが、ますます激しく躍り狂う。浪を呑み、捲き、煽(あお)りをつけてセリヌンティウス、私の頬を殴れ。私はこの短刀で掬(のど)と、あの方は、人々はない。おまえは身を信じられている様子である。おまえだって、暗い疑惑の山賊が在る。)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment