zoukankan      html  css  js  c++  java
  • 中文分词的简要实现

    前段时间在摆弄Lucene(Lucene is a high performance, scalable Information Retrieval (IR) library. It lets you add indexing and searching capabilities to your applications.)理所当然的在 Google的带领下进入车东的《在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介》一文,在此文的引导下,了解做Lucene相关中文应用第一步即要实现中文分词——好在前人已经做了几十年的研究、好在有Google和网络。

    为何要中文分词:

    说到为何要中文分词有必要将中文和英文对比一下,英文中对于有天然的空格区分,而中文中只有短句使用标点符号区分(远古的时候的文章连标点都无)——所以古文有断句一说。中文分词的作用即是在短语中增加人工的空格如“SAP是大型ERP软件分为“SAP 是大型 ERP 软件,目前我们常接触这种技术是MS Office中的Word,在一段文字上做双击操作时会选中一个词而在记事本中同样的操作对于中文只会是一个汉字;同样在金山快译、金山词霸以及各种搜索引擎我们会看到中文分词的作用。目前中文分词还是一个难题——对于需要上下文区别的词以及新词(人名、地名等)很难完美的区分。国际上将同样存在分词问题的韩国、日本和中国并称为CJK(Chinese Japanese Korean),对于CJK这个代称可能包含其他问题,分词只是其中之一。

    对于分词更多资料请见:Google资料Google英文资料

    其中微软亚洲研究院的李东 张湘辉:汉语分词在中文软件中的广泛应用一文说的比较清晰。

    中文分词的简略实现:

    Lucene已有先人实现了中文分词功能,但实在是看别人的代码太痛苦,而且越难的事情总是能激起人们的好奇心和虚荣心,所以做了一个劳而无功的决定:自己来丰衣足食——同时乘机把Unicode,GB2312之类的编码弄明白。

    先从简单的开始,实现的方式是基于最大匹配词典的中文分词算法,经过测试效果一如意料中的差强人意,如下所示:

    来源于新华网首页的新闻(部分):

    旧时的中国通多指维护西方利益的外交官和传教士等。

    而今在商业领域出现了众多新中国通。以下就是四个新中国通在中国的经历。他们总结在中国做生意的成功经验是:耐心、乐观,对在中国发展有强烈的兴趣。

    在华美国人:在中国做生意需亲临

    理查德·麦考姆斯2003年开始在中国投资。如今,59岁的麦考姆斯是首席财务师,每年来中国十几次,负责广州一家中美合资的塑料回收公司。他说:你可不能仅靠遥控管理中国公司,要事必躬亲,亲自到现场。

    分词结果(部分)*号为分词标记
    旧时**中国通*多指*维护*西方*利益**外交***传教***而今**商业*领域*出现**众多**中国通*以下*就是*四个**中国通**中国**经历*他们*总结**中国*做生意**成功*经验**耐心*乐观***中国*发展**强烈**兴趣**华美*国人**中国*做生意**亲临*理查德*麦考***2003**开始**中国*投资*如今*59***麦考****首席*财务**每年**中国*十几**负责*广州*一家*中美*合资**塑料*回收*公司****可不****遥控*管理*中国*公司*要事**躬亲*亲自**现场

    但测试可以看到如*麦考***要事**躬亲这样姓名和短语是区分错误的,目前需要改进的地方:

    l         对新词的区分:新词对算法而言即是词库中没有的词,对于此类词的区分将会逆向考虑,不在词库的词排除常用字后即为专有名词,这也意味着要对常用“字”进行词性分类如“姆”“斯”只会和其他字结合不单独出现,所以“麦考姆斯”是专业名词。而对于“在”、“和”“了”之类的字可以单独出现。

    l         对于基于最大匹配算法的改进:

    目前采用的算法是基于左侧的最大匹配算法,即词的匹配是自左向右,如“要事必躬亲”结果先匹配了“要事”。需要结合右侧匹配,但是匹配后的词选择又是一个棘手的算法。

    l         对算法速度的提高:

    现有算法的瓶颈经过测试在于文章的分句和中英文区分,对于万字的分词约在280毫秒,其中前面提到的原因约占用200毫秒。预计采用的算法将是对文章进行按字符筛选中文、符号、英文。

    l         远期计划:目前基于词表匹配的算法是一项基本的分词算法,说明了是对现有汉语的分类。某些文章提到过基于统计的分词,若有时间再作了解。

     

    参考资料:

    车东:在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介

    李东 张湘辉:汉语分词在中文软件中的广泛应用

    中文搜索引擎技术揭密:中文分词

    SQLET - 开放源码的中文搜索引擎

  • 相关阅读:
    session之验证码
    session之cookie封装终极版本
    临床知识库-临床路径管理
    import org.quartz.Job; 不存在
    ASP.NET DataGrid 导出EXCEL 中文变乱码
    Cannot find module '@/views/monitor/online/index'
    配置包导入
    配置log4j 以便查看mybatis操作数据库的过程
    解决中文乱码问题
    ORA 环境变量
  • 原文地址:https://www.cnblogs.com/lcl/p/323742.html
Copyright © 2011-2022 走看看