2012-01-06 2 views
0

私はLucene.NETで作業しています。その後、アジア言語を検索する方法を研究しました。私はStandardAnalyzerからCJKAnalyzerに移りました。CJKAnalyzer/Tokenizerに日本語のテキストを認識させることができません

韓国では正常に動作しますが(StandardAnalyzerは韓国語でOKですが)、中国語ではありませんが、日本語のテキストを認識するためのプログラムがまだありません。

はちょうど非常に小さな例として、私は、試してみて、データベースから読み込まれ、その中にいくつかの単語を持つ小さなデータベース(CJKAnalyzerを使用)を書く:

書き込みのためだ
public void Write(string text, AnalyzerType type) 
     { 
      Document document = new Document(); 

      document.Add(new Field(
       "text", 
       text, 
       Field.Store.YES, 
       Field.Index.ANALYZED)); 

      IndexWriter correct = this.chineseWriter; 
      correct.AddDocument(document);    
     } 

。そして読書のために:

public Document[] ReadMultipleFields(string text, int maxResults, AnalyzerType type) 
     { 
      Analyzer analyzer = this.chineseAnalyzer; 

      QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", analyzer); 
      var query = parser.Parse(text);       

      // Get the fields. 
      TopFieldCollector collector = TopFieldCollector.create(
       new Sort(), 
       maxResults, 
       false, 
       true, 
       true, 
       false); 

      // Then use the searcher.    
      this.searcher.Search(
       query, 
       null, 
       collector); 

      // Holds the results 
      List<Document> documents = new List<Document>(); 

      // Get the top documents. 
      foreach (var scoreDoc in collector.TopDocs().scoreDocs) 
      { 
       var doc = this.searcher.Doc(scoreDoc.doc); 
       documents.Add(doc); 
      } 

      // Send the list of docs back. 
      return documents.ToArray(); 
     } 

chineseWriterはちょうどCJKAnalyzerとIndexWriterが渡され、そしてchineseAnalyzerはちょうどCJKAnalyzerができます。

日本語がうまくいかない理由についてのアドバイスはありますか?私が送った入力は、公正なようだ:

プーケット

私は保存するものですが、それを読み取ることができません。 :(

編集:私は間違っていた...中国は実際に動作しないか:それは検索語が長い2つの文字よりも、それは動作を停止し、日本と同じ

EDIT PART 2:。。私は最初の2文字を検索してアスタリスクを使用すると、それが動作します.2を超えるとすぐに動作しなくなります。 CJKのためにLucene.NETでプレフィックス検索を使用する方法はありますか?*は動作しますが、プーケは何も見つかりません。

+0

Lucene.Net/Lucene.Net Contribのどのバージョンを使用していますか。私はちょうどNuGetで利用可能なパッケージの最新バージョンを使ってテストしました。あなたの入力でうまく動作します。 –

+0

@Jf Beaulac - 2.9を使用しています。 – peteisace

+0

私はあなたの質問に答えることができます。プーケットはプーケットです。 :)しかし、私は他に答えることはできません。 –

答えて

0

私はStandardTokenizerを使用します。日本語や韓国語のテキストでは、3文字または4文字のトークンを使用することができます。しかし、漢字は心配するだけです。それは一度に1文字ずつ中国語をトークン化します。

関連する問題