%SIMILARITY
Synopsis
%SIMILARITY(field,document)
引数
field | その値を document テキストと比較するデータ列。データ型は %TEXT である必要があります。ビュー・フィールドにすることはできません。 |
document | field の値と一致させるアルファベット文字列。document は、区切り文字 (通常はスペース文字) で区切られた一連の単語で構成されます。 |
概要
%SIMILARITY 関数は、field の各値と、document に指定されたテキストとの間の類似性を示す数値を返します。0 (類似性なし) ~ 1 (同一) の範囲で小数値が返されます。返される値は、有効桁数が 19 で小数桁数が 18 の NUMERIC 型です。
%SIMILARITY は select-item として、または WHERE 節の述語に使用できます。%SIMILARITY を使用すると、例えば ORDER BY 節でランキングの順序を決定することができます。
%SIMILARITY は %Text 文字列または文字ストリーム・フィールドで使用できます。
文字列に %SIMILARITY を使用するには、%String プロパティを %Text に変更して、LANGUAGECLASS および MAXLEN プロパティ・パラメータを設定します。以下に例を示します。
Property MySentences As %Text(LANGUAGECLASS = "%Text.English",MAXLEN = 1000);
%TextOpens in a new tab プロパティには MAXLEN 値 (バイト) を指定する必要があります。
%SIMILARITY を文字ストリーム・フィールドで使用するには、ストリーム・フィールドが %Stream.GlobalCharacterSearchable タイプとして定義されていることが必要です。以下はその例です。
Property MyTextStream As %Stream.GlobalCharacterSearchable(LANGUAGECLASS = "%Text.English");
使用できる言語は、英語、フランス語、ドイツ語、イタリア語、日本語、ポルトガル語、およびスペイン語です。詳細は、"インターシステムズ・クラス・リファレンス" の (%SYS の) %TextOpens in a new tab パッケージ・クラスのドキュメントを参照してください。
field が %Text と %Stream.GlobalCharacterSearchable のいずれのデータ型でもない場合、システムは SQLCODE -309 エラーを生成します。
SIMILARITYINDEX
%SIMILARITY には、インデックス付きとインデックスなしの実装があります。%Text と %Stream.GlobalCharacterSearchable の両方について、オプションで SIMILARITYINDEX プロパティ・パラメータを設定できます。SIMILARITYINDEX を指定しないと、Caché はインデックスなしの (はるかに低速な) 実装を使用し、この実装ではドキュメントの任意の 32k チャンクの最大限の類似性を取得します。類似性メトリックはドキュメントの長さを考慮するため、この方法で計算される類似性は、ドキュメント全体について計算される類似性とは異なります (通常は大きくなります)。また、チャンクは重ならないため、チャンクの境界上に出現する類似項目は、ドキュメント全体に対する場合と比較して、それほど類似性に影響を与えないため、類似性の値が減少することになります。これとは対照的に、SIMILARITYINDEX をベースとする %SIMILARITY 値はチャンクに分割されない、ドキュメント全体に基づきます。パフォーマンスと一貫性を向上させるために、ストリーム上で %SIMILARITY を使用する必要がある場合は、類似性インデックスを設定することをお勧めします。
テキストが文字列の最大長を超えるストリームとして表され、テキストの検索で %SIMILARITY を非インデックス・フィールドに対して使用する場合、ドキュメントは文字列のチャンクに分割されます。非インデックス・フィールドが複数のチャンクの境界をまたぐ場合、それらは正しく参照されないことがあります。この問題を回避するには、インデックス・フィールドにのみ %SIMILARITY を使用します。文字列の最大長の詳細は、"Caché プログラミング入門ガイド" の “サーバ構成オプション” の章にある “長い文字列演算のサポート” のセクションを参照してください。
SIMILARITYINDEX の詳細は、%Library.TextOpens in a new tab クラスを参照してください。
類似性の分析
等値 (1.00000) が返された場合は、field 値と document 文字列が同じ単語から構成されていることを意味します。2 つの単語の語幹形式が同じ場合、それらは同一と見なされます (例 : dog = dogs、jump = jumped = jumping)。field 内の単語の順番と document 内の単語の順番は、まったく違っていてかまいません。既定では、この単語比較では大文字と小文字が区別されません。
2 つの同一文字列の類似性は、完全一致の 1 より少しだけ小さいか少しだけ大きい場合があります。
非常に高い類似性が返された場合は、通常、field 内の単語 (または他の区切られたデータ項目) のほとんどまたはすべてが、同じ語幹形式や順序ではなくても、document 内にあることを意味します。document テキストには、field に存在しない単語が含まれている場合もあります。document には存在するが field には存在しない単語は、document には存在しないが field には存在する単語よりは、類似性に与える影響は低くなります。field に存在する単語が document 内で 1 回か 2 回重複している場合は、通常、その類似性の度合は高くなりますが、document で何回も重複している場合は類似性の度合が下がります。1 文字または 2 文字から構成される単語は、長い単語と比較して、類似性の度合に対する影響は少なくなります。
%SIMILARITY 比較は、%SYS ネームスペースにある %Text.TextOpens in a new tab システム・クラスのクラス・パラメータで規定されます。これらのパラメータは、比較で大文字と小文字を区別するかどうか、および数字、句読点文字、複数語句の処理方法を指定します。
Caché では、一般の単語解析 (“ノイズ語” リスト) や語幹ルールを含む、特別な言語解析ルールを使用して類似性を決定することができます。使用できる言語は、英語、フランス語、ドイツ語、イタリア語、日本語、ポルトガル語、およびスペイン語です。
%SIMILARITY および %Text の処理の詳細は、"インターシステムズ・クラス・リファレンス" の %TextOpens in a new tab パッケージ・クラスのドキュメントを参照してください。
iKnow と iFind
Caché iKnow テキスト解析ツールおよび iFind テキスト検索ツールも類似性解析を提供します。これらの機能は %TextOpens in a new tab クラスからは完全に独立しています。これらは他のテキスト解析とは大きく異なる、はるかに高度なテキスト解析を提供します。
例
以下の例は、%SIMILARITY 文字列の値と一致する上位 10 個のレコードを返します。最も類似している一致レコードは、類似性の値が最も高いものになるため、ORDER BY 節はここでは DESC (降順) になります。
SELECT TOP 10 MySentences FROM Sample.MyTexts ORDER BY %SIMILARITY(MySentences,'the quick brown fox jumped') DESC
関連項目
-
%CONTAINS 演算子
-
%CONTAINSTERM 演算子
-
“Caché SQL の使用法”の “データベースの問い合わせ” の章の “フリー・テキスト検索を呼び出すクエリ”