python实现机械分词之逆向最大匹配算法代码示例


Posted in Python onDecember 13, 2017

逆向最大匹配方法

有正即有负,正向最大匹配算法大家可以参阅https://3water.com/article/127404.htm

逆向最大匹配分词是中文分词基本算法之一,因为是机械切分,所以它也有分词速度快的优点,且逆向最大匹配分词比起正向最大匹配分词更符合人们的语言习惯。逆向最大匹配分词需要在已有词典的基础上,从被处理文档的末端开始匹配扫描,每次取最末端的i个字符(分词所确定的阈值i)作为匹配字段,若匹配失败,则去掉匹配字段最前面的一个字,继续匹配。而且选择的阈值越大,分词越慢,但准确性越好。

逆向最大匹配算法python实现:

分词文本示例:

python实现机械分词之逆向最大匹配算法代码示例

分词词典words.xlsx示例:

python实现机械分词之逆向最大匹配算法代码示例

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 
 
''''' 
用逆向最大匹配法分词,不去除停用词 
''' 
import codecs 
import xlrd 
 
#读取待分词文本,readlines()返回句子list 
def readfile(raw_file_path): 
  with codecs.open(raw_file_path,"r",encoding="ANSI") as f: 
    raw_file=f.readlines() 
    return raw_file 
#读取分词词典,返回分词词典list 
def read_dic(dic_path): 
  excel = xlrd.open_workbook(dic_path) 
  sheet = excel.sheets()[0] 
  # 读取第二列的数据 
  data_list = list(sheet.col_values(1))[1:] 
  return data_list 
#逆向最大匹配法分词 
def cut_words(raw_sentences,word_dic): 
  word_cut=[] 
  #最大词长,分词词典中的最大词长,为初始分词的最大词长 
  max_length=max(len(word) for word in word_dic) 
  for sentence in raw_sentences: 
    #strip()函数返回一个没有首尾空白字符(‘\n'、‘\r'、‘\t'、‘')的sentence,避免分词错误 
    sentence=sentence.strip() 
    #单句中的字数 
    words_length = len(sentence) 
    #存储切分出的词语 
    cut_word_list=[] 
    #判断句子是否切分完毕 
    while words_length > 0: 
      max_cut_length = min(words_length, max_length) 
      for i in range(max_cut_length, 0, -1): 
        #根据切片性质,截取words_length-i到words_length-1索引的字,不包括words_length,所以不会溢出 
        new_word = sentence[words_length - i: words_length] 
        if new_word in word_dic: 
          cut_word_list.append(new_word) 
          words_length = words_length - i 
          break 
        elif i == 1: 
          cut_word_list.append(new_word) 
          words_length = words_length - 1 
    #因为是逆向最大匹配,所以最终需要把结果逆向输出,转换为原始顺序 
    cut_word_list.reverse() 
    words="/".join(cut_word_list) 
    #最终把句子首端的分词符号删除,是避免以后将分词结果转化为列表时会出现空字符串元素 
    word_cut.append(words.lstrip("/")) 
  return word_cut 
#输出分词文本 
def outfile(out_path,sentences): 
  #输出模式是“a”即在原始文本上继续追加文本 
  with codecs.open(out_path,"a","utf8") as f: 
    for sentence in sentences: 
      f.write(sentence) 
  print("well done!") 
def main(): 
  #读取待分词文本 
  rawfile_path = r"逆向分词文本.txt" 
  raw_file=readfile(rawfile_path) 
  #读取分词词典 
  wordfile_path = r"words.xlsx" 
  words_dic = read_dic(wordfile_path) 
  #逆向最大匹配法分词 
  content_cut = cut_words(raw_file,words_dic) 
  #输出文本 
  outfile_path = r"分词结果.txt" 
  outfile(outfile_path,content_cut) 
if __name__=="__main__": 
  main()

python实现机械分词之逆向最大匹配算法代码示例

总结

分析分词结果可以知道,机械分词的效果优劣,一方面与分词匹配算法有关,另外一方面极其依赖分词词典。所以若想得到好的分词效果,处理相关领域的文本时,需要在分词词典中加入特定领域的词汇。

以上就是本文关于python实现机械分词之逆向最大匹配算法代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python的条件语句与运算符优先级详解
Oct 13 Python
Python中三元表达式的几种写法介绍
Mar 04 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
python顺序执行多个py文件的方法
Jun 29 Python
浅谈python3中input输入的使用
Aug 02 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
Django中使用MySQL5.5的教程
Dec 18 Python
大数据分析用java还是Python
Jul 06 Python
Python函数调用追踪实现代码
Nov 27 Python
python 实现波浪滤镜特效
Dec 02 Python
教你用Python matplotlib库制作简单的动画
Jun 11 Python
Python语言描述KNN算法与Kd树
Dec 13 #Python
Python xlwt设置excel单元格字体及格式
Apr 18 #Python
Python语言实现百度语音识别API的使用实例
Dec 13 #Python
Python通过matplotlib绘制动画简单实例
Dec 13 #Python
Python数据结构与算法之字典树实现方法示例
Dec 13 #Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 #Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 #Python
You might like
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
使用Python & Flask 实现RESTful Web API的实例
2017/09/19 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
Python3 max()函数基础用法
2019/02/19 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
python 实现让字典的value 成为列表
2019/12/16 Python
Python的in,is和id函数代码实例
2020/04/18 Python
python如何构建mock接口服务
2021/01/28 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
法国足球商店:Footcenter
2019/07/06 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
新闻专业学生的自我评价
2014/02/13 职场文书
地理教师岗位职责
2014/03/16 职场文书
国窖1573广告词
2014/03/21 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
廉洁教育学习材料
2014/05/19 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
在redisCluster中模糊获取key方式
2021/07/09 Redis