やってみる

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

PythonでMeCabのCSVから指定した用言の活用形名や活用形を取得する

 クラス化して小奇麗にした。

成果物

コード

Precaution.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import csv
# MeCabのCSVから用言データを抽出する
class Precaution:
    def __init__(self, dic_dir: str=''):
        if dic_dir is None or (isinstance(dic_dir, str) and 0 == len(dic_dir)):
            self.__dic_dir = os.getcwd()
        else: self.__dic_dir = dic_dir
    def __csv_files(self):
        # 用言(動詞、形容詞、助動詞)
        return ('Verb.utf8.csv', 'Adj.utf8.csv', 'Auxil.utf8.csv')
    # 指定した用言(基本形)がもつ活用形名の一覧を返す。
    def get_conjugations(self, word):
        return self.__get_csv_rows(
            lambda row: word == row[10],
            lambda row: row[9])
    # 指定した用言(基本形)に一致するレコードの活用形を返す
    def get_conj_word(self, word, conj):
        return self.__get_csv_row(
            lambda row: word == row[10] and conj == row[9],
            lambda row: row[0])
    # 指定した用言(基本形)に一致するレコードの活用形名と活用形を返す
    def get_conj_words(self, word):
        return self.__get_csv_rows(
            lambda row: word == row[10],
            lambda row: {'conj': row[9], 'word': row[0]})
    def __get_csv_rows(self, lcond, lres):
        res = []
        for filename in self.__csv_files():
            reader = csv.reader(open(os.path.join(self.__dic_dir, filename), "r", encoding="utf-8"))
            for row in reader:
                if lcond(row): res.append(lres(row))
            if 0 < len(res): return res
        return res
    def __get_csv_row(self, lcond, lres):
        for filename in self.__csv_files():
            reader = csv.reader(open(os.path.join(self.__dic_dir, filename), "r", encoding="utf-8"))
            for row in reader:
                if lcond(row): return lres(row)
        return None
  • 実行パスに辞書ファイルが存在すること

実行

import Precaution
p = Precaution.Precaution()
print(p.get_conjugations('動く'))
print(p.get_conj_word('動く', '未然形'))
print(p.get_conj_words('動く'))
['基本形', '未然形', '未然ウ接続', '連用形', '連用タ接続', '仮定形', '命令e', '仮定縮約1']
動か
[{'conj': '基本形', 'word': '動く'}, {'conj': '未然形', 'word': '動か'}, {'conj': '未然ウ接続', 'word': '動こ'}, {'conj': '連用形', 'word': '動き'}, {'conj': '連用タ接続', 'word': '動い'}, {'conj': '仮定形', 'word': '動け'}, {'conj': '命令e', 'word': '動け'}, {'conj': '仮定縮約1', 'word': '動きゃ'}]

 用言の基本形「動く」に対する活用形名や、指定した活用形、それらの対応表を取得した。

所感

 これで変形の基礎はできた。あとは未然形など活用形の使い方を勉強すれば用言の変形ができるはず。

対象環境

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