手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

编写简单的中文分词程序

来源:互联网 作者:west263.com 时间:2008-02-22
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

63 if (!_tempTable.ContainsKey(s))
64 {
65 _tempTable.Add(s,1);
66 }
67 else
68 {
69 _tempTable[s]=(int)_tempTable[s] 1;
70 }
71 }
72 }

ChineseParse.cs //分词器

1 /**//// <summary>
2 /// 中文分词器。
3 /// </summary>
4 public class ChineseParse
5 {
6 private static ChineseWordsHashCountSet _countTable;
7
8 static ChineseParse()
9 {
10 _countTable = new ChineseWordsHashCountSet();
11 InitFromFile("ChineseDictionary.txt");
12 }
13
14 /**//// <summary>
15 /// 从指定的文件中初始化中文词语字典和字符串次数字典。
16 /// </summary>
17 /// <param name="fileName">文件名</param>
18 private static void InitFromFile(string fileName)
19 {
20 string path = Directory.GetCurrentDirectory() @"\" fileName;
21 if (File.Exists(path))
22 {
23 using (StreamReader sr = File.OpenText(path))
24 {
25 string s = "";
26 while ((s = sr.ReadLine()) != null)
27 {
28 ChineseWordUnit _tempUnit = InitUnit(s);
29 _countTable.InsertWord(_tempUnit.Word);
30 }
31 }
32 }
33 }
34
35 /**//// <summary>
36 /// 将一个字符串解析为ChineseWordUnit。
37 /// </summary>
38 /// <param name="s">字符串</param>
39 /// <returns>解析得到的ChineseWordUnit</returns>
40 private static ChineseWordUnit InitUnit(string s)
41 {
42 Regex reg = new Regex(@"\s ");
43 string[] temp = reg.Split(s);
44 if (temp.Length!=2)
45 {
46 throw new Exception("字符串解析错误:" s);
47 }
48 return new ChineseWordUnit(temp[0],Int32.Parse(temp[1]));
49 }
50
51 /**//// <summary>
52 /// 分析输入的字符串,将其切割成一个个的词语。
53 /// </summary>
54 /// <param name="s">待切割的字符串</param>
55 /// <returns>所切割得到的中文词语数组</returns>
56 public static string[] ParseChinese(string s)
57 {
58 int _length = s.Length;
59 string _temp = String.Empty;
60 ArrayList _words = new ArrayList();
61
62 for(int i=0;i<s.Length;)
63 {
64 _temp = s.Substring(i,1);
65 if (_countTable.GetCount(_temp)>1)
66 {
67 int j=2;
68
69 for (;i j<s.Length 1&&_countTable.GetCount(s.Substring(i,j))>0;j )
70 {
71 }
72 _temp = s.Substring(i,j-1);
73 i = i j - 2;
74 }
75 i ;
76 _words.Add(_temp);
77 }
78
79 string[] _tempStringArray = new string[_words.Count];
80 _words.CopyTo(_tempStringArray);
81 return _tempStringArray;
82 }
83 }

四、测试

和海量分词演示程序对比测试:

Case 1:  新浪体育讯 在被尤文淘汰之后,皇马主帅博斯克拒绝接受媒体对球队后防线的批评,同时还为自己排出的首发阵容进行了辩护。“失利是全队的责任,而不仅仅是后防线该受指责,”博斯克说,“我并不认为我们踢得一塌糊涂。”“我们进入了半决赛,而且在晋级的道路上一路奋战。即使是今天的比赛我们也有几个翻身的机会,但我们面对的对手非常强大,他们踢得非常好。”“我们的球迷应该为过去几个赛季里我们在冠军杯中的表现感到骄傲。”博斯克还说。对于博斯克在首发中排出了久疏战阵的坎比亚索,赛后有记者提出了质疑,认为完全应该将队内的另一名球员帕文派遣上场以加强后卫线。对于这一疑议,博斯克拒绝承担所谓的“责任”,认为球队的首发没有问题。“我们按照整个赛季以来的方式做了,对于人员上的变化我没有什么可说的。”对于球队在本赛季的前景,博斯克表示皇马还有西甲联赛的冠军作为目标。“皇家马德里在冠军杯中战斗到了最后,我们在联赛中也将这么做。”

海量分词结果:

    新浪 体育 讯   在 被 尤文 淘汰 之后 , 皇马 主帅 博斯克 拒绝 接受 媒体 对 球队 后防线 的 批评 , 同时 还 为 自己 排出 的 首发 阵容 进行 了 辩护 。 “ 失利 是 全队 的 责任 , 而 不 仅仅 是 后防线 该 受 指责 , ” 博斯克 说 , “ 我 并 不 认为 我们 踢 得 一塌糊涂 。” “ 我们 进入 了 半决赛 , 而且 在 晋级 的 道路 上 一路 奋战 。 即使 是 今天 的 比赛 我们 也 有 几个 翻身 的 机会 , 但 我们 面对 的 对手 非常 强大 , 他们 踢 得 非常 好 。” “ 我们 的 球迷 应该 为 过去 几个 赛季 里 我们 在 冠军 杯中 的 表现 感到 骄傲 。” 博斯克 还 说 。 对于 博斯克 在 首发 中 排出 了 久 疏 战阵 的 坎比亚索 , 赛后 有 记者 提出 了 质疑 , 认为 完全 应该 将 队 内 的 另 一名 球员 帕文 派遣 上场 以 加强 后卫线 。 对于 这 一 疑 议 , 博斯克 拒绝 承担 所谓 的 “ 责任 ” , 认为 球队 的 首发 没有 问题 。 “ 我们 按照 整个 赛季 以来 的 方式 做 了 , 对于 人员 上 的 变化 我 没有 什么 可 说 的 。” 对于 球队 在 本 赛季 的 前景 , 博斯克 表示 皇马 还有 西 甲 联赛 的 冠军 作为 目标 。 “ 皇家 马德里 在 冠军 杯中 战斗 到 了 最后 , 我们 在 联赛 中 也 将 这么 做 。”

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!