ステミング

ステマーは、語根を推測する単純なプログラムで、クラスタリングの際に非常に役立ちます。例えば、よく知られたステミング・アルゴリズムである Porter ステマーは、「university」と「universities」が同じステムを共有し、同じステム・クラス に属していることを検出します。より高度なカスタマイズはすべてステム・クラスに基づいています。残念ながら、これらの単純なステミング・プログラムは完璧ではありません。例えば、Porter アルゴリズムでは、「universal」は「university」および「universities」と同じステムを持っているとされます。この見解は歴史的な根拠に基づくかもしれませんが、現在では意味的に関係ないものとなっています。また、Porter ステマーは、「theater」と「theatre」が同じステム・クラスに属すべきであることを認識しません。このような理由から、Watson™ Explorer Engine では Porter ステマーを英語のステマーとして使用しません。

柔軟性をさらに向上させて、多くのステマーの欠点に対処するために、Watson Explorer Engine では、stem エレメントを使用して特殊なステミング・ルールを追加することができます。

注: このセクションの例は、Watson Explorer Engine の英語のステマーとともに使用される Watson Explorer Engine の英語の知識ベースに既に組み込まれています。これらの例をユーザーが自分で入力する必要はありません。 ここに示された例では、カスタムのステミング・ルールを追加する必要があるいくつかのタイプの状況を紹介します。

以下について見てみましょう。

<stem this="universal" as="#universal" />
<stem this="universally" as="#universal" />

これにより、単語「universal」と「universally」はその独自のステム・クラス「#universal」にステミングされます。この例に示されているように、文字「#」を使用することにより、新規ステム・クラスを作成できます。

<stem this="universal" as="universal" />
<stem this="universally" as="universal" />

このコードにより、同じ効果を得ることができます。ただし、必ずしも新規ステム・クラスを作成しない点が異なります。これは、他の何らかの単語が既に「universal」にステミングされており、既に「universal」ステム・クラスのメンバーである場合があるためです。新規ステム・クラスを作成する場合は、必ず「#」表記を使用する必要があります。新規クラスを作成するのではなく、以下のように既存のクラスに単語を追加したい場合もあるでしょう。

<stem this="preparatory" as="prep" />

このルールは、「preparatory」が「prep」と同じステム・クラスに属するようにしますが、元のステム・クラスにある他の語 (例えば、「preparation」) には干渉しません。「preparatory」の元のステム・クラスを変更したい場合は、言い換えルールの作成を検討することができます。

ステミング・ルールは、XML で stem エレメントを使用することによってのみ追加できます。