利用Lucene.Net 实现简单分词
多说无益 直接上代码
View Code
1 /// <summary> 2 /// 分词通用方法(自动组合条件语句) 3 /// </summary> 4 /// <param name="text">需要分词的文本</param> 5 /// <param name="Field">需要分词的数据库字段名</param> 6 /// <returns>返回sql条件语句</returns> 7 public static string TestWhitespaceToken(string text, string Field) 8 { 9 StringBuilder strSql = new StringBuilder(); 10 string t1 = ""; 11 int i = 0; 12 Analyzer analyzer = new Lucene.China.ChineseAnalyzer(); 13 StringReader sr = new StringReader(text); 14 TokenStream stream = analyzer.TokenStream(null, sr); 15 long begin = System.DateTime.Now.Ticks; 16 Token t = stream.Next(); 17 while (t != null) 18 { 19 t1 = t.ToString(); //显示格式: (关键词,0,2) ,需要处理 20 t1 = t1.Replace("(", ""); 21 char[] separator = { ',' }; 22 t1 = t1.Split(separator)[0]; 23 if (i == 0) 24 { 25 strSql.Append(" and charindex('" + t1 + "'," + Field + ")>0 "); 26 } 27 else 28 { 29 strSql.Append(" or charindex('" + t1 + "'," + Field + ")>0 "); 30 } 31 t = stream.Next(); 32 i++; 33 } 34 if (i==0) 35 { 36 strSql.Append(" and charindex('" + text + "'," + Field + ")>0 "); 37 } 38 else 39 { 40 strSql.Append(" or charindex('" + text + "'," + Field + ")>0 "); 41 } 42 43 return strSql.ToString(); 44 }
只是简单的利用Lucene.Net实现分词功能,词库(sDict.txt,sNoise.txt)需要自己维护 (网上都有,可以直接下载就行不过文件名必须相同)
实现了过滤的功能 打个比方 比如输入 张三是中国人
分词后则是 张三/中国人
将多余的字符过滤 只提取词库内的文本
分词后利用sql语句实现搜索
总的来说 功能还是比较实用也很简单