最近は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