![見出し画像](https://assets.st-note.com/production/uploads/images/74523906/rectangle_large_type_2_3965a74b314ef0ba2096f96f16dbaa38.jpg?width=1200)
3themes について
ども、kengpongです。
#3themes というタグを付けてる作品群について、もうちょっと説明をしておこうかなと思い、書いてみている所なのです。
自己紹介エントリーでも少し書きましたが、いずれ詳しく書こうと思ってるうちに随分ほったらかしてしまいました。御託を並べる前に作品書かなくちゃね~、なんて思ってたらこの有様です。笑っておくんなせえ。
ご参考まで、リンクを貼っておきます。まあ別に読んでもらわなくても良いです。あ、初めての方は読んでおいてくださいね(どっちだよ)。
どうでもいいけど、自己紹介に押された "スキ" が全エントリー中最も多いのってちょっと悲しいすな。
正直言えば自己紹介なんざサラっと流してもらって全然構わんのよ。それよか作品を読んでくれ! と言いたいです。(;・∀・)
……おっと、今回の主旨は #3themes についてでした。
3themes とは
ランダムに三つ言葉を選んで、その三つをテーマに(三つを絡めて)書いたお話です。
これまで書いたもののうち、#3themes のタグを付けたもの(3themesマガジンにも登録してあります)は皆そうやって考えた物語ですね。
とにかく話を作るとっかかりが欲しくて考えたメソッドです。考えたと言っても、別にオリジナルな発想じゃありません。三題噺っていうのがありますしね。
昔のテレビ番組で「らくごのご」っていうのがあって、これが面白くて好きだった、というのもあります。この辺も自己紹介に書きましたが。
しかし、3テーマ全てが出来るだけ本筋に絡むようにと考えると意外と難しい。そんな訳で書くペースが遅い遅い。当初思っていた以上に書けてません。
自己紹介を書いた時は正直調子に乗ってましたね。スンマセン。
どうやって選んでる?
問題はどうやってセレクトするか?です。
最初は広辞苑とかを目を瞑って開いて指差すとか、原始的な方法も考えたんですが、実際に書くのはほぼPC上のみなので、それならPC上で完結させられるようPythonでスクリプトを書いてみました。
#!/usr/bin/env python3
# themeselector.py
# スクリプトと同じディレクトリに、dictディレクトリを置くこと
# 私立PDD図書館/百科辞書
# http://pddlib.v.wol.ne.jp/japanese/index.htm
import os, sys
import re
import random
# 将来のバージョンアップ(コマンドライン引数の追加)に備えてデフォルト値を設定
# しておいた
DEFAULT_SELECT_VALUE = 3
DICT_ENCODING = "cp932"
def main (selval=DEFAULT_SELECT_VALUE, dictenc=DICT_ENCODING):
os.chdir("dict")
dictpages = [f for f in os.listdir(".") if re.match("[あ-ん].*", f) != None]
cnt = 0
while (cnt < selval):
with open(random.choice(dictpages), encoding=dictenc, errors="replace") as selectpage:
idxlist = []
# 一行ずつ内容を確認
line_number = 0
for spline in selectpage:
line_number += 1
# 行頭がひらがなカタカナ、[数字]、"★" にマッチしたら行番号
# をidxlistに格納する
if re.match("(^[ぁ-んァ-ヶ]|^\[[0-9]\]|^★)", spline):
idxlist.append(line_number)
else:
idxlist.append(line_number)
# indexリストの行番号をランダム選択
rdmidx_start = random.choice(idxlist[:-1])
rdmidx_end = idxlist[idxlist.index(rdmidx_start) + 1]
# 再度最初からファイルを走査して、選択した行番号の項目を印字する
selectpage.seek(0) # 走査行を最初にもどす
line_number = 0 # 行番号をリセット
for spline in selectpage:
line_number += 1
# 目的行に達するまでスルー
if line_number < rdmidx_start:
continue
# 次の項目、または辞書の終端まで来たら終わり
elif (line_number >= rdmidx_end) or re.match("^-*$", spline):
break
else:
# 各行に改行文字が含まれるのでend引数は空文字にして印字
print(spline, end="")
cnt += 1
if cnt < selval: print("---") #パーティションを印字
if __name__ == "__main__":
main()
細々した事を説明しだすと記事の趣旨から逸れてしまうので割愛します。コード内のコメント読んでください。そんな難しい事はやってないです。
このコードに関しては自分のブログにも書きましたので、興味があればどうぞ。まあこちらもコードそのものについてはそんなに詳しく書いてないですが。
辞書はどこから持ってきたのかと言うと、"私立PDD図書館"さん(恐らくは個人の方)が編纂し公開されている、「百科辞書」を使わせてもらってます。ありがとうございます。
私立PDD図書館/百科辞書
http://pddlib.v.wol.ne.jp/japanese/index.htm
百科辞書のファイルをダウンロードして、スクリプトと同じディレクトリに設置したdictディレクトリに格納しておきます。
で、PCのコマンドプロンプトとかLinuxのシェルとかでスクリプトを実行するとこんな感じで、ランダムに三つのお題(候補)が出力されるって訳です。
> python3 ./themeselecter.py
つくみ
【津久見】
◇[日]Tsukumi
○(1)⇒つくみし(津久見市)
○(2)[交]⇒つくみえき(津久見駅)
---
うちなだししゃじょう《うちなだししやぢやう》
【内灘試射場】
○[歴]⇒うちなだとうそう(内灘闘争)
---
あらかんよーま
【アラカン・ヨーマ】
◇Arakan Yoma
○[地]⇒あらかんさんみゃく(アラカン山脈)
(もしスクリプトについて何か質問等あればコメントください。出来るだけ答えます)
ただ、一発で決定するっていうのはほぼ無いですね。何回かガラガラポンしてピンと来たものに決めるって感じです。そこから物語を考えます。
が、挫折・頓挫は当たり前のようにあります。悲しいな~。そういった屍たちもいずれは蘇らせて書き終えてやりたい気持ちはあります。ネクロマンサーかよ。
宣伝
最後に、これまでに書いた小説を紹介します。是非読んでいただきたい。
あ、読んでいただけましたら遠慮なくスキをポチするとかフォローするとかSNSにURLを拡散するとかしていただいて構いませんよ?(←なんでしないの?くらいのテンション)
小説は3themes以外にも書いてますが、どの作品も同じ世界観の中にあり、緩~く繋がってます。
いずれ繋がりの無い物語も書くでしょうけど、それは書いてみないと分からないんですね~、これが。
まずは第一作「太廟・メガリス・八重干瀬」。noteへの初投稿でもあります。これは傑作ですね。(自分で言うスタイル)
二作目の「フェルト・ゼネコン・マーラ」。これも良いですね。(自分で言うスタイル)
ミステリー風の作品です。
この後3themes作品の投稿はほぼ2年のブランクが空いてしまいました。この間には非3themes作品を投稿してます。もちろん3themesを書いてない事は無かったのですけど、最後まで書ききれなくてね……。
しかし、復活の第三作「イターラ・フェルナンド一世・マルヌ川」はこれまた傑作ですな。(自分で言うスタイル)
歴史ロマン風味があります。また海外が舞台なので結構その辺悩みましたね。
そして第四作、3themes作品としては最新作の「チェルシー・詫間・宇高連絡線」。香川県が舞台のミステリー風味の怪奇小説。これまた傑作です。(自分で言うスタイル ←もういいって)
さあ、いずれも傑作ぞろいですね。読みたくなってきたでしょう? 遠慮なく読んでくださいね~。(また自分で言ってる)
これらの作品には、この記事のリンクとセレクターの結果(スクリプトの出力画面のコピペ)を追記しておこうと思います。
また今後3themesをリリースする際には同様にします。
といったところで
大体書きたいことは書いたかな。この辺でお開きとします。
最後まで読んでいただきありがとうございました。(・∀・)
あ、これで終わりにしないで小説も読んでくだせえ~。
急に謙ってしまいましたが、そう間違ってもいない今の気持ちなのであります。
でわでわ。
いいなと思ったら応援しよう!
![kengpong](https://assets.st-note.com/production/uploads/images/14854764/profile_a792617419c49e17fcf3c146815b3e13.jpg?width=600&crop=1:1,smart)