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的ORM框架SQLObject入门实例
Apr 28 Python
Python不规范的日期字符串处理类
Jun 10 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
pandas 读取各种格式文件的方法
Jun 22 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
Django中URL的参数传递的实现
Aug 04 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
Python图像读写方法对比
Nov 16 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
php简单实现快速排序的方法
2015/04/04 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
laravel入门知识点整理
2020/09/15 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
Python实现简单的可逆加密程序实例
2015/03/05 Python
python实现多进程通信实例分析
2019/09/01 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
有机童装:Toby Tiger
2018/05/23 全球购物
业务副厂长岗位职责
2014/01/03 职场文书
党员承诺书范文
2014/05/19 职场文书
党员目标管理责任书
2014/07/25 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
导游词之凤凰古城
2019/10/22 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
教你怎么用python实现字符串转日期
2021/05/24 Python
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript