2012-01-06 10 views
0

나는 Lucene.NET과 함께 작업하고 있습니다. 아시아 언어를 검색하는 방법에 대해 연구했습니다. 나는 StandardAnalyzer에서 CJKAnalyzer로 옮겼습니다.CJKAnalyzer/Tokenizer가 일본어 텍스트를 인식하지 못함

한국에서는이 기능이 정상적으로 작동하지만 (한국어는 StandardAnalyzer가 한국어로 잘 돌아 갔지만!) 중국어는 작동하지만 일본어 텍스트를 인식하는 프로그램을 아직 만들 수 없습니다.

는 아주 작은 예를 들어, 나는 다음 시도하고 데이터베이스에서 읽고, 거기에 몇 단어와 함께 작은 데이터베이스합니다 (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);    
     } 

. 그리고 읽기 : chineseWriter가 CJKAnalyzer와 단지 IndexWriter해진다

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(); 
     } 

을 전달하고, chineseAnalyzer 그냥 CJKAnalyzer입니다.

japanese가 작동하지 않는 이유에 대한 조언이 있으십니까? 내가 보내는 입력 공정 보인다

プ ー ケ ッ ト

내가 저장하지만, 그것을 읽을 수없는 것입니다. :(

편집 :이 검색어는 2 자보다 긴, 그것은 작동이 중지 같은 일본어로

편집 2 부 :.. I을 나는 중국이 정말로 하나가 작동하지 않습니다 ... 잘못 이제 문제가 접두사 검색을 사용하고있는 것을 보았습니다. 처음 2자를 검색하고 별표를 사용하면 작동합니다 .2가 넘어 가면 작동이 멈 춥니 다. 단어가 토큰 화되는 방식? 전체 용어를 검색하면 찾을 수 있습니다. Lucene.NET에서 CJK에 대한 접두사 검색을 사용하려면 어떨까요? * 작동하지만, 아무 것도 찾을 수 없습니다.

+0

Lucene.Net/Lucene.Net Contrib의 버전을 사용하고 있습니다. 방금 NuGet에서 사용할 수있는 패키지의 최신 버전을 사용하여 테스트했으며 사용자 입력에 따라 작동합니다. –

+0

@Jf Beaulac - 2.9 사용. – peteisace

+0

나는 귀하의 질문 중 하나에 대답 할 수 있습니다 :'푸켓'은 푸켓, 태국의 도시입니다. :)하지만 나는 다른 사람에게 대답 할 수 없다. –

답변

0

StandardTokenizer를 사용합니다. 일본어와 한국어 텍스트에 대해서도 3 자 또는 4자를 포함하는 단어를 토큰화할 수 있습니다. 그러나 한자에 대해서만 걱정할 수 있습니다. 한 번에 한 문자 씩 중국어를 토큰 화합니다.

관련 문제