tadanounigram のソースコード

import os

import pickle
from collections import namedtuple, Counter

MOJIBAN = [
    'アイウエオ',
    'カキクケコ',
    'サシスセソ',
    'タチツテト',
    'ナニヌネノ',
    'ハヒフヘホ',
    'マミムメモ',
    'ヤユヨ',
    'ラリルレロ',
    'ワヲンー'
]
'''
文字盤を表すリスト

Example:
    >>> MOJIBAN[0][0]
    'ア'
    >>> MOJIBAN[0][3]
    'エ'
    >>> MOJIBAN[3][0]
    'タ'
'''

ALL_KATAKANA = ''.join(MOJIBAN)
'''
文字盤に含まれる文字を連結したもの

Example:
    >>> for i in tadanounigram.ALL_KATAKANA:
    ...     print(i)
    ...







'''

_dir = os.path.dirname(__file__)
_path = os.path.join(_dir, 'lib', 'count_100000sentence.pickle')

with open(_path, 'rb') as f:
    _COUNT = pickle.load(f)

[ドキュメント]class Position(namedtuple('Position', ['x', 'y'])): ''' 文字盤の座標を表すクラス Attributes: x (int): 列番号 y (int): 行番号 Note: :py:func:`collections.namedtuple` で生成したクラス See Also: :py:func:`collections.namedtuple` ''' pass
[ドキュメント]class Frequency(namedtuple('Frequency',['target', 'total'])): ''' 文字の出現度数を表すクラス Attributes: target (int): 対象文字の出現度数 total (int): 全文字の出現度数 Note: :py:func:`collections.namedtuple` で生成したクラス See Also: :py:func:`collections.namedtuple` ''' pass
[ドキュメント]def mozi2position(mozi): ''' 文字から座標を求める関数。 引数として :data:`tadanounigram.MOJIBAN` や :data:`tadanounigram.ALL_KATAKANA` に含まれるものを想定。 Args: mozi (str): カタカナ1文字。 Returns: tadanounigram.Position: 文字盤の座標 Raises: ValueError: 引数が :data:`tadanounigram.MOJIBAN` や :data:`tadanounigram.ALL_KATAKANA` に含まれない文字の場合に発生。 ''' for idx, same_cons in enumerate(MOJIBAN): if not mozi in same_cons: continue cons = idx vow = same_cons.index(mozi) return Position(x=cons, y=vow) raise ValueError(f'「{mozi}」は文字盤に存在しません。')
[ドキュメント]def position2mozi(x, y): ''' 座標を引数に取り、文字盤上の文字を返す関数。 Args: x (int): 列番号 y (int): 行番号 Returns: str: 文字盤上の文字 Note: ``tadanounigram.MOJIBAN[x][y]`` と等価 See Also: :data:`tadanounigram.MOJIBAN` ''' return MOJIBAN[x][y]
[ドキュメント]def check_existence(mozi): ''' 文字を引数に取り、文字盤に存在するかどうかを判定する関数 Args: mozi (str): 文字 Returns: bool: 存在するなら ``True`` ,存在しなければ ``False`` を返す。 Note: ``mozi in tadanounigram.ALL_KATAKANA`` と等価 See Also: :data:`tadanounigram.ALL_KATAKANA` ''' if mozi in ALL_KATAKANA: return True else: return False
[ドキュメント]def frequency(mozi): ''' 文字を引数に取り、出現頻度を返す関数。 Args: mozi (str): 文字 Returns: tadanounigram.Frequency: 出現頻度 Raises: ValueError: :func:`tadanounigram.check_existence` が ``False`` だと発生 See Also: :func:`tadanounigram.check_existence` :class:`tadanounigram.Frequency` ''' if not check_existence(mozi): raise ValueError(f'「{mozi}」は文字盤に存在しません。') return Frequency( target = _COUNT[mozi], total=sum(_COUNT.values()) )
[ドキュメント]def probability(mozi): ''' 文字を引数に取り、出現確率を返す関数。 Args: mozi (str): 文字 Returns: float: 出現確率 Raises: ValueError: :func:`tadanounigram.check_existence` が ``False`` だと発生 See Also: :func:`tadanounigram.check_existence` :func:`tadanounigram.frequency` :class:`tadanounigram.Frequency` ''' freq = frequency(mozi) return freq.target / freq.total