震源はこちら @esehara@github さんの記事。
派生
- 「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム C++
- 「進捗・どう・です・か」をHaskellで書いてみた
- golang の進捗どうですか
- Elixir - 進捗どうですか?
- 進捗どうですかブーム?にrubyでのっかってみる
- 進捗どうですかブーム??にPythonでのりかかってみる
- 進捗どうですかブーム???にShellScriptで挑むフリしてExpectに逃げる
- 進捗どうですかブーム???に Perl でのりかかる
- 「進捗・どう・です・か」をPHPで書いてみた
- bat - 「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるバッチ
- 「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム(C#で挑戦)
概要
まぁ乗り遅れたよね
従来提案された「進捗どうですか」系プログラムはいずれも、題材に扱う文章の形態素を人力で分けて、ソースコードに書き込む必要があります。
ある文章のもつ形態素を機械的に抽出できれば、ソースコードを改変することなく任意の文章でこのプログラムを利用できます。これを可能にする形態素解析オープンソースエンジンとしてMeCabがあります。MeCabを適用することで、好きな文章で「進捗どうですか」プログラムを気軽に実行できます。
実装
RubyにはMeCabバインディングのnatto gem
があるのでこれを利用します。ここのコメントを参考に。
dou.rb
require "natto"
class Natto::MeCab
def morphemes(sentence_string)
# 入力文章の形態素の配列を返却。 "進捗どうですか" => ["進捗","どう","です","か"]
parse(sentence_string).each_line.map{|s| s[/^(.*?)\t/,1] }.compact
end
end
input = ARGV[0] || "進捗どうですか"
dic = Natto::MeCab.new.morphemes(input)
str = ''
print dic.sample.tap{|c| str << c } until str[-(input.size)..-1] == input
puts "!!!!"
puts
サンプル
こちらからは以上です。