基于互联网内容的中文分词小实验

分词对于搜索引擎,输入法输入提示,语音识别等其它人机交互系统等都很有用。互联网的海量信息为分词研究提供了大量的,动态更新的原始资料库。很多互联网公司都有基于互联网内容的分词系统。并且采用HADOOP等分析大量数据。这些听上去很高大上,但是仔细想想基本原理应该是比较容易理解的,我们每个程序员也很容易可以研究这个领域。所以做了一个简单的POC实验。

首先写一个Spider,从互联网页面抓取内容。因为只是简单实验,我只抓取一个页面,没有做递归抓取链接页面。抓取内容过滤掉HTML标签留下纯文本。

第二部分,写一个字之间连续出现频率分析的分析器。基本思想是,定义一个已读字符缓存区,读取输入字符流,对每个字X:

1 . 如果是空格等分隔字符,则清空缓存。

2. 如果是正常字符:如果缓存已经有内容E则记录<E, X>匹配次数加一。然后将X也放入缓存。(问题:应该对于E的任意后子串都可以基数加一。)

这样,最终我们可以得出每个字符串后面跟随的可能字符的列表和对应的匹配次数。在这个实验里,我用文件系统的目录结构来记录:每个字符串一个文件夹,然后后面可能出现的每个词一个文件,文件是空的,用文件的lastModified时间戳记录匹配次数。这在一个真正的系统里是不可行的,必须设计存储数据结构;但是为了简单期间,我们在这个实验里就利用文件系统。

第三部分是做一个Java Swing界面,给一个输入框,用户输入任意字符串,然后根据用户输入找出最常匹配的下个字符。这里有几个问题:

1. 只找一个字符不太够,比如用户输入 【中华人民】,我们应该给出【共和国】而不是只提示一个【共】。所以在匹配一个后,需要在此基础上给出下一个匹配字符。

2. 如果对用户输入无法匹配到下一个字符,则应该去掉用户输入串最左边的字符,根据右边字串继续匹配,并递归,直到找到匹配或者字串长度为零。(由于我们记录所有的可能,实际上当可能性小于某值时应该认为不再是以后词。)

3. 上边两种情况一起考虑时,不能弄混,比如不能匹配处一个连续但是无意义的单字接龙,比如 【中国家人民兵种子】,所以匹配下一个字时要考虑整个前面的分词,要不要继续找下一个可能字符。这里情况稍微复杂。在这个简单实验里只是简单处理了一下。

总的来说,这个小实验给出了比较有意义的结果。当然在一个真正的产品里要对更多的相关问题做研究。

代码在这里: http://blog.luoxq.com/files/fenci.tar 一共只有200+行代码。

界面现实结果如下:

时间: 2024-10-25 12:03:14

基于互联网内容的中文分词小实验的相关文章

基于MMSeg算法的中文分词类库

原文:基于MMSeg算法的中文分词类库 最近在实现基于lucene.net的搜索方案,涉及中文分词,找了很多,最终选择了MMSeg4j,但MMSeg4j只有Java版,在博客园上找到了*王员外*(http://www.cnblogs.com/land/archive/2011/07/19/mmseg4j.html )基于Java版的翻译代码,但它不支持最新的Lucene.Net 3.0.3,于是基于它的代码升级升级到了最新版Lucene.Net (≥ 3.0.3),同时将其中大部分Java风格代

基于JAVA的IKAnalyzer中文分词运用

一.前提 IKAnalyzer分词器常应用于大数据开发的数据准备阶段,它能对任意长的文字进行关键字提取.文字重组.数据清洗等二次处理,并将处理好的关键数据通过某种分割符重新拼接起来,形成一个可用于进行机器学习的数据集. 二.准备阶段 使用eclipse创建一个Maven工程,通过配置pom.xml文件来导入IKAnalyzer的jar包,我这用导入的是ikanalyzer-2012_u6.jar,然后在src目录下分别创建IKAnalyzer.cfg.xml.extend.dic.stopwor

转:从头开始编写基于隐含马尔可夫模型HMM的中文分词器

http://blog.csdn.net/guixunlong/article/details/8925990 从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇 首先感谢52nlp的系列博文(http://www.52nlp.cn/),提供了自然语言处理的系列学习文章,让我学习到了如何实现一个基于隐含马尔可夫模型HMM的中文分词器. 在编写一个中文分词器前,第一步是需要找到一些基础的词典库等资源,用以训练模型参数,并进行后续的结果评测,这里直接转述52nlp介绍的"中文分词入门

中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下: 后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,也是个知识发现的过程,以后有机会再学习下. ================================================== * 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallse

几款开源的中文分词系统

中文分词是做好中文内容检索.文本分析的基础,主要应用于搜索引擎与数据挖掘领域.中文是以词为基本语素单位,而词与词之间并不像英语一样有空格来分隔,因而中文分词的难点在于如何准确而又快速地进行分词 以下介绍4款开源中文分词系统. 1.ICTCLAS – 全球最受欢迎的汉语分词系统 中文词法分析是中文信息处理的基础与关键.中国科学院计算技术研究所在多年研究工作积累的基础上,研制出了汉语词法分析系统ICTCLAS(Institute of Computing Technology, Chinese Le

机器学习基础——一文讲懂中文分词算法

在前文当中,我们介绍了搜索引擎的大致原理.有错过或者不熟悉的同学,可以点击下方的链接回顾一下前文的内容. ML基础--搜索引擎基本原理 在介绍爬虫部分的时候,我们知道,爬虫在爬取到网页的内容之后,会先进行一些处理.首先要做的就是过滤掉HTML当中的各种标签信息,只保留最原生的网页内容.之后,程序会对这些文本内容提取关键词. 今天我们就来讲讲关键词提取当中最重要的一个部分--中文分词. 在世界上众多的语言当中,中文算是比较特殊的一种.许多语言自带分词信息,比如英文,机器学习写作machine le

模式识别之中文分词---简介

Lucene系列介绍 Lucene:分词器和索引文件 目录 分词器 索引文件结构 常用的中文分词器 1.分词器 分词器,对文本资源进行切分,将字符文本串按照一定的规则切分为一个个可以进行索引的最小单位(关键词),以便检索时使用. 建立索引和进行检索时都要用到分词器.为了保证能正确的检索到结果,在建立索引与进行检索时使用的分词器应是同一个. 2.索引文件结构 索引库是一组索引文件的集合. 索引文件的检索:索引表规模相对较小,文档集合规模较大.进行检索时,先从检索索引表开始,然后找到相对应的文档.如

NLP︱中文分词技术小结、几大分词引擎的介绍与比较

笔者想说:觉得英文与中文分词有很大的区别,毕竟中文的表达方式跟英语有很大区别,而且语言组合形式丰富,如果把国外的内容强行搬过来用,不一样是最好的.所以这边看到有几家大牛都在中文分词以及NLP上越走越远.哈工大以及北大的张华平教授(NLPIR)的研究成果非常棒! 但是商业应用的过程中存在的以下的问题: 1.是否先利用开源的分词平台进行分词后,再自己写一些算法进行未登录词.歧义词的识别? 2.或者直接调用下文介绍的分词引擎来进行分词呢?缴费使用固然很棒,但是是否值得? ---------------

中文分词原理和实现

三大主流分词方法:基于词典的方法.基于规则的方法和基于统计的方法. 1.基于规则或词典的方法 定义:按照一定策略将待分析的汉字串与一个"大机器词典"中的词条进行匹配,若在词典中找到某个字符串,则匹配成功. 按照扫描方向的不同:正向匹配和逆向匹配 按照长度的不同:最大匹配和最小匹配 1.1正向最大匹配思想MM 从左向右取待切分汉语句的m个字符作为匹配字段,m为大机器词典中最长词条个数. 查找大机器词典并进行匹配: 若匹配成功,则将这个匹配字段作为一个词切分出来. 若匹配不成功,则将这个匹