written by 高橋光輝
本連載のもとになった同人誌の内容は、以下のURLから閲覧が可能です。(編集部)
https://sunpro.io/c89/pub/hakatashi/introduction
記事本文掲載のシェルスクリプトマガジンvol.45は以下リンク先でご購入できます。
1 2 3 4 5 6 7 8 9 10 11 |
all: tanka-dummy-vectors.txt tanka-takuboku-vectors.txt tanka-takuboku-vectors.txt: infer_takuboku_vectors.py tanka-tokenized.csv $(AOZORA2VEC_MODELS) $(PYTHON) infer_takuboku_vectors.py < tanka-tokenized.csv > "$@" tanka-dummy-vectors.txt: infer_dummy_vectors.py dummy-tan ka.txt $(AOZORA2VEC_MODELS) $(PYTHON) infer_dummy_vectors.py < dummy-tanka.txt > "$@" dummy-tanka.txt: marcov-dict.json generate_dummy_tanka.py $(PYTHON) generate_dummy_tanka.py < marcov-dict.json > "$@" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# -*- coding: utf-8 -*- import sys import json import random # 標準入力から単語データを読み取る marcov_json = sys.stdin.read() marcov = json.loads(marcov_json) token_dict = marcov['token_dict'] tokens = list(token_dict.keys()) # 1000個のダミーデータを生成する for i in range(1000): # 1データに含まれる単語の数は12個から23個 token_count = random.randint(12, 23) base_forms = [] # 単語をランダムに選択 for j in range(token_count): token = random.choice(tokens) base_form = token_dict[token][3] base_forms.append(base_form) # 出力 print(' '.join(base_forms)) |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ make dummy-tanka.txt python3 generate_dummy_tanka.py < marcov-dict.json > "dummy-tanka.txt" $ head dummy-tanka.txt 過つ 聞く 置く 覚える 帽 せる 温かい 情け 泊まる 痛む 優しい 共産 板 帰り来る 焼く 迫る 切り通し 晴れやか 其 恋人 目 働く 消す ひょっと 来し方 逸早い 皿 埋もれる 等 毟る 過ぎ行く 知る 付く 一日 出す 働く 宗教 山間 襟 乾き 悪 盗み聞く 沈む 英語 獣 真似 砂山 彼の 喞筒 列車 矛 紅 句 左 餅 扠 ふと 霙 叱る 青い 得る 満足 怖い 煩い 屑 好く 眺める 冷や冷や 霜 降る 温かい 平復 ちょう 肌 涼しい さ迷う 遂げる 刀 束ね 弟 躍り出でる 演習 見す 淡雪 き 書く 火事 鳴く 会う 呼吸 遊船 残る 見える 羨ましい 隠れる 赤ん坊 喉 水面 好く 猶 羽子 安 閉じる 空く 踊る 博学 邦人 長い 大方 平気 浸す 夜昼 隣り 森林 持つ 襟 かほど 得る 乱れる 送る 頭 買う 術 褒める 求める 訳 珍しい 痺れ 居る 一途 飛び去る 生命 小児 揺籃 吸う 覚える 快い 青い 休む 浮かぶ たり 処する 無くなる 時雨 浸る 初夜 寒い 向かう 降る 砂 嫁 二 唱える 易者 空地 の 三 砲兵 ふやける 我が 眠り 悲しみ 次 よ 罵る 来たる 謀反 甲斐 張り替える 思い出 世渡り 日光 我が 膨れる 乗る 殴る 幾 抜く 怒る |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# -*- coding: utf-8 -*- import csv import sys import gensim # doc2vecのモデルを読み込む model = gensim.models.doc2vec.Doc2Vec.load('aozora2vec-iter50.model') # 標準入力から空白区切りのテキストを読み取る for tokens in csv.reader(iter(sys.stdin.readline, ''), delimiter=' '): # doc2vecを用いて特徴ベクトルを推定する vector = model.infer_vector(tokens) # 出力 print(' '.join(list(map(str, vector)))) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# -*- coding: utf-8 -*- import sys import csv import json import gensim # doc2vecのモデルを読み込む model = gensim.models.doc2vec.Doc2Vec.load('aozora2vec-iter50.model') # 標準入力からCSVを読み取る for row in csv.reader(iter(sys.stdin.readline, '')): [tanka, tokens_json] = row tokens = list(map(lambda l:l[3], json.loads(tokens_json))) # doc2vecを用いて特徴ベクトルを推定する vector = model.infer_vector(tokens) # 出力 print(' '.join(list(map(str, vector)))) |