pythonの正規表現で記号を省く

最近はpython3の日本語のワードクラウドで遊んでいます。
ワードクラウドでは、「」や「」、「」などの1文字の単語は意味を持ちません。
対象文字を省くために正規表現と通常ロジックを組み合わせます。

実現したいゴール

以下にやりたいことを示します。

    1文字の場合

  • ひらがなの削除
  • カタカナの削除
  • 数字の削除
  • 記号の削除(半角・全角とも)
    複数文字の場合

  • 数字のみ削除

ワードクラウドでは、Mecabなどの形態素解析を用いて単語を分かちするのが一般的です。
分かち後の1つの単語は、基本的には複数記号の場合は存在しません。
複数文字である=ある程度意味のある単語である
といった前提で行います。

例えば、Mecab後は「モンゴル800」や「-1.0」などは
「モンゴル, 800」
「-, 1, ., 0」
といった具合に分かちされます。

実装方法

正規表現の実現方法として、以下を確認しました。

  • 標準ライブラリであるreで文字として判定する
  • regexライブラリで判定する

今回は目指すべきゴールからregexライブラリを採用しました
用途に合わせて使い分けしてもよさそうです。

ライブラリ

regex (2019.4.12)を使います
以下のコマンドでインストールしてください。
pip3 install regex

実装コード

import regex

SINGLE_SIGN_PTN = regex.compile(r'\p{Han}{1}')

def match(word) :
    if not word :
        # None 空文字はFlase
        return False

    if len(word) > 1 :
        # 2文字以上の場合は数字かどうかのみ判定する
        is_not_num = not word.isnumeric()
        return is_not_num
    else :
        # 1文字の場合、漢字のみ有効とする
        if SINGLE_SIGN_PTN.match(word) :
            return True
        else :
            return False

標準ライブラリ使用時の注意

[一-鿐]
[一-龥]
を用いた場合、一部の漢字が抜け漏れします。

e.g. “々”

参考サイト

python標準API 正規表現リファレンス
[Python]正規表現を使って半角記号を除去する方法。
Pythonの正規表現の基本的な使い方
Qiita:正規表現での漢字マッチをUnicodeプロパティーを使って綺麗に書く方法 in Python

シェアする

  • このエントリーをはてなブックマークに追加

フォローする