NLP基础—jieba分词

server/2024/10/20 1:24:08/

jieba分词

支持四种分词模式

  • 精确模式 试图将句子最精确地切开,适合文本分析;
  • 全模式 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  • 搜索引擎模式 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
  • paddle模式 利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。 paddle模式使用需安装paddlepaddle-tiny.

jieba分词安装

1. 全自动安装
pip install jieba 
2. 半自动安装

先下载 http://pypi.python.org/pypi/jieba/ 解压后运行 python setup.py install

3. 手动安装

将 jieba 目录放置于当前目录或者 site-packages 目录

通过 import jieba 来引用

如果需要使用paddle模式下的分词和词性标注功能,请先安装paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1

主要功能

分词
1、基本步骤

初始化


初始化时,先加载词典文件dict.txt,遍历每一行,生成词语-词数的键值对和总词数,并将生成结果保存到cache中,下次直接从cache中读取即可。

初始化可以简单理解为,读取词典文件,构建词语-词数键值对,方便后面步骤中查词典,也就是字符串匹配。

切分短语


  1. 首先进行将语句转换为UTF-8或者GBK。
  2. 然后根据用户指定的模式,是否全模式,是否采用HMM隐马尔科夫,来设置cut方式。
  3. 然后根据正则,将输入文本分为一个个语句。
  4. 最后遍历语句,对每个语句单独进行分词。

构建DAG


看构建DAG的过程。

先遍历一个个切分好的短语,对这些短语来进行分词。

首先要构建短语的有向无环图DAG。查词典进行字符串匹配的过程中,可能会出现好几种可能的切分方式,将这些组合构成有向无环图,如下图所示:

img

得到语句的有向无环图DAG,DAG中记录了某个词的开始位置和它可能的结束位置。开始位置作为key,结束位置是一个list。

上面语句的完整DAG为: { 0: [1, 2], 1: [2], 2: [3, 4, 5], 3: [4], 4: [5] }

比如位置0的DAG表达为 {0: [1, 2]}, 也就是说0位置为词的开始位置时,1, 2位置都有可能是词的结束位置。

动态规划构建Route,计算从语句末尾到语句起始,DAG中每个节点到语句结束位置的最大路径概率,以及概率最大时节点对应词语的结束位置。

def calc(self, sentence, DAG, route):N = len(sentence)route[N] = (0, 0)logtotal = log(self.total)for idx in xrange(N - 1, -1, -1):
# route[idx] = (该汉字到最后一个汉字的最大路径概率, # 最大路径概率时该汉字对应的词语结束位置).
# 遍历DAG中该汉字节点的结束位置,也就是DAG[idx],# 计算idx到x之间构成的词语的概率,然后乘以x到语句结束位置的最大概率,# 即可得到idx到语句结束的路径最大概率.route[idx] = max((log(self.FREQ.get(sentence[idx:x + 1]) or 1) - log(total) 

http://www.ppmy.cn/server/4972.html

相关文章

centos修改启动项加载不同内核

一.背景: 虚拟机中有时需要编译好几个内核版本,make install后系统存在几个内核版本。需要再哪个内核上开发调试就启动特定的内核版本。这就需要修改启动时的内核版本,再物理机或虚拟机启动时可以上下键选择。但有时是docket云环境中或远程时…

高频前端面试题汇总之Vue篇

1. Vue的基本原理 当一个Vue实例创建时,Vue会遍历data中的属性,用 Object.defineProperty(vue3.0使用proxy )将它们转为 getter/setter,并且在内部追踪相关依赖,在属性被访问和修改时通知变化。 每个组件实…

React + 项目(从基础到实战) -- 第六期

引入ant design ui ui 组件库介绍 组件总览 - Ant Design (antgroup.com) 安装 - Material-UI (mui.com) Tailwind UI - Official Tailwind CSS Components & Templates 引入antd Ant Design of React - Ant Design 常用组件 // 引入antd 美化import { Layout } from a…

解锁棋盘之谜:探索N皇后问题的全方位解决策略【python 力扣51题】

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析…

Python革命:如何利用AI数据分析引领人工智能的未来

在人工智能迅速发展的今天,Python语言已经成为了推动AI领域发展的一大利器。作为一种高级编程语言,Python以其简洁的语法和强大的功能,为AI数据分析提供了强有力的支持,帮助开启了人工智能的新时代。 Python的核心优势 Python的最…

【Qt】:对话框(二)

对话框 一.消息对话框(QMessageBox)1.自己构建2.使用静态函数构建 二.颜色对话框(QDialog)三.文件对话框(QFileDialog)四.字体对话框(QFontDialog)五.输入对话框(QInputD…

(007)Blender 根据顶点组分离模型

1.选中模型,并且进入【3D视图】【编辑模式】: 2.选择顶点组: 3.分离选中项:

数据结构-基于ArrayList的源码模拟

文章目录 继承关系 :1. 构造方法的模拟2. 扩容机制的分析3. 查找方法的模拟4. 获取,修改元素的方法模拟5. 添加元素的模拟6. 删除元素的模拟7. removeAll与retainAll的模拟总结: 边缘方法以及总代码 继承关系 : 1. 构造方法的模拟 源码中我们的ArrayList的构造方法给出了三种实…