您的位置:首页 >> Web开发 >> ASP.NET >> ASP.Net技巧 >> 正文
ASP.Net技巧 RSS
 

编写简单的中文分词程序

http://www.rdxx.com 06年05月02日 01:20 网络 我要投稿

关键词: 中文分词 , 程序 , 分词 , 中文

几个月之前,在网上找到了一个中文词库素材(几百K),当时便想写一个分词程序了.我对汉语分词没有什么研究,也就凭自己臆想而写.若有相关方面专家,还请多给意见.

一、词库

词库大概有5万多词语(google能搜到,类似的词库都能用),我摘要如下:

地区    82
重要    81
新华社    80
技术    80
会议    80
自己    79
干部    78
职工    78
群众    77
没有    77
今天    76
同志    76
部门    75
加强    75
组织    75
第一列是词,第二列是权重.我写的这个分词算法目前并未利用权重.

二、设计思路

算法简要描述:

对一个字符串S,从前到后扫描,对扫描的每个字,从词库中寻找最长匹配.比如假设S="我是中华人民共和国公民",词库中有"中华人民共和国","中华","公民","人民","共和国"......等词.当扫描到"中"字,那么从中字开始,向后分别取1,2,3,......个字("中","中华","中华人","中华人民","中华人民共","中华人民共和","中华人民共和国",,"中华人民共和国公"),词库中的最长匹配字符串是"中华人民共和国",那么就此切分开,扫描器推进到"公"字.

数据结构:

选择什么样的数据结构对性能影响很大.我采用Hashtable _rootTable记录词库.键值对为(键,插入次数).对每一个词语,如果该词语有N个字,则将该词语的1,1~2,1~3,......1~N个字作为键,插入_rootTable中.而同一个键如果重复插入,则后面的值递增.

三、程序

具体程序如下(程序中包含权重,插入次数等要素,目前的算法并没有利用这些.可以借此写出更有效的分词算法):

ChineseWordUnit.cs //struct--(词语,权重)对


 1    public struct ChineseWordUnit
 2    {
 3        private string _word;
 4        private int _power;
 5
 6        /**//// <summary>
 7        /// 中文词语单元所对应的中文词。
 8        /// </summary>
 9        public string Word
10        {

上一页 下一页


 
 
标签: 中文分词 , 程序 , 分词 , 中文 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站