利用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语句实现搜索

总的来说 功能还是比较实用也很简单

 

posted @ 2013-05-10 11:23  Mr.sha  阅读(796)  评论(5编辑  收藏  举报