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实现的飞速中文网小说下载脚本
Apr 23 Python
python脚本监控docker容器
Apr 27 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
Django使用详解:ORM 的反向查找(related_name)
May 30 Python
win8下python3.4安装和环境配置图文教程
Jul 31 Python
Django数据库连接丢失问题的解决方法
Dec 29 Python
Python-ElasticSearch搜索查询的讲解
Feb 25 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
TensorFlow tf.nn.conv2d实现卷积的方式
Jan 03 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 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
香妃
2021/03/03 冲泡冲煮
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
Python导入txt数据到mysql的方法
2015/04/08 Python
python计算日期之间的放假日期
2018/06/05 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
python 整数越界问题详解
2019/06/27 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
python实时监控logstash日志代码
2020/04/27 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
七年级生物教学反思
2014/01/30 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
走近毛泽东观后感
2015/06/04 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书