已迁移到我新博客,阅读体验更佳seg:NLP之正向最大匹配分词
完整代码实现放在我的github上:click me

一、任务要求

  • 实现一个基于词典与规则的汉语自动分词系统。

二、技术路线

  • 采用正向最大匹配(FMM)方法对输入的中文语句进行分词,具体的实现可以分为下面几个步骤:

    1. 对输入的一个中文语句,首先在程序中判断并确保语句中不包含数字或者字母
    2. 在句子中的当前位置开始取与词典dic_ce.txt中最大匹配长度的词作为一个分词段,如果没有在词典中成功匹配到就将句子在当前匹配位置的这个字作为一个分词段并将匹配位置向前挪一个位置
    3. 重复第2步直到匹配位置移到句末
  • 下面是用FMM方法分词的具体实现:
//param@seg:保存分词段结果的vector
//param@st:带分词的中文语句
void segment(vector<string> &seg, string st) {int pos = 0;int sz = st.length();string t;int cnt = 0, spos;while (pos < sz) {cnt = pos;spos = pos;t = "";while (st[cnt]) {t += st.substr(cnt, 2);if (wordmap.find(t) != wordmap.end())pos = cnt + 2;cnt += 2;}if (pos == spos) {seg.push_back(st.substr(spos, 2));pos += 2;}else {seg.push_back(st.substr(spos, pos - spos));}}return;
}

三、数据说明

  • 汉英词典dic_ce.txt,读取其中的汉词用于与句中词进行匹配,词典采用GBK编码,下面是给出文件内容示例:
//gbk编码,每行第一个词是汉词,后面是它对应的英译单词,以','分隔
阿弥陀佛,Amitabha
阿米巴,amoeba,amoebae
阿姆斯特丹,Amsterdam
阿斯匹林,aspirin

四、性能分析

  • 假设输入中文语句长度为n,程序时间复杂度最坏情况下是O(n^2),最好情况是O(n),下面是程序分析结果及分词耗时评测的截图:

五、运行环境

  • 将执行文件seg.exe与数据字典dic_ce.txt放在同一个目录下,然后点击seg.exe即可正常运行,进入运行窗口后根据提示进行输入即可得到分词结果。

转载于:https://www.cnblogs.com/brooksj/p/10765656.html

seg:NLP之正向最大匹配分词相关推荐

  1. python最大分词_python正向最大匹配分词和逆向最大匹配分词的实例

    正向最大匹配 # -*- coding:utf-8 -*- CODEC='utf-8' def u(s, encoding): 'converted other encoding to unicode ...

  2. 前向最大匹配分词FMM

    def getSeg(text,lib_trie):if not text:return ''if len(text) == 1:return textif lib_trie.find(text):r ...

  3. java 最大分词算法_Java实现的最大匹配分词算法详解

    本文实例讲述了Java实现的最大匹配分词算法.分享给大家供大家参考,具体如下: 全文检索有两个重要的过程: 1分词 2倒排索引 我们先看分词算法 目前对中文分词有两个方向,其中一个是利用概率的思想对文 ...

  4. java正向最大匹配算法_java中文分词之正向最大匹配法实例代码

    前言 基于词典的正向最大匹配算法(最长词优先匹配),算法会根据词典文件自动调整最大长度,分词的好坏完全取决于词典. 所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子 ...

  5. 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词

    基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤 第一次写中文分词程序,欢迎拍砖. publicclass MM ...

  6. 词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法

    词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法 Type真是太帅了 于 2018-12-31 13:20:07 发布 1930  收藏 1 分类专栏: 编程 版权 编程 专栏收录该内容 15 ...

  7. Python实现中文分词--正向最大匹配和逆向最大匹配

    编译原理实验二:Python实现中文分词–正向最大匹配和逆向最大匹配 最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数 ...

  8. 正向最大匹配中文分词算法

    中文分词一直都是中文自然语言处理领域的基础研究.目前,网络上流行的很多中文分词软件都可以在付出较少的代价的同时,具备较高的正确率.而且不少中文分词软件支持Lucene扩展.但不管实现如何,目前而言的分 ...

  9. @分词算法FMM(正向最大匹配)

    @分词算法FMM(正向最大匹配) b.addActionListener(new ActionListener() { //b是一个按钮,给按钮添加的事件.Connection conn = DB.g ...

最新文章

  1. adb push和pull使用
  2. python长连接框架_python之websocket【长连接的实现】
  3. canvas并查集画随机迷宫
  4. 为什么国内软件行业普遍不如国外?
  5. 通过pxe从网络启动安装Windows XP
  6. HikariCP-史上最快速的连接池
  7. php日期相减函数,倒计时函数_计算两个时间相差值_PHP函数
  8. Android如何给无法更改继承关系的Activity更换ActionBar(setContentView方法实战)
  9. linux红帽6架设apache,linux Redhat6.5 中 编译安装apache
  10. mysql 无法链接, 输入密码失败
  11. springBoot上传文件时MultipartFile报空问题解决方法
  12. Tomcat的startup.bat闪退问题
  13. 算法导论(第三版)第一章习题答案
  14. 页面开机自启动,页面置顶显示,页面持续获得焦点,鼠标点击器源码
  15. 从Controller注解切入了解spring注解原理
  16. 基于Keras的LSTM进行电力负荷预测
  17. python依照概率抽样_统计概率思维之总体与抽样
  18. 关于Rational Rose的使用(初学者)
  19. python第三方库批量安装_使用Python批量安装第三方库
  20. 浅谈border-radius对border的影响

热门文章

  1. fzu 2150 Fire Game 【身手BFS】
  2. placeholder
  3. ThickBox 3.1参数详解(转)
  4. ref和out的区别
  5. 六步使用ICallbackEventHandler实现无刷新回调
  6. vi常用命令以及 冒号输入
  7. Nginx源代码分析 - 日志处理
  8. .NET2.0隐形的翅膀,正则表达式搜魂者【月儿原创】
  9. Net 下安装、调试的常见问题与错误!!!
  10. 【linux】ARM开发板上设置RTC时间,断电重启后,设置失效的原因分析