⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 说明.txt

📁 一个用java语言编写的中文文本分词算法
💻 TXT
字号:
近日,对中文分词算法研究,用java写了一个分词程序,在此与大家一起分享。由于本人精力有限,希望大家能把在实际运行过程中出现的分词不准确的部分回馈给我,也便于进一步的完善。下面简要描述设计思路和算法。

1.       分词的算法

分词算法采用的是最大匹配算法,按从左至右正向最大匹配和从右到左反向最大匹配,当两种分词结果不一致时,按最少切分原则,取切分词数最少的一种,如果两种分词结果切分的词数一样,取反向最大匹配作为分词的结果,这种分词的结果准确率在99%以上,可以满足一般的应用和需求。

2.       程序设计

建立一个字典,字典由多个子字典组成,每个子字典的单词字数相同且已经排序,以独立文件的形式存储于磁盘,字典支持新单词的导入。对于要一段文字,首先过滤一次,把源文件按标点、英文字母、数字、其它符号分解成一个List,list中若包含中文的为要分词的最小单位,如:你好,你是哪的ABC人,过滤的结果为 你好/,/你是哪的/ABC/人,要切分的部分有 你好 你是哪的 人 三部分,然后按分词算法对这三个部分切分。

3.       使用方法

首先导入词库,词库是纯文本文件,每个单词一行,然后可以开始分词,具体运行参见com.xq.Execute.java。词库我用的是“中文词库素材”,大家可以在网上搜到,在此非常感谢“中文词库素材”的作者。

4.       测试

没有字典时,导入“中文词库素材3.2\词库\标准词库\去除拼音字母的标准词库213663词条.TXT”这个文件用时17890毫秒,导入单词数212512,z在这个字典上再导入“中文词库素材3.2\词库\专业扩充词库\区县地名(大词库不包含).txt”用时500毫秒,导入单词:1747,速度还是比较快的。对一篇两千字的文章分词用时110毫秒,准确率在99%以上,当词库越完善,准确率会更高。总体来看,导入词库、分词速度和准确度对于一般的应用是可接受的。测试电脑配置:P43.2,1G内存。

这次先写到这,欢迎大家与我一起交流,如果大家觉得有必要,我将用几期博客详细解析所有的源代码,我个人的研究方向是中文分词,希望今后能带给大家更好的分词源码。





在最近的几期博客,解析中文分词的源码,希望大家能给予支持。

采用的最大匹配算法,按从左至右正向最大匹配和从右到左反向最大匹配,当两种分词结果不一致时,按最少切分原则,取切分词数最少的一种,如果两种分词结果切分的词数一样,取反向最大匹配作为分词的结果。

这次主要介绍com.xq.util包下的文件和com.xq包的Word.java和TextBlock.java 。
com.xq.util.File.java:
这个类提供几个静态的方法实现文件的列示和读写操作,比较简单,在此不再详述。
com.xq.util.Sort.java:
提供一个对整型数组实现冒泡排序的静态方法。
com.xq.util.Sear.java:
封装几个二分查找的算法,binaryInsert方法在字典导入时用,返回新单词插入的位置,binarySearch在匹配时用,查找在List中是否存在单词。
com.xq.util. CharTest.java:
这个类检查是否是有效字符,在分词第一步过滤文本是用到,unicode值在19968——40869的是中文字符,数字0——9的unicode值是48——57(半角)和65296——65305(全角),另外还有字母的半角和全角,中文一至九的检查,具体见代码。
Word.java:
一个Word类的对象是一个单词,每个单词被封装在一个Word类,成员变量content是单词的内容,如“中国”,value是该词的unicode值,“中国”的unicode值是42282,length是单词的长度,长度相同的单词存在同一个子字典文件中。在字典文件中只存单词的内容,value是在单词加载时计算的,这个类实现一个Comparable接口,在二分查找时用到,word类重载equals方法,比较两个word是否完全一样,两个word相等条件应该是长度、值和内容完全一样。
TextBlock.java:
在源代码中类的注释有误,在此更正,这个类描述属性相同的一段文本,文本属性在CharTest.java中定义,主要有四种,中文字符、英文字符(包括全角)、数字(包括全角)和其它字符。分词第一步对文本过滤,具有相同属性的相邻的文本放入同一个TextBlock对象,所有的TextBlock对象放入一个list,然后遍历list,具有中文字符属性的TextBlock被分词。例如“国庆将至,大家准备去哪happy呢”,这句话会被拆分成5个TextBlock对象,分别是“国庆将至”,“,”,“大家准备去哪”,“happy”,“呢”。

今天介绍的是几个简单的基础类,以后将介绍比较复杂的字典类和分词类,欢迎大家继续关注。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -