ついに変形の第1弾ができた。
成果物
準備
カタカナをひらがなに変換するため。
pip3 install jaconv
- 実行パスに辞書ファイルが存在すること
- 以前作成したヤツ
コード
Precaution.py
CSVから指定した基本形のレコードを抽出する。
class Precaution: ... # 指定した用言(基本形)に一致するレコードを丸ごと返す def get(self, word): return self.__get_csv_rows( lambda row: word == row[10], lambda row: row) ...
Mizen.py
未然形に変形する。
import re import jaconv class Mizen: def __init__(self): self.__re_conj_conn = re.compile(r'^未然(.+)接続$') # 「ない」 def get_not(self, row): if '未然形' == row[9] or '未然特殊' == row[9]: return row[0] + 'ない' else: return None # 「ず」 def get_not_old(self, row): if '未然形' == row[9]: return row[0] + 'ず' else: return None # 「未然ウ接続」など def get_conn(self, row): m = self.__re_conj_conn.match(row[9]) if m: return row[0] + jaconv.kata2hira(m.group(1)) else: return None # 「ん」 def get_not_special(self, row): if '未然特殊' == row[9]: return row[0] + 'ねぇ' else: return None # 「れる/られる」受け身・可能・自発・尊敬 def get_reru(self, row): if '未然形' == row[9]: if '五段' in row[8] or 'サ変' in row[8]: return row[0] + 'れる' if '一段' in row[8] or 'カ変' in row[8]: return row[0] + 'られる' raise Exception('れる/られるパターン外: {}, {}'.format(row[8], row)) else: return None
run.py
いくつかの語を変形する。
#!/usr/bin/env python3 # coding: utf8 import Precaution import Mizen p = Precaution.Precaution() mizen = Mizen.Mizen() def prints(words): for word in words: if word is not None: print(word) words = ['走る','押す','愛する','見る','食べる','来る', '悲しい', 'ござる'] for word in words: print('===== {} ====='.format(word)) rows = p.get(word) for row in rows: mizens = (mizen.get_not(row), mizen.get_not_old(row), mizen.get_conn(row), mizen.get_not_special(row), mizen.get_reru(row)) prints(mizens)
実行結果
./run.sh
===== 走る ===== 走らない 走らず 走られる 走んない 走んねぇ 走ろう ===== 押す ===== 押さない 押さず 押される 押そう ===== 愛する ===== 愛しない 愛しず 愛しれる 愛しよう 愛しょう 愛せれる ===== 見る ===== 見ない 見ず 見られる 見よう ===== 食べる ===== 食べない 食べず 食べられる 食べよう ===== 来る ===== 来ない 来ず 来られる 来よう 来らない 来らず 来られる 来んない 来んねぇ 来ろう 来ない 来ず 来られる 来よう ===== 悲しい ===== 悲しからぬ 悲しかろう ===== ござる ===== ござらない ござらず ござられる ござんない ござんねぇ ござろう
ポイントだった「れる/られる」は大体うまくいっているっぽい。ただ、いくつか気になるところがある。
走られる
って違和感あるのだが。走れる
はラ抜き言葉だったのか? それとも自動詞だから?愛しない
でなく愛さない
では?愛しず
でなく愛さず
では?来る
系がおかしい- なんか重複してる
来らない
でなく来ない
では?来んない
っておかしい。未然特殊
がなんなのかよくわかってない。末尾がん
としか
- 形容詞
悲しい
が悲しくない
にならない - 助動詞
ござる
がござらぬ
、ござらん
にならない
課題
- おかしいヤツの原因調査
- 表現の追加
れる
/られる
の否定形れない/られない
があってもいいか- 可能を意味する
〜ことができる
があってもいいか
- 他の活用形も調査して変形ツールを作る
- CSVからデータを抽出するクラスを作る
所感
これで「走る」と入力したら「走らない」という否定形を返してくれる。嫌なヤツBOTが作れそう。
でも「走る」と入力したら「歩く」とは返してくれない。対義語や類語を返してくれるとなお生意気なBOTが作れそうなのだが。それは別の辞書を作らないと不可能。
あるいはもっと普通に「来る」を「いらっしゃる」「おいでになさる」に変換してくれると嬉しい。「食べる」を「召し上がる」に。尊敬語、謙譲語、丁寧語への変換ならネタでなく普通に使えそう。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13 ※
- bash 4.4.12(1)-release ※
- Python 3.5.3
- SQLite 3.29.0 ※
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux