基础课8——中文分词

中文分词指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。

例如,对于句子“我爱北京天安门”,中文分词的任务是将这句话切分成一个一个单独的词。根据中文分词的规则,这句话可以被切分成“我”、“爱”、“北京”、“天安门”四个词。

1.英文分词

英文分词是将英文文本切分成一个个单独的单词。英文单词之间通常以空格作为自然分界符,因此英文分词相对比较简单。常用的英文分词工具包括NLTK、spaCy等。以下是一个简单的例子:

import nltk  text = "Hello, how are you? I'm fine, thank you."  
tokens = nltk.word_tokenize(text)  
print(tokens)

输出结果:

['Hello', ',', 'how', 'are', 'you', '?', 'I', "'m", 'fine', ',', 'thank', 'you', '.']

 在这个例子中,我们使用了NLTK库的word_tokenize函数对文本进行分词。分词结果以列表的形式返回,每个单词作为一个独立的元素。

 2.中文分词

中文分词的标准存在不同的版本和依据。

  1. 意义标准:最早可追溯到马建忠的《马氏文通》,其分词标准是以意义为依据,将词语根据其词汇意义进行划分。
  2. 形态标准:在中文语法学中,传统分词方法是按照词的意义划分词类,并照搬印欧语的词类划分方法。这种分词方法简单地将汉语的词类与句子成分对应起来,认为汉语中作主语、宾语的是名词,作定语的是形容词,作谓语的是动词,作状语的是副词。
  3. 功能标准:词的语法功能主要表现一方面是组合能力,主要包括实词与实词的组合能力、实词与虚词的组合能力。不同词类之间是否能够组合、以什么方式组合、组合后发生什么样的语法关系等。另外一方面是词在句子中充当句法结构成分的能力,实词都能充当句子成分,例如名词的显著特点就是可以作主语和宾语,形容词的显著特点是可以作谓语、定语等。

 3.分词方法

分词方法主要有以下几种:

  1. 基于规则的分词方法:基于规则的分词方法通常采用一组预定义的规则或模式,对文本进行分词。这些规则可以基于词法、语法、语义等语言学特征,也可以基于特定的领域知识和应用需求。例如,基于正则表达式的分词方法可以根据预定义的规则将文本切分成符合特定模式的词序列。
  2. 基于统计的分词方法:基于统计的分词方法通常利用机器学习或自然语言处理技术,对大量的语料库进行训练和学习,从而自动地进行分词。这些方法通常会根据词频、语境等信息,对文本中的词汇进行概率计算和预测,从而自动地将文本切分成符合语言规则的词序列。例如,最大匹配法、HMM模型、CRF模型等都是基于统计的分词方法。
  3. 基于深度学习的分词方法:基于深度学习的分词方法通常利用神经网络模型,对大量的语料库进行训练和学习,从而自动地进行分词。这些方法通常会采用循环神经网络(RNN)、长短时记忆网络(LSTM)、卷积神经网络(CNN)等模型,对文本进行逐字的编码和解码,从而自动地将文本切分成符合语言规则的词序列。例如,基于Bi-LSTM的分词方法就是一种基于深度学习的分词方法。

实践证明,基于规则的分词系统效果比不上基于统计学习的分词系统。未登录词造成的分词精度失落至少比分词歧义大5倍以上,基于字的标注系统能够大幅度提高未登录词的识别能力。

3.1基于词典的分词方法

基于词典的分词方法是基于规则的分词方法中的一种,它通常使用一个包含常见词汇的词典,并根据词典中的词汇对文本进行分词。

基于词典的分词方法的基本原理是将待分词文本与词典进行匹配,根据匹配结果进行分词。其分词过程包括以下步骤:

  1. 构建词典:建立一个包含常见词汇的词典,词典中的每个词汇都是一个基本的语义单位。
  2. 匹配过程:将待分词的文本与词典中的词汇逐个进行匹配。匹配时可以采用正向最大匹配、逆向最大匹配或双向最大匹配等方法。
  3. 确定分词结果:根据匹配的结果确定分词的位置,并将分词结果输出。

基于词典的分词方法具有以下特点:

  1. 简单高效:基于词典的分词方法不需要依赖大量的语料库,只需要一个词典即可进行分词。因此,它的分词速度较快,适用于对实时性要求较高的场景。
  2. 准确性高:由于基于词典的分词方法是根据词典进行匹配,因此可以保证分词的准确性。同时,词典可以不断更新,以适应新词汇的出现。
  3. 存在歧义:基于词典的分词方法存在一定的歧义问题。当待分词文本中的词汇不在词典中时,就无法进行匹配,导致分词失败。此外,一些词汇具有多种含义,可能会导致歧义的出现。

常用的基于词典的分词方法包括正向最大匹配法(Maximum Matching)、逆向最大匹配法(Reverse Maximum Matching)、双向最大匹配法(Bi-directional Maximum Matching)等。这些方法根据不同的匹配方向和匹配长度优先级来进行分词,具有较高的准确性和效率。

 3.1.1正向最大匹配法

 3.1.2逆向最大匹配法

3.1.3双向匹配分词法

3.2基于统计的分词方法

基于统计的分词方法是基于统计模型的分词方法,利用训练文本中的统计信息进行分词。其基本原理是根据上下文出现的频率来计算词汇之间的概率,然后根据这些概率来切分词语。

基于统计的分词方法通常采用隐马尔可夫模型(HMM)或条件随机场(CRF)等模型,通过一定的优化方法来进行分词。

基于统计的分词方法具有以下特点:

  1. 准确性较高:基于统计的分词方法利用了大量的文本数据,可以较为准确地切分出词汇。
  2. 适用于不同领域:基于统计的分词方法可以适用于不同的领域和语言,只要具备足够的训练数据就可以进行分词。
  3. 模型复杂度高:基于统计的分词方法需要建立复杂的统计模型,计算量大,需要较高的计算资源。
  4. 需要大量训练数据:基于统计的分词方法需要大量的训练数据来训练模型,才能取得较好的分词效果。

案例说明:

假设我们有一段文本:“我爱北京天安门”,我们希望将其分词为“我”、“爱”、“北京”、“天安门”。

首先,我们需要对文本进行预处理,将其转换为词频统计结果。对于“我爱北京天安门”这句话,统计结果如下:

出现次数
1
1
北京1
天安门1

接下来,我们可以利用HMM模型进行分词。首先,我们需要确定模型中的状态和转移概率。在这个例子中,我们的状态就是上述的四个词,转移概率可以通过训练文本进行学习。具体来说,我们可以利用Baum-Welch算法来估计HMM模型的参数,包括转移概率和发射概率。

假设我们已经得到了转移概率矩阵和发射概率矩阵,接下来就可以利用Viterbi算法来计算最可能的分词结果。根据计算,最可能的分词结果为“我”、“爱”、“北京”、“天安门”。

具体来说,Viterbi算法是一种动态规划算法,用于在HMM模型中寻找最可能的状态序列。在我们的例子中,Viterbi算法的过程如下:

  1. 初始化:对于每个状态Si(i=1,2,3,4),设置一个初始概率P(Si),表示在当前位置为Si的概率。对于所有的状态,设置一个初始概率P(S0),表示在当前位置开始出现Si的概率。根据这些初始概率,我们可以得到一个初始的路径概率P(S0)。
  2. 递推:对于每个时间t(t=1,2,3,4),遍历所有的状态Si,计算在时刻t,以Si为当前状态时的最大路径概率P(Si)。在计算路径概率时,我们需要考虑当前状态Si的发射概率和从上一个时刻转移到当前时刻的转移概率。
  3. 终止:在最后一个时刻,选择路径概率最大的状态作为最终的状态。在我们的例子中,最终的状态就是“天安门”。
  4. 回溯:从最终的状态开始,根据转移概率矩阵回溯到起始状态,得到最可能的分词结果。

最后,我们输出最可能的分词结果“我”、“爱”、“北京”、“天安门”。

实际的分词任务可能需要更复杂的模型和算法,以及更多的训练数据。由于语言模型的复杂性和数据的不充分性,基于统计的分词方法也存在一定的误差率和挑战。

 4.举例

4.1科大讯飞的分词方法

科大讯飞公司采用基于大数据和用户行为进行分词。其分词系统具备多种功能,包括分词、词性标注和命名实体识别等,旨在全面支撑机器对基础文本的理解与分析。

在分词方面,科大讯飞公司的分词系统可以切分成词序列。对于汉语中的词,它是承载语义的最基本的单元。分词是信息检索、文本分类、情感分析等多项中文自然语言处理任务的基础。

例如,原文:科大讯飞是一家专注于智能语音和人工智能领域的公司。

分词结果:科大/讯飞/是/一家/专注于/智能/语音/和/人工智能/领域/的/公司。

词性标注结果:科大/ORG讯飞/ORG是/v一家/m专注于/v智能/n语音/n和/c人工智能/n领域/n的/u公司/n。

其中,“科大”和“讯飞”是公司名,“是”是动词,“一家”是数量词,“专注于”是动词,“智能”和“语音”是名词,“和”是连词,“人工智能”是名词,“领域”是名词,“的”是助词,“公司”是名词。

此外,科大讯飞公司的分词系统还具备词性标注和命名实体识别等功能。词性标注是指为自然语言文本中的每个词汇赋予一个词性的过程,例如动词、名词、形容词等。命名实体识别则是指在句子的词序列中定位并识别人名、地名、机构名等实体。

这些功能可以帮助机器更好地理解文本,并进行更准确的分析和处理。科大讯飞公司的分词系统基于大数据和用户行为进行训练和优化,以提高其分词的准确性和效率。

4.2代码实战

举个例子,我们可以使用jieba分词库来进行中文分词。jieba分词库是一个基于Python的中文分词工具,支持三种分词模式:精确模式、全模式和搜索引擎模式。

下面是一个使用jieba分词库进行中文分词的例子:

import jiebatext = "我爱自然语言处理技术"
seg_list = jieba.cut(text, cut_all=False)
print(" / ".join(seg_list))

输出结果为:

我爱 / 自然语言 / 处理 / 技术

详细代码: 

import jieba  
import jieba.analyse  
from tkinter import *  # 预处理数据  
def pre_process(text):  # 去除停用词  stopwords = ["的", "了", "在", "是", "我", "有", "和", "就", "不", "人", "都", "一", "一个", "上", "也", "很", "到", "说", "要", "去", "你", "会", "着", "没有"]  text = [word for word in text if word not in stopwords]  return text  # 训练模型  
def train_model(text):  # 使用jieba库训练模型  jieba.analyse.set_stop_words(stopwords)  jieba.analyse.set_idf_path("idf.txt")  seg_list = jieba.cut(text)  return seg_list  # 实现分词算法  
def segment(text):  # 预处理数据  text = pre_process(text)  # 训练模型  seg_list = train_model(text)  # 对新文本进行分词  new_seg_list = jieba.cut(text)  return new_seg_list  # 可视化界面  
def visualize():  root = Tk()  root.title("中文分词工具")  label = Label(root, text="请输入待分词的文本:")  label.pack()  entry = Entry(root)  entry.pack()  button = Button(root, text="分词", command=lambda: segment(entry.get()))  button.pack()  label2 = Label(root, text="分词结果:")  label2.pack()  result = Text(root)  result.pack()  root.mainloop()  # 调用可视化界面进行分词处理  
visualize()

该示例代码包括预处理、训练、实现分词算法和可视化界面的实现。其中,预处理函数pre_process用于去除停用词,训练函数train_model使用jieba库训练模型,实现分词算法函数segment对新的文本进行分词处理,可视化界面函数visualize使用Python的GUI库Tkinter创建一个简单的界面,用户可以输入待分词的文本,并显示分词结果。

基础课7——数据预处理-CSDN博客文章浏览阅读122次。在智能客服系统中,数据预处理是进行自然语言处理(NLP)的关键步骤之一。它是对用户输入的文本数据进行分析、处理和转换的过程,目的是将原始文本数据转化为计算机可理解的语言,为后续的智能回答提供支持。https://blog.csdn.net/2202_75469062/article/details/134429077?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/200792.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[vxe-table] expandAll:true 当table数据更新后无法展开,只有第一次能展开才能生效的问题

:tree-config"{rowField: id,parentField: parentId,expandAll: true,reserve: true, }" :row-config"{ keyField: id, isHover: true }"参考: vxe tree expandAll:true当table数据更新后无法展开,只有第一次能展开才能…

go-zero微服务的使用

一、入门案例 1、使用goland创建一个工程 2、新建一个user.proto syntax "proto3";package user; // 这个地方表示生成的go的包名叫user option go_package "./user";message UserInfoRequest {int64 userId 1; }message UserInfoResponse {int64 user…

SwiftUI 如何动态开始和停止播放永久重复(repeatForever)动画

0. 功能需求 在 SwiftUI 丰富多彩的动画世界中,我们有时希望可以随意开始和停止永久循环(repeatForever)的动画,不过这时往往会产生错误的动画“叠加”效果。 从上图可以看到:虽然我们希望密码输入框背景只在用户输入密码时才发生闪烁,但顶部的密码输入框随着不断输入其…

Speech | openSMILE语音特征提取工具

官方地址:openSMILE 3.0 - audEERING 使用指导:openSMILE — openSMILE Documentation (audeering.github.io) openSMILE 简介 openSMILE是一款以命令行形式运行的工具,通过配置config文件来提取音频特征。主要应用于语音识别、情感计算、音…

专业课140+总分420+东南大学920专业综合考研,信息学院通信专业考研分享

专业课140总分420东南大学920专业综合考研,信息学院通信专业考研分享 我是三月开始系统考研备战,寒假先看的高数全书,奈何在家效率极其低下,才草草看了前三四章。回校后学习的比较认真,每天大概保持10个小时左右&…

中间件安全:Apache Tomcat 弱口令.(反弹 shell 拿到服务器的最高控制权.)

中间件安全:Apache Tomcat 弱口令. Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。 通过弱口令登录后台,部署 war 包…

使用Arrays.asList与不使用的区别

在写算法的时候,遇到了有的题解使用的是Arrays.asList,也有的是直接新建一个List集合将元素加进去的。 看了一下算法的时间,两者居然相差了9秒。 算法原地址: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长…

手机运行内存大揭秘:探索你手机的超级大脑!

你有没有想过,为什么有些手机看起来外形相似,但运行速度却有如天壤之别?答案就在手机的运行内存里!今天,我们就一起揭开手机运行内存的神秘面纱,探索你手机的超级大脑! 01 运行内存究竟是干什么…

vue3-响应式函数

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-响应式函数 目录 ref 响应式函数 引言: ref 函数 reactive 函数 Reactive 与…

【软件工程师从0到1】- 继承 (知识汇总)

前言 介绍:大家好啊,我是hitzaki辰。 社区:(完全免费、欢迎加入)日常打卡、学习交流、资源共享的知识星球。 自媒体:我会在b站/抖音更新视频讲解 或 一些纯技术外的分享,账号同名:hi…

ES 查询语法-详解

文章目录 1.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.2.1.使用场景1.2.2.基本语法1.2.3.总结 1.3.精准查询1.3.1.term查询1.3.2.总结 1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff…

uniapp开发小程序,包过大解决方案

1、首先和大家说一下 微信小程序 主包限制不能超过2M 分包一共不能超过8M 然后具体解决优化步骤如下, 将主包进行分包 在pages.json 下subPackages里面进行配置分包 分包配置完 配置过的文件都需要进行修改对应的路径 2 、 在运行的时候 一定要勾选 压缩代码 有…

vatee万腾科技先锋之选:vatee创新力驱动着未来发展

在科技潮流的浩荡前行中,Vatee万腾崭新的科技先锋之选正以强大的创新力引领着未来的发展。Vatee万腾凭借其前瞻性的技术理念和卓越的创新实践,成为业界的引领者,为整个科技行业树立了标杆。 Vatee万腾不仅仅是一家科技公司,更是一…

Redis篇---第十三篇

系列文章目录 文章目录 系列文章目录前言一、redis的过期策略以及内存淘汰机制二、Redis 为什么是单线程的三、Redis 常见性能问题和解决方案?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看…

URAT串口通信协议

UART是异步串行全双工总线,面向设备和设备之间的连接 配置相关内容 1、串口为串行通讯方式,代表一个时钟周期,只可以收发一位数据 2、115200代表什么,以及115200单位 单位:bps(比特率、二进制/秒) 115200代表&#…

贪吃蛇游戏

一、创建项目,创建文件夹images,放入图片,创建两个包com.snake.controller和com.snake.view。 二、主要游戏界面 package com.snake.view;import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Frame…

x shell 用作串口调试助手

x shell 用作串口调试助手 Xshell 介绍 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以在Wi…

140.【鸿蒙OS开发-01】

鸿蒙开发 (一)、初识鸿蒙1.初识鸿蒙(1).移动通讯技术的发展(2).完整的鸿蒙开发 (二)、鸿蒙系统介绍1.鸿蒙系统的官方定义(1).鸿蒙操作系统概述(2).鸿蒙的生态 2.鸿蒙系统的特点3.鸿蒙和安卓的对比4.鸿蒙开发的发展前景 (三)、鸿蒙开发准备工作1.鸿蒙OS的完整开发流程2.注册并实…

深度学习人体跌倒检测 -yolo 机器视觉 opencv python 计算机竞赛

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…

4.3、Linux进程(2)

个人主页:Lei宝啊 愿所有美好如期而遇 通过系统调用创建进程--fork函数 结果是什么呢? 为什么会出来三个打印呢? 就是因为父进程调用了fork函数创建出了子进程的task_struct,但是一个进程不止task_struct,还有代码和数据,他们…