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 字符串中的字符倒转
Sep 06 Python
python为tornado添加recaptcha验证码功能
Feb 26 Python
详解Python发送邮件实例
Jan 10 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
python3 读取Excel表格中的数据
Oct 16 Python
python如何实现数据的线性拟合
Jul 19 Python
python中单下划线(_)和双下划线(__)的特殊用法
Aug 29 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
Python中常用的高阶函数实例详解
Feb 21 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 Python
Python错误的处理方法
Jun 23 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
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
PHP读取xml方法介绍
2013/01/12 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
angular分页指令操作
2017/01/09 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
Django 实现图片上传和下载功能
2020/12/31 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
党员岗位承诺口号大全
2014/03/28 职场文书
数据库连接池
2021/04/06 MySQL
python执行js代码的方法
2021/05/13 Python
深入解析MySQL索引数据结构
2021/10/16 MySQL
PYTHON InceptionV3模型的复现详解
2022/05/06 Python