分词词典:

import os
#正向向最大匹配法
def MM(text):#读取词典dictionary = []dic_path = r'F:\大三下\自然语言处理\chapter-4\dic.utf8'
# 在windows上使用open打开utf-8编码的txt文件时开头会有一个多余的字符
# 它叫BOM,是用来声明编码等信息的,但python会把它当作文本解析
# 解决办法:open的encoding参数
# for line in open(, encoding='utf_8_sig' ): for line in open(dic_path,'r',encoding='utf_8_sig'):line = line.strip()if not line:continuedictionary.append(line)dictionary = list(set(dictionary))#获取词典最大长度max_length = 0word_length = []for word in dictionary:word_length.append(len(word))max_length = max(word_length)    #切分文本cut_list = []text_length = len(text)  while text != '':if text_length < max_length:max_length = text_lengthnew_word = text[: max_length] # 以最长分词词典的词组长度最先匹配while new_word not in dictionary:new_word = new_word[: len(new_word)-1] # 不匹配时长度减一if len(new_word) == 1 :breakcut_list.append(new_word)  # 向列表中加入划分文本单词或词组text = text[len(new_word):] # 匹配时切除已匹配词return cut_list
MM("北京市民办高中")

分词结果:

import os
#逆向最大匹配法
def RMM(text):#读取词典dictionary = []dic_path = r'F:\大三下\自然语言处理\chapter-4\dic.utf8'
# 在windows上使用open打开utf-8编码的txt文件时开头会有一个多余的字符
# 它叫BOM,是用来声明编码等信息的,但python会把它当作文本解析
# 解决办法:open的encoding参数
# for line in open(, encoding='utf_8_sig' ): for line in open(dic_path,'r',encoding='utf_8_sig'):line = line.strip()if not line:continuedictionary.append(line)dictionary = list(set(dictionary))#获取词典最大长度max_length = 0word_length = []for word in dictionary:word_length.append(len(word))max_length = max(word_length)    #切分文本cut_list = []text_length = len(text)while text_length > 0:j = 0for i in range(max_length, 0, -1):if text_length - i < 0:continue# 从右到左依次配对分词表new_word = text[text_length - i:text_length]if new_word in dictionary:cut_list.append(new_word)  # 挑拣出文本中在分词表相同的词text_length -= ij += 1break  if j == 0:text_length -= 1cut_list.append(new_word)  # 添加单字未匹配字符cut_list.reverse()  # 将列表中元素倒序排列return cut_list
RMM('北京市的民办高中')

分词结果:

调用以上函数实现双向匹配:

def BMM(text):print("MM: ", MM("北京市民办高中"))print("RMM: ", RMM("北京市民办高中"))while len(MM(text)) <= len(RMM(text)) :print(MM("北京市民办高中"))print('BMM:', RMM(text))
BMM("北京市民办高中")

分词结果:

正向最大匹配、逆向最大匹配与双向匹配算法实现相关推荐

  1. Java---中文词匹配 正向、逆向和双向最大匹配算法

    完成正向.逆向和双向最大匹配算法 import java.io.*; import java.util.*;/*** 正向最大匹配* 逆向最大匹配* 双向最大匹配*/ public class Two ...

  2. 正向/逆向最大匹配法分词实现

    最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描).例如:词典中 ...

  3. 正向(逆向)最大匹配和最大概率法分词的错误分析

    正向最大匹配.逆向最大匹配.最大概率法是最简单的三种分词方式.本文从这三种分词方法产生的错误入手,观察他们分词的优缺点. 1.基本情况 从语料中选取了200个句子作为样本,分别用三种不同的分词方式进行 ...

  4. 正向最大匹配 和逆向最大匹配对比比较

    正向最大匹配法 &逆向最大匹配法 原理对比 下面介绍的分词算法中最简单的正向最大匹配和反向最大匹配. 这种两种方法都是机械分词方法,它是按照一定的策略将待分析的汉字串与一个"充分大的 ...

  5. 词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法

    词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法 Type真是太帅了 于 2018-12-31 13:20:07 发布 1930  收藏 1 分类专栏: 编程 版权 编程 专栏收录该内容 15 ...

  6. 【自然语言处理】正向、逆向、双向最长匹配算法的 切分效果与速度测评

    本文摘要 · 理论来源:[统计自然语言处理]第七章 自动分词:[自然语言处理入门]第二章 词典分词: · 代码目的:手写三种算法:正向最长匹配.逆向最长匹配.双向最长匹配,比较它们的单词切分效果与速度 ...

  7. python最大分词_python正向最大匹配分词和逆向最大匹配分词的实例

    正向最大匹配 # -*- coding:utf-8 -*- CODEC='utf-8' def u(s, encoding): 'converted other encoding to unicode ...

  8. Python实现中文分词--正向最大匹配和逆向最大匹配

    编译原理实验二:Python实现中文分词–正向最大匹配和逆向最大匹配 最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数 ...

  9. 逆向最大匹配分词算法

    逆向最大匹配分词算法 By Jorbe 2014/03/13 计算机科学 No Comments 中文分词是所有中文信息处理的基础.在数据挖掘.搜索引擎.自然语言处理等领域都起着至关重要的作用.中文分 ...

  10. 基于词典的逆向最大匹配中文分词算法,更好实现中英文数字混合分词

    基于词典的逆向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤.实际分词效果比正向分词效果好 publicclass RMM ...

最新文章

  1. 关于双目立体视觉的三大基本算法及发展现状的总结
  2. json数据格式 python_python中json是什么文件格式
  3. 关于list.extend(iterable)
  4. linux sed命令的常用方法
  5. P7294-[USACO21JAN]Minimum Cost Paths P【单调栈】
  6. servlet设置cookie实验
  7. NSIS 设置系统变量
  8. 在具有内置文本扩展功能的苹果Mac上如何更快的键入内容?
  9. 转置矩阵使用T,Hermite矩阵、正交矩阵、酉矩阵、奇异矩阵、正规矩阵、幂等矩阵
  10. 双光子成像和近红外二区荧光共聚焦成像/树状大分子CT/MRI双模态成像造影剂/锰螯合物磁共振成像(MRI)
  11. python为什么是蛇的天敌_青蛙和蛇一直是天敌,只知道蛇会吃青蛙,你知不知道青蛙也吃蛇...
  12. PAT 1007(简单粗暴)
  13. PGP在加密技术中的应用
  14. 建筑物防雷接地工程的分类和措施
  15. LDPC码Gallager构造校验矩阵(MATLAB)
  16. Odoo产品分析 (三) -- 人力资源板块(5) -- 出勤(1)
  17. java定时任务中使用多线程_定时任务使用多线程注意事项
  18. java null什么意思_浅谈java中null是什么,以及使用中要注意的事项
  19. Microsoft Data Access Components (MDAC) 2.8
  20. 能用微信控制的插座SmartSwitch 0.1 开源手册

热门文章

  1. 【掘金运营套路揭露】真心被掘金的套路....
  2. 服务器排队系统怎么做,多服务器排队系统的平均排队时间的近似分析
  3. html 播放vr视频,VR视频播放器(VR Player)使用教程
  4. 5G词汇通俗解释(5G核心网部分)
  5. 常见未授权访问漏洞总结
  6. django-数据库[ 配置 ]
  7. 写论文不会写摘要,演讲不会写开场白,不会写广告词,SCQA模型帮你搞定
  8. 2009 中国协同软件机遇年?
  9. 【C语言】指针进阶第五站,函数指针
  10. 5、win7激活秘钥