2011-11-14 5 views
1

Lucene.Net 2.9.2를 사용하고 있는데 커스텀 토크 나이저를 작성해야하지만 명확한 내용이없는 경우를 확인하고 싶습니다.Lucene.Net에서 키워드 토큰 화하기

이 문서는 제목, 키워드 및 내용과 함께 작성자, 날짜 등과 같이 필드로 저장된 메타 데이터로 구성됩니다. 문서는 소프트웨어 기술 문서이며 제목, 키워드 및/또는 내용에 '.Net', 'C++', 'C#'과 같은 구를 포함 할 수 있습니다.

Keyword 필드에 KeywordAnalyzer를 사용하고 Title 및 Content에 StandardAnalyzer를 사용합니다. 문서가 매우 길 수 있으므로 StopWords 및 LowerCase 등이 필요합니다.

'C#'을 검색하고 'CSharp', 'C# .Net'등도 검색하려는 동의어 사용자 지정 필터를 작성했습니다. 토크 나이저는 이미 '#' C++의 'C#'또는 '++'에서 'C'언어 참조와 혼동 될 수 있습니다.

제 생각에 토큰 화를 분기 할 필요가있는 제목과 내용을 인덱싱 할 때 현재 토큰이 키워드 구문 또는 동의어 중 하나인지 여부

이것이 최선의 방법입니까? 미리 많은 감사드립니다 :)

답변

1

WhitespaceTokenizer을 사용하고 KeywordMarkerFilter을 연결하여 일부 토큰을 '불가침'으로 표시하고 마침내 구두점 문자를 제거하는 필터를 제공 할 수 있다고 생각합니다. 어쩌면 Lucene.Net에 대한 지식이있는 사람이 뭔가 제안 할 것입니다. 예 : Solr에서 WordDelimiterFilter을 사용할 수 있습니다.

1)

+0

안녕 아르투르, 당신의 대답을 주셔서 감사합니다. KeywordMarkerFilter가 버전 3.1의 Java API에 도입되었다고 생각합니다. 현재는 2.9.2가 최신 버전이므로 .net과 함께 지원되지 않습니다. 그러나, 당신이 제안하는 생각은 내가 생각하고 즉. NET에서 사용자 지정 tokenizer 함께 모방입니다. 다시 한 번 감사드립니다 :) – eslsys

+0

네가 맞다. Lucene의 관점에서 질문에 답하고 있었지만 그럼에도 불구하고 도움이되기를 바랍니다. –

+0

Artur에게 감사합니다. 내 접근법의 잠재적 인 옵션을 좁히는 데 도움이되므로 분명 도움이됩니다. 다른 사람이 시점을 가질 경우를 대비하여 며칠을 열어 두겠습니다. 다시 한 번 감사드립니다 – eslsys

2

는 토큰 화의 정의는 아래에 언급 된 종류의 하나를 수행 할 수있다. Lucene.Net.Analysis.CharTokenizer 2). Lucene.Net.Analysis.Tokenizer

public class AlphaNumbericTokenizer : Lucene.Net.Analysis.CharTokenizer 
{ 
    public AlphaNumbericTokenizer (System.IO.TextReader input) : base(input) 
    { 
    } 
    protected override bool IsTokenChar(char c) 
    { 
     //TODO: Logic for identifying token or token separator 
     return char.IsLetterOrDigit(c); 
    } 
} 

를 참조하십시오, http://karticles.com/NoSql/lucene_custom_tokenizer.html

+0

이 문제를 해결하기 위해 약간 다른 경로로갔습니다. 블로그 게시물에 글을 올리고 솔루션 개요로 링크를 게시 할 것입니다. 답변 주셔서 감사합니다 vrluckyin :) – eslsys

관련 문제