ルールベースで表記揺れを解消するPythonライブラリ「yurenizer」を作成しました
テキストデータを扱う際、同じ意味の言葉でも「パソコン」「パーソナルコンピュータ」「パーソナル・コンピュータ」など、様々な表記が混在することがあります。この表記揺れは、テキスト分析やデータの正規化を難しくする要因の1つです。
今回、この表記揺れを解消できるPythonライブラリ「yurenizer(ユレナイザー)」を作成しましたので紹介します。
yurenizerはSudachi同義語辞書を活用し、柔軟な設定で日本語テキストの正規化を実現できます。
またLLMなどを使うのではなく、完全にルールベースでの実装となっています。
デモ
実際の動作を確認したい方は、以下のWebデモをお試しください。テキストを入力するだけで、すぐに表記揺れの統一を体験できます。
GitHubリポジトリ
GitHubのリポジトリはこちらになります。
yurenizerの特徴
-
表記揺れを簡単に統一
「パソコン」「パーソナルコンピュータ」などの揺れを1つに統一できます。 -
Sudachi同義語辞書を活用
オープンソースの同義語辞書を採用し、高品質な正規化を実現。 -
柔軟な設定が可能
統一ルールや正規化範囲を細かく指定することができます。 -
カスタム辞書対応
ユーザー自身の同義語辞書を追加することで、独自の正規化ルールを構築可能。
導入方法
yurenizerはPyPIからインストールできます。
pip install yurenizer
使用例
基本的な使い方
from yurenizer import SynonymNormalizer
normalizer = SynonymNormalizer(synonym_file_path="path/to/synonyms.txt")
text = "「パソコン」は「パーソナルコンピュータ」の「synonym」です。"
print(normalizer.normalize(text))
# 出力: 「パーソナルコンピューター」は「パーソナルコンピューター」の「シノニム」です。
設定をカスタマイズする場合
NormalizerConfigを使用することで、正規化のルールを細かく制御できます。
以下の設定では、「アルファベットの略語」のみを正規化しているので、「JR東」はそのままですが、「JR-East」は「東日本旅客鉄道」に正規化されています。
from yurenizer import SynonymNormalizer, NormalizerConfig
text = "「東日本旅客鉄道」は「JR東」や「JR-East」とも呼ばれます"
config = NormalizerConfig(
taigen=True,
yougen=False,
expansion="from_another",
unify_level="lexeme",
other_language=False,
alias=False,
old_name=False,
misuse=False,
alphabetic_abbreviation=True, # アルファベットの略語のみを正規化する
non_alphabetic_abbreviation=False,
alphabet=False,
orthographic_variation=False,
misspelling=False
)
print(f"出力: {normalizer.normalize(text, config)}")
# 出力: 「東日本旅客鉄道」は「JR東」や「東日本旅客鉄道」とも呼ばれます
カスタム辞書の利用
独自の正規化ルールを作成したい場合、カスタム辞書を作成して使用できます。
カスタム辞書の例
以下のような辞書を作成することで、「幽白」「ゆうはく」を「幽遊白書」に統一可能です。
{
"幽遊白書": ["幽白", "ゆうはく", "幽☆遊☆白書"]
}
使用方法
normalizer = SynonymNormalizer(custom_synonyms_file="path/to/custom_dict.json")
まとめ
yurenizerは以下のような場面で特に威力を発揮します。
- テキストマイニングの前処理
- 文書の校正・統一
- データクレンジング
- 自然言語処理のデータ準備
オープンソースで提供されており、Apache License 2.0のもとで自由に使用できます。形態素解析にはSudachiPyを使用し、信頼性の高い処理を実現しています。
ソースコードはGitHubで公開されていますので、詳細な使い方や最新の情報はそちらをご確認ください。
またまだ公開したばかりなので、エラーがある場合や、追加機能のご要望などある場合は記事中のコメントや、GitHubでのissue、PullRequestなどを出していただけると非常に嬉しいです。
ライブラリ名の由来
yurenizer(ユレナイザー)という名前は、「表記揺れ」の「揺れ」と「揺れない」の「ない」を組み合わせて命名しました。また、文章をトークン化する「tokenizer」との語呂合わせも意図しています。
(思いついたときは天才かと思いましたが...今はちょっと恥ずかしい...)
Discussion