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 正则表达式(转义问题)
Dec 15 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
python实现控制台打印的方法
Jan 12 Python
详解重置Django migration的常见方式
Feb 15 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
Python命令行click参数用法解析
Dec 19 Python
tensorflow之变量初始化(tf.Variable)使用详解
Feb 06 Python
Python中对象的比较操作==和is区别详析
Feb 12 Python
python数据处理之Pandas类型转换
Apr 28 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使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
Django中Forms的使用代码解析
2018/02/10 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
考试不及格的检讨书
2014/01/22 职场文书
审计主管岗位职责
2014/01/31 职场文书
学习决心书范文
2014/03/11 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
社区娱乐活动方案
2014/08/21 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
校长师德表现自我评价
2015/03/05 职场文书
教师求职信怎么写
2015/03/20 职场文书
公司酒会主持词
2015/07/02 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server