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计算程序运行时间的方法
Dec 13 Python
Python简明入门教程
Aug 04 Python
20招让你的Python飞起来!
Sep 27 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
python找出列表中大于某个阈值的数据段示例
Nov 24 Python
Python post请求实现代码实例
Feb 28 Python
python实例化对象的具体方法
Jun 17 Python
学python爬虫能做什么
Jul 29 Python
python 模块导入问题汇总
Feb 01 Python
python中scipy.stats产生随机数实例讲解
Feb 19 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数据库操作Helper类完整实例
2016/05/11 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
农历与西历对照
2006/09/06 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
下载给定网页上图片的方法
2014/02/18 Python
详解Python的Django框架中的templates设置
2015/05/11 Python
Python中有趣在__call__函数
2015/06/21 Python
python算法表示概念扫盲教程
2017/04/13 Python
Python递归函数定义与用法示例
2017/06/02 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
pytorch标签转onehot形式实例
2020/01/02 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
用友笔试题目
2016/10/25 面试题
行政主管岗位职责
2013/11/18 职场文书
教师个人自我鉴定
2014/02/08 职场文书
小学教师工作总结2015
2015/04/07 职场文书
SpringBoot生成License的实现示例
2021/06/16 Java/Android