やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

PythonでMeCabのCSVを使い基本形から連用形へと変形させる

 変形の第2弾。

成果物

準備

 カタカナをひらがなに変換するため。

pip3 install jaconv
  • 実行パスに辞書ファイルが存在すること

コード

Renyou.py

 連用形の一例に変形する。

import re
import jaconv
# 連用形。動詞の前に来る
class Renyou:
    def __init__(self):
        self.__re_conj_conn = re.compile(r'^連用(.+)接続$')
    # 「方」
    def get_howto(self, row):
        if '連用形' == row[9]: return row[0] + '方'
        else: return None
    # 「様」
    def get_state(self, row):
        if '連用形' == row[9]: return row[0] + '様'
        else: return None
    # 「始める」
    def get_start(self, row):
        if '連用形' == row[9]: return row[0] + '始める'
        else: return None
    # 「終わる」
    def get_end(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

run.py

 いくつかの語を変形する。

#!/usr/bin/env python3
# coding: utf8
import Precaution
import Renyou

def prints(words):
    for word in words:
        if word is not None: print(word)
def get_renyous(row):
    return (renyo.get_howto(row),
            renyo.get_state(row),
            renyo.get_start(row),
            renyo.get_end(row),
            renyo.get_conn(row))

p = Precaution.Precaution()
renyo = Renyou.Renyou()
words = ['走る','押す','愛する','見る','食べる','来る','悲しい','ござる']
for word in words:
    print('===== {} ====='.format(word))
    rows = p.get(word)
    for row in rows:
        prints(get_renyous(row))

実行結果

./run.sh
===== 走る =====
走り方
走り様
走り始める
走り終わる
走った
===== 押す =====
押し方
押し様
押し始める
押し終わる
===== 愛する =====
===== 見る =====
見方
見様
見始める
見終わる
===== 食べる =====
食べ方
食べ様
食べ始める
食べ終わる
===== 来る =====
来方
来様
来始める
来終わる
来り方
来り様
来り始める
来り終わる
来った
来方
来様
来始める
来終わる
===== 悲しい =====
悲しかった
悲しくて
悲しくって
悲しゅうござい
悲しゅぅござい
===== ござる =====
ござい方
ござい様
ござい始める
ござい終わる
ござった
  • 愛する系がない。愛し方とか出て欲しかったのに
  • 来る系も変なのが混ざってる。来り始めるとかおかしい
  • 助動詞ござるがおかしい。末尾に付与するのは動詞のみにすべきか

所感

 これで「走る」と入力したら「走り方」が出せる。ハウツー本のタイトルみたいなのを作れそう。「運動会で絶対に1位をとれる走り方」みたいな。それができれば、売れるタイトルBOTとか作れそう。でも「運動会で絶対に1位をとれる方法」にして「相手の弁当に下剤を仕込む」みたいな答えを出すゲスBOTのほうが欲しい。もはや形態素解析の領域ではないか。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux