45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 电脑教程 > 阅读资讯:如何编写中文分词程序?

如何编写中文分词程序?

2016-09-06 17:52:34 来源:www.45fan.com 【

如何编写中文分词程序?

一、词库

词库大概有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--(词语,权重)对

如何编写中文分词程序?1publicstructChineseWordUnit
如何编写中文分词程序?如何编写中文分词程序?
2{
如何编写中文分词程序?
3privatestring_word;
如何编写中文分词程序?
4privateint_power;
如何编写中文分词程序?
5
如何编写中文分词程序?如何编写中文分词程序?6/**////<summary>
如何编写中文分词程序?如何编写中文分词程序?7///中文词语单元所对应的中文词。
如何编写中文分词程序?如何编写中文分词程序?8///</summary>
如何编写中文分词程序?9publicstringWord
如何编写中文分词程序?如何编写中文分词程序?
10{
如何编写中文分词程序?
11get
如何编写中文分词程序?如何编写中文分词程序?12{
如何编写中文分词程序?
13return_word;
如何编写中文分词程序?
14}

如何编写中文分词程序?15}

如何编写中文分词程序?16
如何编写中文分词程序?如何编写中文分词程序?17/**////<summary>
如何编写中文分词程序?如何编写中文分词程序?18///该中文词语的权重。
如何编写中文分词程序?如何编写中文分词程序?19///</summary>
如何编写中文分词程序?20publicintPower
如何编写中文分词程序?如何编写中文分词程序?
21{
如何编写中文分词程序?
22get
如何编写中文分词程序?如何编写中文分词程序?23{
如何编写中文分词程序?
24return_power;
如何编写中文分词程序?
25}

如何编写中文分词程序?26}

如何编写中文分词程序?27
如何编写中文分词程序?如何编写中文分词程序?28/**////<summary>
如何编写中文分词程序?如何编写中文分词程序?29///结构初始化。
如何编写中文分词程序?如何编写中文分词程序?30///</summary>
如何编写中文分词程序?如何编写中文分词程序?31///<paramname="word">中文词语</param>
如何编写中文分词程序?如何编写中文分词程序?32///<paramname="power">该词语的权重</param>
如何编写中文分词程序?33publicChineseWordUnit(stringword,intpower)
如何编写中文分词程序?如何编写中文分词程序?
34{
如何编写中文分词程序?
35this._word=word;
如何编写中文分词程序?
36this._power=power;
如何编写中文分词程序?
37}

如何编写中文分词程序?38}

如何编写中文分词程序?
如何编写中文分词程序?
如何编写中文分词程序?ChineseWordsHashCountSet.cs
//词库容器
如何编写中文分词程序?
如何编写中文分词程序?
如何编写中文分词程序?
如何编写中文分词程序?如何编写中文分词程序?
1/**////<summary>
如何编写中文分词程序?如何编写中文分词程序?2///记录字符串出现在中文字典所录中文词语的前端的次数的字典类。如字符串“中”出现在“中国”的前端,则在字典中记录一个次数。
如何编写中文分词程序?如何编写中文分词程序?3///</summary>
如何编写中文分词程序?4publicclassChineseWordsHashCountSet
如何编写中文分词程序?如何编写中文分词程序?
5{
如何编写中文分词程序?如何编写中文分词程序?
6/**////<summary>
如何编写中文分词程序?如何编写中文分词程序?7///记录字符串在中文词语中出现次数的Hashtable。键为特定的字符串,值为该字符串在中文词语中出现的次数。
如何编写中文分词程序?如何编写中文分词程序?8///</summary>
如何编写中文分词程序?9privateHashtable_rootTable;
如何编写中文分词程序?
10
如何编写中文分词程序?如何编写中文分词程序?11/**////<summary>
如何编写中文分词程序?如何编写中文分词程序?12///类型初始化。
如何编写中文分词程序?如何编写中文分词程序?13///</summary>
如何编写中文分词程序?14publicChineseWordsHashCountSet()
如何编写中文分词程序?如何编写中文分词程序?
15{
如何编写中文分词程序?
16_rootTable=newHashtable();
如何编写中文分词程序?
17}

如何编写中文分词程序?18
如何编写中文分词程序?如何编写中文分词程序?19/**////<summary>
如何编写中文分词程序?如何编写中文分词程序?20///查询指定字符串出现在中文字典所录中文词语的前端的次数。
如何编写中文分词程序?如何编写中文分词程序?21///</summary>
如何编写中文分词程序?如何编写中文分词程序?22///<paramname="s">指定字符串</param>
如何编写中文分词程序?如何编写中文分词程序?23///<returns>字符串出现在中文字典所录中文词语的前端的次数。若为-1,表示不出现。</returns>
如何编写中文分词程序?24publicintGetCount(strings)
如何编写中文分词程序?如何编写中文分词程序?
25{
如何编写中文分词程序?
26if(!this._rootTable.ContainsKey(s.Length))
如何编写中文分词程序?如何编写中文分词程序?
27{
如何编写中文分词程序?
28return-1;
如何编写中文分词程序?
29}

如何编写中文分词程序?30Hashtable_tempTable=(Hashtable)this._rootTable[s.Length];
如何编写中文分词程序?
31if(!_tempTable.ContainsKey(s))
如何编写中文分词程序?如何编写中文分词程序?
32{
如何编写中文分词程序?
33return-1;
如何编写中文分词程序?
34}

如何编写中文分词程序?35return(int)_tempTable[s];
如何编写中文分词程序?
36}

如何编写中文分词程序?37
如何编写中文分词程序?如何编写中文分词程序?38/**////<summary>
如何编写中文分词程序?如何编写中文分词程序?39///向次数字典中插入一个词语。解析该词语,插入次数字典。
如何编写中文分词程序?如何编写中文分词程序?40///</summary>
如何编写中文分词程序?如何编写中文分词程序?41///<paramname="s">所处理的字符串。</param>
如何编写中文分词程序?42publicvoidInsertWord(strings)
如何编写中文分词程序?如何编写中文分词程序?
43{
如何编写中文分词程序?
44for(inti=0;i<s.Length;i++)
如何编写中文分词程序?如何编写中文分词程序?
45{
如何编写中文分词程序?
46string_s=s.Substring(0,i+1);
如何编写中文分词程序?
47this.InsertSubString(_s);
如何编写中文分词程序?
48}

如何编写中文分词程序?49}

如何编写中文分词程序?50
如何编写中文分词程序?如何编写中文分词程序?51/**////<summary>
如何编写中文分词程序?如何编写中文分词程序?52///向次数字典中插入一个字符串的次数记录。
如何编写中文分词程序?如何编写中文分词程序?53///</summary>
如何编写中文分词程序?如何编写中文分词程序?54///<paramname="s">所插入的字符串。</param>
如何编写中文分词程序?55privatevoidInsertSubString(strings)
如何编写中文分词程序?如何编写中文分词程序?
56{
如何编写中文分词程序?
57if(!_rootTable.ContainsKey(s.Length)&&s.Length>0)
如何编写中文分词程序?如何编写中文分词程序?
58{
如何编写中文分词程序?
59Hashtable_newHashtable=newHashtable();
如何编写中文分词程序?

本文地址:http://www.45fan.com/dnjc/73281.html
Tags: 中文 简单 编写
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部