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 相关文章推荐
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
python连接MySQL数据库实例分析
May 12 Python
django批量导入xml数据
Oct 16 Python
python如何为创建大量实例节省内存
Mar 20 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
Python 将pdf转成图片的方法
Apr 23 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 Python
python状态机transitions库详解
Jun 02 Python
Python 一键获取电脑浏览器的账号密码
May 11 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
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
js实现飞入星星特效代码
2014/10/17 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
python获得图片base64编码示例
2014/01/16 Python
python实现dict版图遍历示例
2014/02/19 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
华润集团网上药店:健一网
2016/09/19 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
Emma Bridgewater官网:英国餐具制造商
2019/11/24 全球购物
法制宣传标语集锦
2014/06/25 职场文书
小学生植树节活动总结
2014/07/04 职场文书
大学活动总结模板
2014/07/10 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
高中学生自我评价范文
2014/09/23 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
2015年采购员工作总结
2015/04/27 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
postgresql中如何执行sql文件
2023/05/08 PostgreSQL