正規化
コンピュータサイエンスでは、 正規化 (時々 標準化または正規化 ) は 、「標準」、「ノーマル」、または標準形式に複数の可能な表現を有するデータに変換する処理です。これにより、異なる表現の等価性を比較したり、個別のデータ構造の数をカウントしたり、繰り返し計算を排除してさまざまなアルゴリズムの効率を改善したり、意味のある並べ替え順序を課したりできます。
使用例
ファイル名
ほとんどの場合、ファイルシステム内のファイルには複数のファイル名でアクセスできます。たとえば、Unixライクシステムでは、文字列/./を/に置き換えることができます。 C標準ライブラリでは、関数realpath()がこのタスクを実行します。ファイル名を正規化するためにこの関数によって実行される他の操作は、親ディレクトリを参照する/ ..コンポーネントの処理、複数のスラッシュのシーケンスの簡略化、末尾のスラッシュの削除、およびシンボリックリンクの解決です。
ファイル名の正規化は、コンピューターのセキュリティにとって重要です。たとえば、Webサーバーには、cgiディレクトリC:\ inetpub \ wwwroot \ cgi-binにあるファイルのみを実行できるという制限があります。このルールは、パスがC:\ inetpub \ wwwroot \ cgi-bin \で始まることを確認してから実行することで実施されます。ファイルC:\ inetpub \ wwwroot \ cgi-bin \ .. \ .. \ .. \ Windows \ System32 \ cmd.exeは最初はcgiディレクトリにあるように見えますが、..パス指定子を悪用してバックアップをたどりますcgi-binの外部でファイルを実行しようとするディレクトリ階層。 cmd.exeの実行を許可すると、ファイル名を最も単純な表現であるC:\ Windows \ System32 \ cmd.exeに正規化できなかったためにエラーが発生し、ディレクトリトラバーサルの脆弱性と呼ばれます。正規化されたパスを使用すると、ファイルを実行しないでください。
Unicode
Unicodeでは、多くのアクセント付き文字を複数の方法で表現できます。たとえば、 éは、Unicode文字U + 0065(LATIN SMALL LETTER E)の後に文字U + 0301(COMBINING ACUTE ACCENT)としてUnicodeで表すことができますが、事前構成文字U + 00E9(LATIN小文字の小文字E)。このようなグリフを含む文字列の可能な表現はすべて考慮する必要があるため、これにより文字列の比較がより複雑になります。これに対処するために、Unicodeは標準的な同等性のメカニズムを提供します。このコンテキストでは、正規化はUnicode正規化です。
Unicode規格、特にUTF-8の可変幅エンコーディングは、状況によっては正規化の追加の必要性を引き起こす可能性があります。つまり、標準では、UTF-8にはUnicode文字に対して有効なバイトシーケンスが1つしかありませんが、一部のバイトシーケンスは無効です。つまり、Unicode文字の文字列をUTF-8にエンコードしても取得できません。一部のずさんなデコーダーの実装では、無効なバイトシーケンスを入力として受け入れ、そのようなシーケンスの出力として有効なUnicode文字を生成する場合があります。そのようなデコーダーを使用する場合、いくつかのUnicode文字は、有効なバイトシーケンスと無効なバイトシーケンスの2つ以上のバイトシーケンスを効果的に持ちます。これにより、前のセクションで説明した問題と同様のセキュリティ問題が発生する可能性があります。したがって、後で無効なバイトシーケンスを許可するデコーダに渡されるUTF-8文字列にフィルタ(UTF-8で記述された正規表現など)を適用する場合、文字列をフィルタに渡す前に正規化する必要があります。 。このコンテキストでは、正規化は、すべての文字列文字をその単一の有効なバイトシーケンスに変換するプロセスです。正規化の代替方法は、無効なバイトシーケンスを含む文字列を拒否することです。
検索エンジンとSEO
Web検索および検索エンジン最適化(SEO)では、URL正規化は、複数のURLを持つ可能性があるWebコンテンツを処理します。同じWebコンテンツに複数のURLがあると、検索エンジンで問題が発生する可能性があります。特に、検索結果に表示するURLを決定する際に問題が発生する可能性があります。
例:
- http://wikipedia.com
- http://www.wikipedia.com
- http://www.wikipedia.com/
- http://www.wikipedia.com/?source=asdf
これらのURLはすべてWikipediaのホームページを指しますが、検索エンジンはそのうちの1つのみをURLの正規形式と見なします。
XML
Canonical XMLドキュメントは、Canonical XML仕様で定義されているXML Canonical形式のXMLドキュメントです。簡単に言えば、正規化はタグ内の空白を削除し、特定の文字エンコーディングを使用し、名前空間参照を並べ替えて冗長なものを削除し、XMLおよびDOCTYPE宣言を削除し、相対URIを絶対URIに変換します。
簡単な例は、次の2つのXMLスニペットです。
- node1 x = '1' a = "1" a = "2">データ/ node1> node2>データ/ node2>
- node1 a = "2" x = "1">データ/ node1> node2>データ/ node2>
最初の例では、最初のノードの終了タグに余分なスペースが含まれています。正規化された2番目の例では、これらのスペースが削除されています。 W3C正規化では、タグ間のスペースではなく、タグ内のスペースのみが削除されることに注意してください。
正規化の変更の完全な概要を以下に示します。
- ドキュメントはUTF-8でエンコードされています
- 解析する前に、入力時に#xAに正規化された改行
- 検証プロセッサによって属性値が正規化されます
- 文字および解析されたエンティティ参照が置き換えられます
- CDATAセクションは、文字コンテンツで置き換えられます
- XML宣言とドキュメントタイプ宣言は削除されます
- 空の要素は開始終了タグのペアに変換されます
- ドキュメント要素の外側および開始タグと終了タグ内の空白は正規化されます
- 文字コンテンツのすべての空白は保持されます(改行の正規化中に削除された文字を除く)
- 属性値の区切り文字は引用符(二重引用符)に設定されます
- 属性値と文字コンテンツの特殊文字は、文字参照に置き換えられます
- 余分な名前空間宣言が各要素から削除されます
- デフォルトの属性が各要素に追加されます
- xml:base属性の修正が実行されます
- 辞書編集順序は、各要素の名前空間宣言と属性に課されます
計算言語学
形態学および辞書編集では、補題は一連の単語の標準形です。英語では、例えば、 実行し 、 実行し 、 実行し、 実行している同じ語彙素の形態であるので、我々はそれらのいずれか、元を選択することができます。すべてのフォームを表すために実行します。 Unitexなどの語彙データベースは、この種類の表現を使用します。
語彙化とは、単語をその標準形式に変換するプロセスです。