1

まず、私たちが使用している Lucene.NET のバージョンは Sitecore 6.4.1 に同梱されていたため、最新ではなく、今までアナライザーとステミング (大きな間違い!)。

基本的に、インデックス時またはクエリ時のいずれかでステミングの何らかの形式を実装しようとしています (どちらが最適かについてのアドバイスを探しています)。私たちが抱えている主な問題は、ステミングに関するすべてのドキュメントが Java で書かれていることです。これを C# に移行するのに本当に苦労しています。誰かがソースの例を提供するか、この分野のリソースへのリンクを提供できることを願っています.

私たちの Lucene.NET のバージョンは非常に古いため、Snowball Analyzer を使用することはできないと思います (私たちのバージョンでは使用できません)。そのため、PorterStemFilter を検討しています。

Lucene をアップグレードせずに Stemming を機能させる方法について、どなたか支援やアドバイスをいただけますか?

敬具

スティーブ

4

3 に答える 3

1

Snowballは最高のafaikです。C、Java、...に実装があります。プロジェクトに独自のAnalyzer/Tokenfilterを構築するだけです。

于 2012-06-24T12:06:30.480 に答える
1

通常、TokenStream チェーンを構築する独自のアナライザーを作成します。インデックスと検索の時間にステミングする必要があります。

他のアナライザーと同じように使用するだけです。

アナライザーの例:

public class MyAnalyzer : Analyzer
{
    public override TokenStream TokenStream(string fieldName, TextReader reader)
    {
        return new PorterStemFilter(new StandardTokenizer(reader));
    }
}
于 2012-06-15T13:22:09.400 に答える
0

古いバージョンの Lucene を使用している場合は、PorterStemmerAlgorithm クラスの C# 実装のコピーを取得することを検討してください。

例: http://tartarus.org/~martin/PorterStemmer/csharp2.txt

これを使用して、インデックス時にキー フィールド値をステム化し、すべての単語のステム化されたバージョンをインデックスの「ステム化されたフィールド」に格納できます。

クエリ時に、同じクラスを使用して検索用語をステム化し、ステム化されたクエリで「ステム化されたフィールド」を検索できます。

このようにして、後のバージョンの Lucene で実装されたすべての特定のアナライザーをバイパスし、すべての単語の完全なバージョンを引き続き検索できます...

理想よりも少し手動ですが、仕事は完了します:-)

幸運を!

于 2012-06-28T11:02:13.350 に答える