python实现中文分词FMM算法实例


Posted in Python onJuly 10, 2015

本文实例讲述了python实现中文分词FMM算法。分享给大家供大家参考。具体分析如下:

FMM算法的最简单思想是使用贪心算法向前找n个,如果这n个组成的词在词典中出现,就ok,如果没有出现,那么找n-1个...然后继续下去。假如n个词在词典中出现,那么从n+1位置继续找下去,直到句子结束。

import re  
def PreProcess(sentence,edcode="utf-8"):  
  sentence = sentence.decode(edcode)  
  sentence=re.sub(u"[。,,!……!《》<>\"'::?\?、\|“”‘';]"," ",sentence)  
  return sentence  
def FMM(sentence,diction,result = [],maxwordLength = 4,edcode="utf-8"):
  i = 0 
  sentence = PreProcess(sentence,edcode)  
  length = len(sentence)  
  while i < length: 
    # find the ascii word  
    tempi=i  
    tok=sentence[i:i+1]  
    while re.search("[0-9A-Za-z\-\+#@_\.]{1}",tok)<>None:  
      i= i+1 
      tok=sentence[i:i+1]  
    if i-tempi>0:  
      result.append(sentence[tempi:i].lower().encode(edcode)) 
    # find chinese word  
    left = len(sentence[i:])  
    if left == 1:  
      """go to 4 step over the FMM""" 
      """should we add the last one? Yes, if not blank""" 
      if sentence[i:] <> " ":  
        result.append(sentence[i:].encode(edcode))  
      return result  
    m = min(left,maxwordLength)  
    for j in xrange(m,0,-1):  
      leftword = sentence[i:j+i].encode(edcode) 
     #  print leftword.decode(edcode)  
      if LookUp(leftword,diction): 
        # find the left word in dictionary 
        # it's the right one  
        i = j+i  
        result.append(leftword)  
        break 
      elif j == 1:  
        """only one word, add into result, if not blank""" 
        if leftword.decode(edcode) <> " ":  
          result.append(leftword)  
        i = i+1 
      else:  
        continue 
  return result  
def LookUp(word,dictionary):  
  if dictionary.has_key(word):  
    return True 
  return False 
def ConvertGBKtoUTF(sentence):  
  return sentence.decode('gbk').encode('utf-8')
dictions = {}  
dictions["ab"] = 1 
dictions["cd"] = 2 
dictions["abc"] = 1 
dictions["ss"] = 1 
dictions[ConvertGBKtoUTF("好的")] = 1 
dictions[ConvertGBKtoUTF("真的")] = 1 
sentence = "asdfa好的是这样吗vasdiw呀真的daf dasfiw asid是吗?" 
s = FMM(ConvertGBKtoUTF(sentence),dictions)  
for i in s:  
  print i.decode("utf-8")
test = open("test.txt","r")  
for line in test:  
  s = FMM(CovertGBKtoUTF(line),dictions)  
  for i in s:  
    print i.decode("utf-8")

运行结果如下:

asdfa
好的




vasdiw

真的
daf
dasfiw
asid


希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python中sets模块的用法实例
Sep 30 Python
Python中生成器和yield语句的用法详解
Apr 17 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
python微信公众号开发简单流程
Mar 23 Python
python 实现A*算法的示例代码
Aug 13 Python
使用python对excle和json互相转换的示例
Oct 23 Python
pandas 透视表中文字段排序方法
Nov 16 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
NumPy中的维度Axis详解
Nov 26 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
Python实现的最近最少使用算法
Jul 10 #Python
Python导入oracle数据的方法
Jul 10 #Python
Python验证码识别的方法
Jul 10 #Python
Python实现大文件排序的方法
Jul 10 #Python
Python实现telnet服务器的方法
Jul 10 #Python
Python读写unicode文件的方法
Jul 10 #Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 #Python
You might like
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
php文件系统处理方法小结
2016/05/23 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
10个实用的脚本代码工具
2010/05/04 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
python选择排序算法的实现代码
2013/11/21 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
python tkinter canvas使用实例
2019/11/04 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
分公司经理岗位职责
2013/11/11 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
css弧边选项卡的项目实践
2023/05/07 HTML / CSS