♨️

ルールベースで表記揺れを解消するPythonライブラリ「yurenizer」を作成しました

2024/11/25に公開

テキストデータを扱う際、同じ意味の言葉でも「パソコン」「パーソナルコンピュータ」「パーソナル・コンピュータ」など、様々な表記が混在することがあります。この表記揺れは、テキスト分析やデータの正規化を難しくする要因の1つです。

今回、この表記揺れを解消できるPythonライブラリ「yurenizer(ユレナイザー)」を作成しましたので紹介します。

yurenizerはSudachi同義語辞書を活用し、柔軟な設定で日本語テキストの正規化を実現できます。
またLLMなどを使うのではなく、完全にルールベースでの実装となっています。

デモ

実際の動作を確認したい方は、以下のWebデモをお試しください。テキストを入力するだけで、すぐに表記揺れの統一を体験できます。
https://yurenizer.net/

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