6

私は Unicode について多くのことを読んできましたが、正規化とそのさまざまな形式について非常に混乱したままです。要するに、私は PDF ファイルからテキストを抽出し、セマンティック テキスト分析を実行するプロジェクトに取り組んでいます。

簡単な python スクリプトを使用してテキストをうまく抽出できましたが、今度はすべての同等の正字法文字列が 1 つ (そして 1 つだけ) の表現を持つようにする必要があります。たとえば、'fi' 活字合字は 'f' と 'i' に分解する必要があります。

Python のunicodedata.normalize関数には、Unicode コード ポイントを正規化するためのアルゴリズムがいくつか用意されているようです。誰かが次の違いを説明してもらえますか:

  • NFC
  • NFKC
  • NFD
  • NFKD

関連するウィキペディアの記事を読みましたが、あまりにも不透明すぎて、私の弱い脳には理解できませんでした。誰かがこれをわかりやすい英語で親切に説明してくれませんか?

また、自然言語処理プロジェクトに最適な正規化方法を推奨していただけますか?

4

1 に答える 1

6

é のような文字は、1 つの文字として、または通常の文字eとアクセント (分音符号) を加えた 2 つの文字のシーケンスとして書くことができます。正規化は、そのような選択肢の中から一貫して選択し、一貫した方法で複数の分音記号を並べます。

合字を処理する必要があるため、合字を正規化する「互換性 (デ) コンポジション」、NFKD または NFKC を使用する必要があります。合成または分解された形式を使用することはおそらく問題ありませんが、ロッシー マッチングも行いたい場合 (たとえば、ユーザーがプレーンeを入力した場合でもéと一致する場合)、互換性分解 NFKD を使用して、緩いマッチングのために分音記号を破棄できます。

于 2012-06-27T23:28:23.617 に答える