幾種分析器的差別展現:html
學習了birdshover的博客。學習
private void button3_Click(object sender, EventArgs e) { string testwords = "我是中國人,I can speak chinese!"; List<Analyzer> analysis = new List<Analyzer>() { new KeywordAnalyzer(), new SimpleAnalyzer(), new StandardAnalyzer(Version.LUCENE_CURRENT), new StopAnalyzer(Version.LUCENE_CURRENT), new WhitespaceAnalyzer() }; //SimpleAnalyzer simple = new SimpleAnalyzer(); //StandardAnalyzer simple = new StandardAnalyzer(Version.LUCENE_CURRENT); //WhitespaceAnalyzer 僅僅是去除空格,對字符沒有lowcase化,不支持中文; 而且不對生成的詞彙單元進行其餘的規範化處理。 SimpleAnalyzer 功能強於WhitespaceAnalyzer, 首先會經過非字母字符來分割文本信息,而後將詞彙單元統一爲小寫形式。該分析器會去掉數字類型的字符。 for (int i = 0; i < analysis.Count; i++) { TokenStream ts = analysis[i].ReusableTokenStream("", new System.IO.StringReader(testwords)); ITermAttribute termAtt = ts.GetAttribute<ITermAttribute>(); //TermAttribute termAtt = (TermAttribute)ts.GetAttribute<ITermAttribute>(); string message = ""; while (ts.IncrementToken()) { message += termAtt.Term + "-"; } MessageBox.Show(analysis[i].GetType().ToString() + ":" + message); ts.Close(); } }
關於Token, TokenStream, Tokenizer, Analyzer,轉載自http://blog.csdn.net/wxwzy738/article/details/8098712,原文地址:http://ybzshizds.iteye.com/blog/562794spa
Token: 若是一個字段被token化,這表示它通過了一個可將內容轉化爲tokens串的分析程序。 Token是創建索引的基本單位,表示每一個被編入索引的字符。 在token化的過程當中,分析程序會在使用任何轉換邏輯(例如去掉 "a」 或 "the" 這類停用詞,執行詞幹搜尋,將無大小寫區分的全部文字轉換成小寫等)的同時,抽取應被編入索引的文本內容。因爲和字段相關的內容減小到只剩核心元素,所以,索引做爲與某個字段相關的文字內容,它的規模也被縮小了。只有被token化的字段也將被編入索引的狀況下才有意義。 對Akamai.com來講,「標題」被token化,因此Lucene不用搜尋如 "a" 或 "the" 這類單詞。.net
TokenStream是用來走訪Token的iterator(迭代器) code
Tokenizer繼承自TokenStream,其輸入爲Readerhtm
TokenFilter繼承自TokenStream,其做用是用來完成對TokenStream的過濾操做,譬如
去StopWords,將Token變爲小寫等blog
Analyzer就是一個TokenStream工廠 繼承