欢迎访问皮皮网官网
皮皮网

【抢单程序插件源码】【源码大富翁】【duckchat源码ios】jieba分词 源码_jieba分词源码目录

时间:2024-12-28 16:30:17 分类:娱乐 来源:ping 源码

1.python爬虫学习笔记——5. jieba库中文分词用法
2.Jieba实例1分析词频
3.jieba:一个优秀的分分词中文分词Python库
4.jieba源码解析(一)——中文分词
5.jieba分词详解

jieba分词 源码_jieba分词源码目录

python爬虫学习笔记——5. jieba库中文分词用法

       整理自< 结巴中文分词的用法>

       特点

       演示文档

       安装说明 代码对 Python 2/3 均兼容

       算法

       主要功能

       1. jieba 分词有三种模式,并且支持新建自定义分词器

       代码示例

       输出:

       2. 添加自定义词典

       载入词典

       范例: 自定义词典: /fxsjy/jieba/blob/master/test/userdict.txt 用法示例: /fxsjy/jieba/blob/master/test/test_userdict.py

       调整词典

       代码示例:

       3. 关键词提取

       基于 TF-IDF 算法的词源关键词抽取

       import jieba.analyse

       jieba.analyse.extract_tags(sentence, topK=, withWeight=False, allowPOS=())

       sentence 为待提取的文本

       topK 为返回几个 TF/IDF 权重最大的关键词,默认值为

       withWeight 为是码j目录否一并返回关键词权重值,默认值为 False

       allowPOS 仅包括指定词性的源码词,默认值为空,分分词即不筛选

       分词词性可参见博客:[词性参考]( blog.csdn.net/HHTNAN/ar...)

       jieba.analyse.TFIDF(idf_path=None)

       新建 TFIDF 实例,词源抢单程序插件源码idf_path 为 IDF 频率文件

       代码示例 (关键词提取) /fxsjy/jieba/blob/master/test/extract_tags.py

       关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的码j目录路径

       用法: jieba.analyse.set_idf_path(file_name)

       # file_name为自定义语料库的路径

       自定义语料库示例: github.com/fxsjy/jieba/...

       用法示例: github.com/fxsjy/jieba/...

       关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径

       用法: jieba.analyse.set_stop_words(file_name)

       # file_name为自定义语料库的路径

       自定义语料库示例: github.com/fxsjy/jieba/...

       用法示例: github.com/fxsjy/jieba/...

       关键词一并返回关键词权重值示例

       用法示例: ttps://github.com/fxsjy/jieba/blob/master/test/extract_tags_with_weight.py

       基于 TextRank 算法的关键词抽取

       jieba.analyse.textrank(sentence, topK=, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))

       直接使用,接口相同,源码注意默认过滤词性。分分词

       jieba.analyse.TextRank()

       新建自定义 TextRank 实例

       算法论文: TextRank: Bringing Order into Texts

       基本思想:

       使用示例: 见 test/demo.py

       4. 词性标注

       5. 并行分词

       6. Tokenize:返回词语在原文的词源起止位置

       输出:

       输出

       7. ChineseAnalyzer for Whoosh 搜索引擎

       8. 命令行分词

       使用示例:python -m jieba news.txt > cut_result.txt

       命令行选项(翻译):

       延迟加载机制 jieba 采用延迟加载,import jieba 和 jieba.Tokenizer()不会立即触发词典的码j目录加载,一旦有必要才开始加载词典构建前缀字典。源码

       如果你想手工初始 jieba,分分词也可以手动初始化。词源

       下面部分内容整理自< python jieba分词(结巴分词)、码j目录提取词,加载词,源码大富翁修改词频,定义词库>

       二、 常用NLP扩充知识点(python2.7)

       这几个点在知乎爬虫程序中很有用处

       Part 1. 词频统计、降序排序

       Part 2. 人工去停用词

       标点符号、虚词、连词不在统计范围内

       Part 3. 合并同义词

       将同义词列举出来,按下Tab键分隔,把第一个词作为需要显示的词语,后面的词语作为要替代的同义词,一系列同义词放在一行。

       这里,“北京”、“首都”、“京城”、“北平城”、“故都”为同义词。duckchat源码ios

       Part 4. 词语提及率

       主要步骤:分词——过滤停用词(略)——替代同义词——计算词语在文本中出现的概率。

       Part 5. 按词性提取

Jieba实例1分析词频

       分享一个基于jieba库的Python 代码,它可以对文本进行分词和词频统计。

       代码效果:对文本文档(yangben.txt)分词并统计词频,将出现频率最高的前个词语及出现次数,显示在屏幕,将出现频率最高的前个词语,保存在指定文件内(yangben_.txt)

       代码注释:以下为代码中的相关知识点和操作说明

       import 语句:用于导入 Python 中的库或模块,例如使用 import module_name 导入整个模块,或 from module_name import function_name 导入模块中的具体函数。

       分词库 jieba 库:jieba 库是一款用于中文分词的工具库,使用 jieba.lcut() 函数对字符串进行分词操作,返回一个列表。同时,jieba.add_word() 可添加新词汇,jieba.load_userdict() 可加载自定义词典。dsd解码源码

       文件操作:使用 with open('filename', 'mode') as f: 语句打开文件,进行读取或写入操作。filename 为文件名,mode 为文件打开模式('r' 表示只读,'w' 表示写入),as f 将打开的文件赋值给变量 f,便于后续操作。

       字典数据类型:使用字典保存每个词汇出现的次数,通过遍历列表对字典进行添加和更新操作。使用 key 获取字典中的值或设置默认值。

       列表排序:使用 sorted() 函数对字典按照值进行降序排序,并将结果保存在列表中。sorted() 函数返回一个新的排好序的列表,原列表顺序不变。

       字符串拼接:使用 print(word,count) 将变量 word 和 count 拼接成字符串输出到屏幕上。

       格式化字符串:使用 Python 字符串格式化方法将变量 word 和 count 按照指定格式输出到文件中。macd自带源码具体方法是使用占位符 { } 将变量嵌入到字符串中,然后通过 format() 方法将变量和占位符一一对应。

       lambda表达式:使用 lambda 表达式作为排序函数的 key 参数。lambda 表达式是一种匿名函数,可方便地编写简短的函数代码,节省时间和空间。该表达式的作用是取键值对中的值作为比较依据进行排序。

       切片操作:使用切片操作 [:] 和 [:] 获取列表的前 个或前 个元素,以限制输出结果的长度。该操作可应用于列表、字符串等类型的数据,方便进行部分截取或取出指定范围的子串。

       反斜杠转义:使用反斜杠 ' ' 表示换行符,使每个词汇及其出现次数单独占据一行,并按一定格式排列。

jieba:一个优秀的中文分词Python库

       jieba是一款广受好评的中文分词库,具备高效与精确性,常用于自然语言处理与信息检索等场景。本篇内容旨在深入解析jieba库的基础与高级应用,提供给读者全面的使用指南,助力Python编程与自然语言处理技能的提升。无论你属于初学者还是有一定经验的开发者,都能在此获取实用知识与技巧。

       一. 安装

       二. 基本用法

       1. 导入库

       2. 进行分词

       使用方式如下:jieba.cut(str,use_paddle=True,cut_all=True,HMM=True)

       其中,参数说明:

       use_paddle:是否启用paddle模式

       cut_all:是否采用全模式

       HMM:是否启用HMM模型

       3. 全模式分词:jieba.cut(str,cut_all=True)

       4. 搜索模式分词:jieba.cut_for_search()

       5. 添加自定义词汇:jieba.add_word(word)

       6. 删除已添加的词汇:jieba.del_word(word)

       7. 加载自定义词汇库:jieba.load_userdict(file_name)

       加载自定义词汇库的格式要求为:每条词汇占一行,每行包含三个部分,即词汇、词频、词性,三者之间以空格分隔,顺序不能颠倒。示例如下:

       词汇 [词频] [词性]

       自定义词汇文件(dict.txt)示例:

       词汇1 [词频] [词性]

       词汇2 [词频] [词性]

       ...

       更多具体用法,请查阅GitHub官方文档。

jieba源码解析(一)——中文分词

       全模式解析:

       全模式下的中文分词通过构建字典树和DAG实现。首先加载字典,字典树中记录词频,例如词"不拘一格"在字典树中表示为{ "不" : 0, "不拘" : 0, "不拘一" : 0, "不拘一格" : freq}。接着构造DAG,表示连续词段的起始位置。例如句子'我来到北京清华大学',分词过程如下:

       1. '我':字典树中key=0,尝试'我来',不在字典,结束位置0寻找可能的分词,DAG为 { 0:[0]}。

       2. '来':字典树中key=1,尝试'来到',在字典,继续尝试'来到北',不在字典,结束位置1寻找可能的分词,DAG为 { 0:[0], 1:[1]}。

       3. '到':字典树中key=2,尝试'来到北',不在字典,结束位置2寻找可能的分词,DAG为 { 0:[0], 1:[1], 2:[2]}。

       4. 以此类推,最终形成所有可能分词结果:我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学。

       全模式的关键代码涉及字典树和DAG的构建与使用。

       精确模式与HMM模式解析:

       精确模式与HMM模式对句子'我来到北京清华大学'的分词结果分别为:

       精确模式:'我'/'来到'/'北京'/'清华大学'

       HMM模式:'我'/'来到'/'了'/'北京'/'清华大学'

       HMM模式解决了发现新词的问题。解析过程分为三个步骤:

       1. 生成所有可能的分词。

       2. 生成每个key认为最好的分词。

       3. 按照步骤2的方式对每个key的结果从前面向后组合,注意判断单字与下个单字是否可以组成新词。

       最后,解析结果为:我/ 来到/ 北京/ 清华/ 清华大学

       HMM模式中的Viterbi算法在jieba中用于发现新词。算法通过统计和概率计算,实现新词的发现与分词。

       具体应用中,HMM模型包含五个元素:隐含状态、可观测状态、初始状态概率矩阵、隐含状态转移概率矩阵、观测状态转移概率矩阵。模型利用这些元素实现状态预测与概率计算,进而实现中文分词与新词发现。

       在Viterbi算法中,重要的是理解隐含状态、可观测状态、转移概率矩阵之间的关系,以及如何利用这些信息进行状态预测和概率计算。具体实现细节在代码中体现,包括字典树构建、DAG构造、概率矩阵应用等。

jieba分词详解

        “结巴”分词是一个Python 中文分词组件,参见 /fxsjy/jieba

        可以对中文文本进行分词、词性标注、关键词抽取等功能,并且支持自定义词典。

        本文包括以下内容:

        1、jieba分词包的安装

        2、jieba分词的使用教程

        3、jieba分词的工作原理与工作流程

        4、jieba分词所涉及到的HMM、TextRank、TF-IDF等算法介绍

        可以直接使用pip来进行安装:

        sudo pip install jieba

        或者

        sudo pip3 install jieba

        关键词抽取有两种算法,基于TF-IDF和基于TextRank:

        jieba分词有三种不同的分词模式:精确模式、全模式和搜索引擎模式:

        对应的,函数前加l即是对应得到list结果的函数:

        精确模式是最常用的分词方法,全模式会将句子中所有可能的词都列举出来,搜索引擎模式则适用于搜索引擎使用。具体的差别可在下一节工作流程的分析中详述。

        在上述每个函数中,都有名为HMM的参数。这一项表示是否在分词过程中利用HMM进行新词发现。关于HMM,本文附录中将简述相关知识。

        另外分词支持自定义字典,词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

        具体使用方法为:

        关键词抽取的两个函数的完整参数为:

        可以通过

        来打开或关闭并行分词功能。

        个人感觉一般用不到,大文件分词需要手动实现多进程并行,句子分词也不至于用这个。

        jieba分词主要通过词典来进行分词及词性标注,两者使用了一个相同的词典。正因如此,分词的结果优劣将很大程度上取决于词典,虽然使用了HMM来进行新词发现。

        jieba分词包整体的工作流程如下图所示:

        下面将根据源码详细地分析各个模块的工作流程。

        在之后几节中,我们在蓝色的方框中示范了关键步骤的输出样例或词典文件的格式样例。在本节中都采用类似的表示方式。

        jieba分词中,首先通过对照典生成句子的有向无环图,再根据选择的模式不同,根据词典寻找最短路径后对句子进行截取或直接对句子进行截取。对于未登陆词(不在词典中的词)使用HMM进行新词发现。

        词典的格式应为

        word1 freq1 word_type1

        word2 freq2 word_type2

        …

        其中自定义用户词典中词性word_type可以省略。

        词典在其他模块的流程中可能也会用到,为方便叙述,后续的流程图中将会省略词典的初始化部分。

        图b演示了搜索引擎模式的工作流程,它会在精确模式分词的基础上,将长词再次进行切分。

        在这里我们假定读者已经了解HMM相关知识,如果没有可先行阅读下一章内容中的HMM相关部分或者跳过本节。

        在jieba分词中,将字在词中的位置B、M、E、S作为隐藏状态,字是观测状态,使用了词典文件分别存储字之间的表现概率矩阵(finalseg/prob_emit.py)、初始概率向量(finalseg/prob_start.py)和转移概率矩阵(finalseg/prob_trans.py)。这就是一个标准的解码问题,根据概率再利用viterbi算法对最大可能的隐藏状态进行求解。

        词性分析部分与分词模块用了同一个基础的分词器,对于词典词的词性,将直接从词典中提取,但是对于新词,词性分析部分有一个专属的新词及其词性的发现模块。

        用于词性标注的HMM模型与用于分词的HMM模型相似,同样将文字序列视为可见状态,但是隐藏状态不再是单单的词的位置(B/E/M/S),而变成了词的位置与词性的组合,如(B,v)(B,n)(S,n)等等。因此其初始概率向量、转移概率矩阵和表现概率矩阵和上一节中所用的相比都要庞大的多,但是其本质以及运算步骤都没有变化。

        具体的工作流程如下图所示。

        jieba分词中有两种不同的用于关键词抽取的算法,分别为TextRank和TF-IDF。实现流程比较简单,其核心在于算法本身。下面简单地画出实现流程,具体的算法可以参阅下一章内容。

        TextRank方法默认筛选词性,而TF-IDF方法模型不进行词性筛选。

        在本章中,将会简单介绍相关的算法知识,主要包括用于新词发现的隐马尔科夫模型和维特比算法、用于关键词提取的TextRank和TF-IDF算法。

        HMM即隐马尔科夫模型,是一种基于马尔科夫假设的统计模型。之所以为“隐”,是因为相较于马尔科夫过程HMM有着未知的参数。在世界上,能看到的往往都是表象,而事物的真正状态往往都隐含在表象之下,并且与表象有一定的关联关系。

        其中,S、O分别表示状态序列与观测序列。

        如果读者还对这部分内容心存疑问,不妨先往下阅读,下面我们将以一个比较简单的例子对HMM及解码算法进行实际说明与演示,在读完下一小节之后再回来看这些式子,或许能够恍然大悟。

        下面以一个简单的例子来进行阐述:

        假设小明有一个网友小红,小红每天都会在朋友圈说明自己今天做了什么,并且假设其仅受当天天气的影响,而当天的天气也只受前一天天气的影响。

        于小明而言,小红每天做了什么是可见状态,而小红那里的天气如何就是隐藏状态,这就构成了一个HMM模型。一个HMM模型需要有五个要素:隐藏状态集、观测集、转移概率、观测概率和初始状态概率。

        即在第j个隐藏状态时,表现为i表现状态的概率。式中的n和m表示隐藏状态集和观测集中的数量。

        本例中在不同的天气下,小红要做不同事情的概率也不同,观测概率以表格的形式呈现如下:

        其中

        除此之外,还需要一个初始状态概率向量π,它表示了观测开始时,即t=0时,隐藏状态的概率值。本例中我们指定π={ 0,0,1}。

        至此,一个完整的隐马尔科夫模型已经定义完毕了。

        HMM一般由三类问题:

概率计算问题,即给定A,B,π和隐藏状态序列,计算观测序列的概率;

预测问题,也成解码问题,已知A,B,π和观测序列,求最优可能对应的状态序列;

学习问题,已知观测序列,估计模型的A,B,π参数,使得在该模型下观测序列的概率最大,即用极大似然估计的方法估计参数。

        在jieba分词中所用的是解码问题,所以此处对预测问题和学习问题不做深入探讨,在下一小节中我们将继续以本节中的例子为例,对解码问题进行求解。

        在jieba分词中,采用了HMM进行新词发现,它将每一个字表示为B/M/E/S分别代表出现在词头、词中、词尾以及单字成词。将B/M/E/S作为HMM的隐藏状态,而连续的各个单字作为观测状态,其任务即为利用观测状态预测隐藏状态,并且其模型的A,B,π概率已经给出在文件中,所以这是一个标准的解码问题。在jieba分词中采用了Viterbi算法来进行求解。

        Viterbi算法的基本思想是:如果最佳路径经过一个点,那么起始点到这个点的路径一定是最短路径,否则用起始点到这点更短的一条路径代替这段,就会得到更短的路径,这显然是矛盾的;从起始点到结束点的路径,必然要经过第n个时刻,假如第n个时刻有k个状态,那么最终路径一定经过起始点到时刻n中k个状态里最短路径的点。

        将时刻t隐藏状态为i所有可能的状态转移路径i1到i2的状态最大值记为

        下面我们继续以上一节中的例子来对viterbi算法进行阐述:

        小明不知道小红是哪里人,他只能通过小红每天的活动来推断那里的天气。

        假设连续三天,小红的活动依次为:“睡觉-打游戏-逛街”,我们将据此计算最有可能的天气情况。

        表示第一天为雨天能够使得第二天为晴天的概率最大(也就是说如果第二天是晴天在最短路径上的话,第一天是雨天也一定在最短路径上,参见上文中Viterbi算法的基本思想)

        此时已经到了最后的时刻,我们开始回溯。

        其计算过程示意图如下图所示。

        )的路径。

        TF-IDF(词频-逆文本频率)是一种用以评估字词在文档中重要程度的统计方法。它的核心思想是,如果某个词在一篇文章中出现的频率即TF高,并且在其他文档中出现的很少,则认为这个词有很好的类别区分能力。

        其中:

        TextRank是一种用以关键词提取的算法,因为是基于PageRank的,所以先介绍PageRank。

        PageRank通过互联网中的超链接关系确定一个网页的排名,其公式是通过一种投票的思想来设计的:如果我们计算网页A的PageRank值,那么我们需要知道哪些网页链接到A,即首先得到A的入链,然后通过入链给网页A进行投票来计算A的PR值。其公式为:

        其中:

        d为阻尼系数,取值范围为0-1,代表从一定点指向其他任意点的概率,一般取值0.。

        将上式多次迭代即可直到收敛即可得到结果。

        TextRank算法基于PageRank的思想,利用投票机制对文本中重要成分进行排序。如果两个词在一个固定大小的窗口内共同出现过,则认为两个词之间存在连线。

        公式与PageRank的基本相同。多次迭代直至收敛,即可得到结果。

在jieba分词中,TextRank设定的词窗口大小为5,将公式1迭代次的结果作为最终权重的结果,而不一定迭代至收敛。

copyright © 2016 powered by 皮皮网   sitemap