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绘制人人网好友关系图示例
Apr 01 Python
关于Python中浮点数精度处理的技巧总结
Aug 10 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
python实现word 2007文档转换为pdf文件
Mar 15 Python
基于pandas数据样本行列选取的方法
Apr 20 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
python__name__原理及用法详解
Nov 02 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
Python基础教程之输入输出和运算符
Jul 26 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 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程序员工具
2008/05/26 PHP
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
python进程与线程小结实例分析
2018/11/11 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
js 调用父窗口的具体实现代码
2013/07/15 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
canvas实现钟表效果
2017/02/13 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
Python封装shell命令实例分析
2015/05/05 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
python中int与str互转方法
2018/07/02 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
对Python函数设计规范详解
2019/07/19 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
python基于win32api实现键盘输入
2020/12/09 Python
python常量折叠基础知识点讲解
2021/02/28 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
自我评价正确写法范文
2013/12/10 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
时尚女魔头观后感
2015/06/04 职场文书
四年级数学教学反思
2016/02/16 职场文书
员工试用期工作总结
2019/06/20 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL