Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

%SIMILARITY

フィールド値のテキストに対する類似性を示す数値を返します。

Synopsis

%SIMILARITY(field,document)

引数

field その値を document テキストと比較するデータ列。データ型は %TEXT である必要があります。ビュー・フィールドにすることはできません。
document field の値と一致させるアルファベット文字列。document は、区切り文字 (通常はスペース文字) で区切られた一連の単語で構成されます。

概要

%SIMILARITY 関数は、field の各値と、document に指定されたテキストとの間の類似性を示す数値を返します。0 (類似性なし) ~ 1 (同一) の範囲で小数値が返されます。返される値は、有効桁数が 19 で小数桁数が 18 の NUMERIC 型です。

%SIMILARITYselect-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 を使用する必要がある場合は、類似性インデックスを設定することをお勧めします。

Note:

テキストが文字列の最大長を超えるストリームとして表され、テキストの検索で %SIMILARITY を非インデックス・フィールドに対して使用する場合、ドキュメントは文字列のチャンクに分割されます。非インデックス・フィールドが複数のチャンクの境界をまたぐ場合、それらは正しく参照されないことがあります。この問題を回避するには、インデックス・フィールドにのみ %SIMILARITY を使用します。文字列の最大長の詳細は、"Caché プログラミング入門ガイド" の “サーバ構成オプション” の章にある “長い文字列演算のサポート” のセクションを参照してください。

SIMILARITYINDEX の詳細は、%Library.TextOpens in a new tab クラスを参照してください。

類似性の分析

等値 (1.00000) が返された場合は、field 値と document 文字列が同じ単語から構成されていることを意味します。2 つの単語の語幹形式が同じ場合、それらは同一と見なされます (例 : dog = dogs、jump = jumped = jumping)。field 内の単語の順番と document 内の単語の順番は、まったく違っていてかまいません。既定では、この単語比較では大文字と小文字が区別されません。

Note:

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 

関連項目

FeedbackOpens in a new tab