正向最大匹配算法(FMM)

正向最大匹配算法(FMM)是一种基于词典的分词方法,思想很简单就是从左向右扫描寻找词的最大匹配,比如词典中同时含有“钓鱼”和“钓鱼岛”,那“钓鱼岛属于中国”就会被分词成“钓鱼岛/属于/中国”

过程

  • 限定词的最大长度(例如5)
  • 从最大的长度开始在词库中进行匹配,直到匹配成功
  • 更新起点的位置继续上一步骤直到全部完成

实验

代码

# -*- coding: utf-8 -*-
# 中文正向最大匹配(FMM)分词import sys
reload(sys)     #动态重新加载sys模块
sys.setdefaultencoding('utf8')word_dict = ['新华网', '东京', '记者', '吴谷丰', '日本共同社', '28', '报道']test_str = '  新华网东京电记者吴谷丰据日本共同社28日报道'# 获取分词
def getSeg(text):if not text:return ''if len(text) == 1:return textif text in word_dict:return textelse:small = len(text) - 1text = text[0:small]return getSeg(text)def main():global test_strtest_str = test_str.decode('utf8').strip()max_len = 5      # 正向最大匹配分词测试,最大长度5result_str = ''  # 保存要输出的分词结果result_len = 0print 'input :', test_strwhile test_str:tmp_str = test_str[0:max_len]seg_str = getSeg(tmp_str)seg_len = len(seg_str)result_len = result_len + seg_lenif seg_str.strip():result_str = result_str + seg_str + ' / 'test_str = test_str[seg_len:]print 'output :', result_strif __name__ == '__main__':main()

结果

input : 新华网东京电记者吴谷丰据日本共同社28日报道
output : 新华网 / 东京 / 电 / 记者 / 吴谷丰 / 据 / 日本共同社 / 28 / 日 / 报道 /

分词词典可以自定义或者从此网页下载,然后将word_dict代码更换成下面这行

word_dict = [line.strip() for line in open('dict.txt')]

中文分词的python实现-基于FMM算法相关推荐

  1. python实现蒙特卡洛算法_用Python实现基于蒙特卡洛算法小实验

    用Python实现基于蒙特卡洛算法小实验 蒙特卡洛算法思想 蒙特卡洛(Monte Carlo)法是一类随机算法的统称,提出者是大名鼎鼎的数学家冯· 诺伊曼 ,他在20世纪40年代中期用驰名世界的赌城- ...

  2. python实现基于OCR算法的图像文字识别报错

    最近想用python实现基于OCR算法的图像文字识别工作,在网上看到调库实现的代码基于Python的OCR实现,在操作后报错,如下: 需要执行: brew install tesseract 然后执行 ...

  3. 中文分词jieba python 学习

    中文分词工具,结巴分词很好用,以下是验证小结. import jieba import jieba.analyse import jieba.posseg as pseg import time fi ...

  4. 自然语言处理之中文分词逆向最大匹配算法(RMM算法)

    经过了一阶段的学习上课,现在已经开始开始在自然语言处理的道路上安心研究,最近看了一本叫<python自然语言处理实战核心技术与算法>,大致的溜了一遍,感觉写的很基础了,个人认为主要写的好的 ...

  5. python连接es_Elasticsearch --- 3. ik中文分词器, python操作es

    一.IK中文分词器 1.下载安装 2.测试 #显示结果 {"tokens": [ {"token" : "上海","start_o ...

  6. 【Python】基于kNN算法的手写识别系统的实现与分类器测试

    基于kNN算法的手写识别系统 1.      数据准备 使用windows画图工具,手写0-9共10个数字,每个数字写20遍,共200个BMP文件. 方法如下,使用画图工具,打开网格线,调整像素为32 ...

  7. java将输出的内容存入词典,中文分词JAVA实现(基于已知的词典txt)

    这是我第一次写博客,里面有些内容可能描述不当,但是我能保证最后的程序可以在eclipse环境下运行 最近有了作业,要求写中文分词程序,主要是依据一个词典,txt文本,里面是词语,然后要求依据词典,对输 ...

  8. 【中文分词系列】 5. 基于语言模型的无监督分词

    转载:https://spaces.ac.cn/archives/3956/ 迄今为止,前四篇文章已经介绍了分词的若干思路,其中有基于最大概率的查词典方法.基于HMM或LSTM的字标注方法等.这些都是 ...

  9. python实现基于SIFT算法的图像配准(仿射变换)

    话不多说,直接上代码,可以用的话别忘了请喝可乐!(手动笑哭脸) [用法] 第45.46行的输入: img1 = cv2.imread('sift/3.jpg') img2 = cv2.imread(' ...

最新文章

  1. HDFS伪分布式环境搭建
  2. 【Kaggle-MNIST之路】CNN再添加一个层卷积(八)
  3. python怎么写csv文件_python怎么写csv文件
  4. AndroidStudio3.4+Unity2018.3,导出JAR包给UNITY使用
  5. Fibonacci Tree HDU - 4786——解题报告
  6. sql 以a开头的所有记录_SQL开发与数据库管理笔记
  7. mysql5.6定时备份_Mysql自动备份
  8. matlab memorySian,matlab内存溢出的解决方案
  9. 一个新的轮回,一个新的开始
  10. mysql安装和基本操作
  11. Javashop-B2B2C多店铺系统,Javashop B2C开源电商系统下载
  12. mac dmg包签名及公证
  13. 复旦大学机试题2019A斗牛
  14. iphone4s更换电池_如果更换了iPhone电池后仍然出现问题该怎么办
  15. Promise和事件循环
  16. 不一样的SpringBoot注解
  17. .Net 中使用Farpoint Web Spread 自定义CellType
  18. 找2021考研资料?这些超强资源网站必须知道!
  19. html怎么给图片加页码,在Word里,怎样让页码显示在插入的图片上?
  20. 足球比赛常用英语单词集锦

热门文章

  1. TI CC32XX SDA中SimpleLink Academy教程翻译(RTOS部分的基础介绍非常易懂)
  2. 标题 Python生成二维码和解码
  3. 陈寿福服从法院判决已支付赔偿并道歉
  4. 代码零改动Serverless架构升级?
  5. MySQL索引(一)—— 索引介绍
  6. 哈里斯鹰优化算法初步了解笔记 1
  7. 优恩对比分析GDT陶瓷气体放电管与TSS放电管
  8. 随机车牌号python
  9. org.apache.tools.ant.Task在哪个jar包
  10. ERROR Error: command failed: yarn