几种分析器的差别展现: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工厂 继承