NLP入门干货:手把手教你3种中文规则分词方法
大数据DT
共 5258字,需浏览 11分钟
· 2020-10-28
导读:本文将讲解中文自然语言处理的第一项核心技术——中文分词技术,它是中文自然语言处理非常关键和核心的部分。
作者:杜振东 涂铭
来源:大数据DT(ID:hzdashuju)
介绍中文分词的概念与分类; 介绍常见的规则分词方法。
从左向右取待切分汉语句的m个字符作为匹配字段,m为机器词典中最长词条的字符数。 查找机器词典并进行匹配。若匹配成功,则将这个匹配字段作为一个词切分出来。若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程,直到切分出所有词为止。
class MM(object):
def __init__(self):
self.window_size = 3
def cut(self,text):
result=[]
index=0
text_length = len(text)
dic = ['研究','研究生','生命','起源']
while text_length > index:
for size in range(self.window_size+index,index,-1):#4,0,-1
piece = text[index:size]
if piece in dic:
index = size-1
break
index = index + 1
result.append(piece)
return result
text = '研究生命的起源'
tokenizer = MM()
print(tokenizer.cut(text))
['研究生', '命', '的', '起源']
class RMM(object):
def __init__(self):
self.window_size = 3
def cut(self, text):
result = []
index = len(text)
dic = ['研究', '研究生', '生命', '命', '的', '起源']
while index > 0:
for size in range(index-self.window_size ,index):
piece = text[size:index]
if piece in dic:
index = size + 1
break
index = index - 1
result.append(piece)
result.reverse()
return result
text = '研究生命的起源'
tokenizer = RMM()
print(tokenizer.cut(text))
['研究', '生命', '的', '起源']
如果正反向分词结果词数不同,则取分词数量较少的那个结果(上例:“南京市/江/大桥”的分词数量为3,而“南京市/长江大桥”的分词数量为2,所以返回分词数量为2的结果)。 如果分词结果词数相同,则:
分词结果相同,就说明没有歧义,可返回任意一个结果。 分词结果不同,返回其中单字较少的那个。比如前文示例代码中,正向最大匹配返回的结果为“['研究生', '命', '的', '起源']”,其中单字个数为2个;而逆向最大匹配返回的结果为“['研究', '生命', '的', '起源']”,其中单字个数为1。所以返回的是逆向最大匹配的结果。
#统计单字成词的个数
def count_singlechar(word_list):
return sum(1 for word in word_list if len(word) == 1)
def bidirectional_segment(text):
mm = MM()
rmm = RMM()
f = mm.cut(text)
b = rmm.cut(text)
if (len(f) < len(b)):
return f
elif (len(f) > len(b)):
return b
else:
if (count_singlechar(f) >= count_singlechar(b)):
return b
else:
return f
print(bidirectional_segment('研究生命的起源'))
['研究', '生命', '的', '起源']
不断维护词典是非常烦琐的,新词总是层出不穷,人工维护费时费力; 随着词典中条目数的增加,执行效率变得越来越低; 无法解决歧义问题。
关于作者:杜振东,国家标准委人工智能技术专家和AIIA(中国人工智能产业发展联盟)技术专家。拥有8年机器学习与文本挖掘相关技术经验,6年中文自然语言处理相关项目实战经验,擅长PyTorch、TensorFlow等主流深度学习框架,擅长运用NLP前沿技术解决真实项目的难题。
涂铭,数据架构师和人工智能技术专家,曾就职于阿里,现就职于腾讯。对大数据、自然语言处理、图像识别、Python、Java等相关技术有深入的研究,积累了丰富的实践经验。
评论
.NET 开源工具库,集成超过1000个扩展方法
前言推荐一个.NET 开源项目,集成了超过1000个扩展方法。项目简介Z.ExtensionMethods是由zzzprojects公司开发并维护的一款开源库,为.NET开发人员提供一系列实用的扩展方法,可以减少重复劳动、提高开发效率,支持.NET Framework 和 .NET Core。该项目
dotNET全栈开发
10
chatgpt实现NLP基本任务(实体识别、关系抽取、属性抽取、事件抽取、文本分类)
向AI转型的程序员都关注了这个号👇👇👇基础函数一、实体识别抽取文本:驻港部队从1993年初开始组建,1996年1月28日组建完毕,1997年7月1日0时进驻香港,取代驻港英军接管香港防务,驻港军费均由中央人民政府负担。《中华人民共和国香港特别行政区驻军法》规定了驻香港部队的职责为防备和抵抗侵略,保卫
机器学习AI算法工程
10
教你如何在 Linux 系统中查看系统日志
转自:开源LinuxLinux 系统提供了强大的日志功能,可以记录系统和应用程序的各种事件和错误信息。系统日志对于故障排除和性能监控非常重要。一、使用命令行工具查看系统日志1. 使用 journalctl 命令查看系统日志:journalctl 命令是 systemd 日志管理器的客户端工具,它可以
良许Linux
0
《拆掉思维里的墙》:让你彻底走出恐惧的两张方法
梭罗在《瓦尔登湖》中说道:“无论你的生活多么艰难,请正视它,好好地活下去;别逃避它,也别咒骂它。它并没有你那么糟糕。”很多我们恐惧的事情,一旦我们真正去正视它的时候,其实它并没有那么可怕。恐惧其实就是一个欺软怕硬的货色,遇强它就弱,遇弱它就强。遇到问题,自己强势一点,相信一定可以解决它,那么心中那股
胖琪的升级之路
23
APP保持屏幕常亮的几种方法
和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、申请WAKE_LOCK 权限二、Activity 中设置FLAG_KEEP_SCREEN_ON FLAG一、申请WAKE_LOCK 权限在AndroidMainfest.xml 中申请 WAKE_LOCK
程序员Android
10
【机器学习】机器学习中需要了解的 5 种采样方法
仅作学术分享,不代表本公众号立场,侵权联系删除转载于:雷锋网我每天都在努力学习许多算法,所以我想列出一些最常见和最常用的算法。本文介绍了在处理数据时可以使用的一些最常见的采样技术。 简单随机抽样假设您要选择一个群体的子集,其中该子集的每个成员被选择的概率都相等。下面
机器学习初学者
10
CPU的入门知识
不管你玩硬件还是做软件,你的世界都少不了计算机最核心的 —— CPU。01CPU是什么?CPU与计算机的关系就相当于大脑和人的关系,它是一种小型的计算机芯片,通常嵌入在电脑的主板上。CPU的构建是通过在单个计算机芯片上放置数十亿个微型晶体管来实现。这些晶体管使它能够执行运行存储在系统内存中的程序所需
机器学习算法与Python实战
10
【NLP】一文带你了解LLAMA(羊驼)系列
作者丨曼城周杰伦 来源丨深蓝AI 编辑丨极市平台导读 本文会重点介绍LLAMA系列的改进点,希望大家通过这一篇文章,能快速地了解LLAMA系列的改进工作。前言:自从OpenAI推出Chat GPT系列后,也标志着自然语
机器学习初学者
10