只要您不介意限制可能的單詞數量,可以使用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