문구가 가질 수있는 가능한 단어 수에 제한이 없으면 Lucene.NET과 Shingle Filter을 사용할 수 있습니다.
public class MyAnalyzer : Analyzer
{
public override TokenStream TokenStream(string fieldName, TextReader reader)
{
return new ShingleFilter(new LowerCaseFilter(new StandardTokenizer(Lucene.Net.Util.Version.LUCENE_29, reader)), 6);
}
}
이 유틸리티 방법을 사용하여 분석기를 실행할 수 있습니다.
public static IEnumerable<string> GetTerms(Analyzer analyzer, string keywords)
{
var tokenStream = analyzer.TokenStream("content", new StringReader(keywords));
var termAttribute = tokenStream.AddAttribute<ITermAttribute>();
var terms = new HashSet<string>();
while (tokenStream.IncrementToken())
{
var term = termAttribute.Term;
if (!terms.Contains(term))
{
terms.Add(term);
}
}
return terms;
}
일단 단어를 모두 검색하면 단어 목록과 교차합니다.
var matchingShingles = GetTerms(new MyAnalyzer(), "Here's my stuff I want to match");
var matchingPhrases = phrasesToMatch.Intersect(matchingShingles, StringComparer.OrdinalIgnoreCase);
이 방법은 정규식보다 훨씬 빠르며 단어 묶기를 존중합니다.
출처
2012-09-13 13:20:37
Naz
SQL 서버 – opewix
@ JesseJames의 인덱스와 같이 자신 만의 이진 트리 또는 균형 잡힌 트리 (페이지)를 구현하십시오. 죄송합니다.이 설명을 나에게 조금 더 설명해야 할 것입니다! –
여기에 좋은 예가 나와 있습니다. http://www.codeproject.com/Articles/18976/A-simple-Binary-Search-Tree-written-in-C – opewix