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 相关文章推荐
10款最好的Web开发的 Python 框架
Mar 18 Python
Python中Random和Math模块学习笔记
May 18 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
pytorch中torch.max和Tensor.view函数用法详解
Jan 03 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
Python eval函数原理及用法解析
Nov 14 Python
Python与C/C++的相互调用案例
Mar 04 Python
Python 语言实现六大查找算法
Jun 30 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
js 设置选中行的样式的实现代码
2010/05/24 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
常用python编程模板汇总
2016/02/12 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
共产党员承诺书
2014/03/25 职场文书
中药学自荐信
2014/06/15 职场文书
医院标语大全
2014/06/23 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
浅谈python中的多态
2021/06/15 Python
mysql联合索引的使用规则
2021/06/23 MySQL
JavaScript 反射学习技巧
2021/10/16 Javascript
python_tkinter弹出对话框创建
2022/03/20 Python