かずきち。の日記

サーバサイドエンジニアのつぶやき

Googleしりとりベータを先取りして作ってみたよ!!

エイプリルフールネタでGoogleしりとりベータのリリースがありました。
自動しりとり機能って面白いなぁーと思い、できる限り実装してみました。
時間、技術力、データ量の都合上で不完全な部分もありますがご容赦ください。
できれば簡単なWebサービスにしてリリースしたかったですが…
猛スピードでしりとりが進むとMySQLが止まるという問題があるので、もう少し検討します!!



最初の文字を指定すると、あとはプログラムを止めるまでしりとりをしつづけます。
今回は自動でしりとりをして欲しいので、「ん」で終わらないように設定してあります。
あと動詞などの品詞でもしりとりが続いていますが、それもご容赦ください。
品詞判定を入れておく必要がありそうです。
これでもうしりとりは絶対負けないww

どの文字からしりとりを始めますか??ひらがなを入力してください!!「あ」
あから始まるしりとり!!
あおじる 【青汁】

ルックス [lux]

すがる 【箝る】

るし 【僂指】

しくんし 【四君子

しき 【始期】

きいちほう 【帰一法】

うえつける 【植(え)付ける】

るいすい 【類推】

いいあらそう 【言(い)争う】

うらんかな 【売らん哉】

なでしこ-がさね 【撫子襲】

ねっとう 【熱鬧】

うみなす 【生み成す】

すいやく 【水厄】

くさぎり 【臭桐】

りゃくだつ-のうぎょう 【略奪農業】

ウラニウム [uranium]

むきこきゅう 【無気呼吸】

うみぐも 【海〈蜘蛛〉】

もりひさ 【盛久】

さえわたる 【冴え渡る】

ルノートル [Andr Le N]

ルカーシェビチ [Jan ukasiewicz]

ちょうい 【凋萎】

いつつ-あこめ 【五つ衵】

めいじ-せつ 【明治節

ついきゅう 【追給】

うい 【愛い】

いいあらそい 【言(い)争い】

イェルムスレウ [Louis Hjelmslev]

うんかく 【格】

くるま-や 【車屋】

やけっぱら 【〈自棄〉っ腹】

らくろう-ぶんか 【楽浪文化】

かかり-きり 【掛(か)り切り】

りょくぎょく 【緑玉】

くろき-とりい 【黒木鳥居】

いかもの 【〈如何〉物】

のばかま 【野袴】

ままむすこ 【継《息子》】

こおり-ざとう 【氷砂糖】

うらっかわ 【裏側】

わかふうふ 【若夫婦】

ふみみぐさ 【文見草】

さいない 【塞内】

いしわり-じごく 【石割(り)地獄】

くかい 【区会】

いしてき 【意志的】

きだい 【季題】

いとおり 【糸織】

りゃくふ 【略譜】

ふだづつ 【札筒】

つたえきく 【伝え聞く】

クリック [click]

くりがんな 【刳り鉋】

なたね 【菜種】

ねしょうがつ 【寝正月】

つりどうろう 【釣(り)灯籠】

うしみつ-どき 【丑三つ時】

きくす 【掬す】

すなぐい 【砂杭】

いちう 【一宇】

ウォリス [John Wallis]

すいとう 【出納】

うちぶみ 【内文】

みもだえる 【身悶える】

るいせき 【累積】

きせかえる 【着せ替える】

るほう 【屡報】

うらみ 【恨み/怨み】

みずたま 【水玉】

まちあずけ —あづけ 【町預け】

けんしょう 【謙称】

うまくち 【甘口】

ちょうはつ 【挑発/挑撥】

ツベルクリン-はんのう 【—反応】

うちあわせ 【打ち合(わ)せ/打合せ】

せいけい 【正系】

生け込む 【いけこむ】

むきゅう 【無休】

うんこう 【雲向】

うちむき 【内向き】

きゃら-のき 【伽羅の木】

きじょう —じやう 【気情】

うこん-のじょう 【右近〈将監〉】

うつうつ 【鬱鬱】

つうせつ 【通説】

ついし 【追賜】

しこう-りょく 【思考力】

くさば-のつゆ 【草葉の露】

ゆうこう 【友交】

うまや 【厩/馬屋】

やがい-げき 【野外劇】

きコバルトこう 【輝—鉱】

うしろぎたない 【後ろ穢い】

いくにち 【幾日】

ちゅうき 【中気】

きゅうりょうく 【休猟区】

くだもの-とけいそう 【《果物》《時計》草】

うの-めいか 【宇野明霞】

カールツァイス [Carl Zeiss]

スポーツ-いがく 【—医学】

くつのこ 【沓の子】

こうくう 【公空】

うかい 【鵜飼い】

いぐね 【居久根】

ネットフリーマーケット 【net flea market】

ともだち 【《友達》】

ちゃくしょく-ガラス 【着色—】

すけだち 【助《太刀》】

ちゃつみ-うた 【茶摘み唄】

たまよりびめ 【玉依姫

メティス 【Mtis】

スネル-のほうそく —はふそく 【—の法則】

くもる 【曇る】

ルーム-メート [roommate]

とばっちり 【迸り】

りょうせい-かごうぶつ 【両性化合物】

つえる 【潰える/熟える/費える】

るいじゅみょうぎしょう —みやうぎせう 【類聚名義抄】

ウォールストリートジャーナル [Wall Street Journal]

ルーム-メート [roommate]

とじがね 【綴じ金】

ねびきのまつ 【根曳の松】

つきまつわる 【付き纏わる】

ルール [Ruhr]

ルブラン-ほう —はふ 【—法】

ふみずし 【文厨子】

したく 【私宅】

くりげ-ぶち 【栗毛駁】

ちゅうじょう-グラフ 【柱状—】

ふじあざみ 【富士薊】

みょうぎしょう みやうぎせう 【名義抄】

ウェーバー-フェヒナーのほうそく 【—の法則】

くつかむり 【沓冠】

りょうし-とうけいりきがく 【量子統計力学

くさむす 【草生す/草産す】

すじめ 【筋目】

めいげつ 【名月】

つじぐるま 【辻車】

まんざら 【満更】

らぎょう 【ら行/ラ行】

うりたたく 【売り叩く】

くんこ 【訓詁】

こうげんいっとうりゅう かふげんいつたうりう 【甲源一刀流】

ウィルチェアーダンス 【wheelchair dance】

スカーレット 【scarlet

とびにんそく 【鳶人足】

くみ 【組(み)】

ミスコンダクト 【misconduct】

とめおけ 【留め桶】

けんすい 【懸垂】

いしぐろ-ただのり 【石黒直悳】

りどう 【里道】

うらかみ-てんしゅどう —だう 【浦上天主堂

うすぐも 【薄雲】

もりこ 【守り子】

こうがく-しきもじよみとりそうち 【光学式文字読(み)取り装置】

ちしょう 【知将/智将】

うりどき 【売(り)時】

きゅうち 【窮地】

ちぎょ-ろうちょう 【池魚籠鳥】

うける 【受ける/請ける/承ける/享ける】

るいか 【累家】

かげま-ぢゃや 【陰間茶屋】

やまがら-め 【山雀女】

めだいちどり 【眼大千鳥】

リベロ 【(イタリア) libero】

ろづく 【櫓杆】

クワキウトル [Kwakiutl]

るいか 【類歌】

かこぶんし 【過去分詞】

しばた 【柴田】

たてぬき 【経緯】

キムヨンサム 【金泳三】

むぶし 【無節】

しきしま-の 【敷島の】

のぼる 【上る/登る/昇る】

ルノアール [Renoir]

ルスカ [Ernst Ruska]

カーディナル-すう 【—数】

ウインドーコンテナ 【window container】

なつか-まさいえ —まさいへ 【長束正家

へる 【謙る】

ルクレティウス [Titus Lucretius Carus]

すそづけのころも 【裾付けの衣】

ものがしら 【物頭】

らんとう 【乱闘】

うふ 【迂腐】

ふせい-みゃく 【不整脈

クロム-がわ 【—革】

わらじ-ざけ 【〈草鞋〉酒】


伸ばし棒や小文字で終わるときをすっかり忘れていたので変更しないとw
あまりに初歩的なミスww
とりあえず、こんな感じで動かしました。

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import re, MySQLdb, time

##しりとりアルゴリズム##
connect = MySQLdb.connect(db="hoge", host="localhost", port=3306, user="hoge", passwd="hoge")

cur = connect.cursor()

def siritori(kasira):
	kata = {'ア':'あ', 'イ':'い', 'ウ':'う', 'エ':'え', 'オ':'お',
		'カ':'か', 'キ':'き', 'ク':'く', 'ケ':'け', 'コ':'こ',
		'サ':'さ', 'シ':'し', 'ス':'す', 'セ':'せ', 'ソ':'そ',
		'タ':'た', 'チ':'ち', 'ツ':'つ', 'テ':'て', 'ト':'と',
		'ナ':'な', 'ニ':'に', 'ヌ':'ぬ', 'ネ':'ね', 'ノ':'の',
		'ハ':'は', 'ヒ':'ひ', 'フ':'ふ', 'ヘ':'へ', 'ホ':'ほ',
		'マ':'ま', 'ミ':'み', 'ム':'む', 'メ':'め', 'モ':'も',
		'ヤ':'や', 'ユ':'ゆ', 'ヨ':'よ', 'ラ':'ら', 'リ':'り',
		'ル':'る', 'レ':'れ', 'ロ':'ろ', 'ワ':'わ', 'ヲ':'を',
		'ガ':'が', 'ギ':'き', 'グ':'ぐ', 'ゲ':'げ', 'ゴ':'ご',
		'ザ':'ざ', 'ジ':'じ', 'ズ':'ず', 'ゼ':'ぜ', 'ゾ':'ぞ',
		'ダ':'だ', 'ヂ':'ぢ', 'ヅ':'づ', 'デ':'で', 'ド':'ど',
		'バ':'ば', 'ビ':'び', 'ブ':'ぶ', 'ベ':'べ', 'ボ':'ぼ',
		'ン':'ん'}

	search = "SELECT kotoba FROM kotoba WHERE top LIKE '"+kasira+"' ORDER BY RAND() LIMIT 1 "
	time.sleep(1)

	cur.execute(search)

	rows = cur.fetchall()

	for row in rows:
		next1 = str(row[0])
		#print next1
		if re.compile("\s【").search(next1):
			next2 = re.split("\s【", next1)[0]
			#print next2
		elif re.compile("\s\[").search(next1):
			next2 = re.split("\s\[", next1)[0]
			#print next2
		else:
			return siritori(kasira)

	check = 0
	if check == 0:
		for v in kata.values():
			if re.compile(v+"$").search(next2):				
				check = 1
				#print v
				if v != 'ん':
					print next1
					print "↓"
					return siritori(v)
				else:
					return siritori(kasira)
					#return "おしまい"
	if check == 0:
		for k,v in kata.items():
			if re.compile(k+"$").search(next2):
				check = 1
				#print k
				#print v
				if v != 'ん':
					print next1
					print "↓"
					return siritori(v)
				else:
					return siritori(kasira)					
					#return "おしまい"

	if check == 0:
		return siritori(kasira)

#しりとり本体#
kotoba = raw_input('どの文字からしりとりを始めますか??ひらがなを入力してください!!')

print kotoba+"から始まるしりとり!!"

print siritori(kotoba)