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设计模式中的代理模式与模板方法模式编程
Feb 02 Python
python if not in 多条件判断代码
Sep 21 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
对python文件读写的缓冲行为详解
Feb 13 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
python内存动态分配过程详解
Jul 15 Python
python 实现识别图片上的数字
Jul 30 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
python 表格打印代码实例解析
Oct 12 Python
Python处理PDF与CDF实例
Feb 26 Python
python中scrapy处理项目数据的实例分析
Nov 22 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
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
node.js基础知识小结
2018/02/26 Javascript
微信小程序中显示倒计时代码实例
2019/05/09 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现的异步代理爬虫及代理池
2017/03/17 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
护理专业毕业生自我鉴定
2013/10/08 职场文书
会计实习生自我鉴定
2013/12/12 职场文书
学年末自我鉴定
2014/01/21 职场文书
优秀求职信范文分享
2014/01/26 职场文书
个人作风剖析材料
2014/02/02 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
医院合作协议书
2014/08/19 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
家庭贫困证明
2015/06/16 职场文书
小学总务工作总结
2015/08/13 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书