Help us understand the problem. What is going on with this article?

Pythonで集合を使ったひらがなチェック

More than 1 year has passed since last update.

背景

初めて開発案件に携わったこともあり、自分もQiitaに投稿してみたくなった。
担当案件で外部ファイルから読み込んだ文字列が、全てひらがなで構成されているかチェックする必要があり、処理を書いたのでそのメモ。

判定の考え方

文字列を構成する文字の集合とひらがな全体の集合の共通集合を取り、その結果で判定する。

  • 結果が与えられた文字列の文字集合と同じ:ひらがなのみ
  • 結果が与えられた文字列の文字集合と異なる:ひらがな以外が混ざってる
def validate_given_word_is_consisted_of_hiragana(word):
    kana_set = {chr(i) for i in range(12353, 12436)}
    word_set = set(word)
    if word_set & kana_set != word_set:
        return '"{}"には平仮名以外の文字が含まれてます'.format(word)
    else:
        return '"{}"は平仮名だけで構成されています'.format(word)

なお、全てひらがなではなく、1文字でもひらがなを含む文字列かを判定したい場合、ひらがな全体の集合と文字列を構成する文字の集合の差集合を取り、その結果で判定するとよい。

  • 結果がひらがな全体の集合と同じ:ひらがなは含まれていない
  • 結果がひらがな全体の集合と異なる:ひらがなが含まれている
def validate_given_word_is_including_hiragana(word):
    kana_set = {chr(i) for i in range(12353, 12436)}
    word_set = set(word)
    if kana_set - word_set == kana_set:
        return '"{}"には平仮名は含まれていません'.format(word)
    else:
        return '"{}"には平仮名が含まれています'.format(word)

実際に動作確認してみたソース。

validate.py
def validate_given_word_is_consisted_of_hiragana(word):
    kana_set = {chr(i) for i in range(12353, 12436)}
    word_set = set(word)
    if word_set & kana_set != word_set:
        return '"{}"には平仮名以外の文字が含まれてます'.format(word)
    else:
        return '"{}"は平仮名だけで構成されています'.format(word)


def validate_given_word_is_including_hiragana(word):
    kana_set = {chr(i) for i in range(12353, 12436)}
    word_set = set(word)
    if kana_set - word_set == kana_set:
        return '"{}"には平仮名は含まれていません'.format(word)
    else:
        return '"{}"には平仮名が含まれています'.format(word)


if __name__ == "__main__":
    print(validate_given_word_is_consisted_of_hiragana('やきにく'))
    print(validate_given_word_is_consisted_of_hiragana('焼き肉'))

    print(validate_given_word_is_including_hiragana('焼き肉'))
    print(validate_given_word_is_including_hiragana('焼肉'))

上ソースの出力結果。

"やきにく"は平仮名だけで構成されています
"焼き肉"には平仮名以外の文字が含まれてます
"焼き肉"には平仮名が含まれています
"焼肉"には平仮名は含まれていません

参考

文字列の集合を作るときに参考にさせていただきました。
[python] いろいろな文字種のリストを作成

HideH
2018/4~から開発部署へ。使用する言語は主にPython。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away