`

中文分词算法工具hanlp源码解析

阅读更多

 

词图

 

词图指的是句子中所有词可能构成的图。如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B)。一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图。

需要稀疏2维矩阵模型,以一个词的起始位置作为行,终止位置作为列,可以得到一个二维矩阵。例如:“他说的确实在理”这句话

 



 

 

图词的存储方法:一种是的DynamicArray法,一种是快速offset法。Hanlp代码中采用的是第二种方法。

1、DynamicArray(二维数组)法

在词图中,行和列的关系:col为n 的列中所有词可以与row为n 的所有行中的词进行组合。例如“的确”这个词,它的col =5,需要和它计算平滑值的有两个,分别是row =5的两个词:“实”和“实在”。但是在遍历和插入的时候,需要一个个比较col和row的关系,复杂度是O(N)。

<!--[if !supportLists]-->2、<!--[endif]-->快速offset

一个一维数组,每个元素是一个单链表“的确”的行号是4,长度是2,4+2=6,于是第六行的两个词“实/实在”就是“的确”的后续。

同时这种方法速度非常快,插入和查询的时间都是O(1)。



 

 

Hanlp核心词典:



 

最短路径算法—viterbi(动态规划路径)



 

 

Frequency:核心词典中的词频

nTwoWordsFreq:共现词频

intMAX_FREQUENCY= 25146057

double dTemp =(double) 1 / MAX_FREQUENCY +0.00001

dSmoothingPara =0.1

Viterbi最短路径有向图



 

 

1、计算过程从上至下,根据计算出的权重值变更前驱结点,保证前驱结点唯一(动态规划路径)

2、计算结束后,从最后一个结点开始取出term,依次取出该结点的前驱结点即可分词结果:理,在,确实,的,说,他

 

作者:亚当-adam

 

  • 大小: 32.4 KB
  • 大小: 67.7 KB
  • 大小: 86.7 KB
  • 大小: 78.7 KB
  • 大小: 117.4 KB
分享到:
评论

相关推荐

    运用在lucene中的中文分词算法源码

    本文将详细解析Lucene中的中文分词算法源码,帮助读者理解其工作原理,并为开发和优化提供指导。 一、Lucene的分词体系 Lucene本身并不直接支持中文分词,而是通过集成第三方分词器来实现。常见的中文分词器有IK ...

    lucene.NET 中文分词

    这些分词器具备丰富的词汇库和优秀的分词算法,能有效地对中文文本进行拆分。 - **IK Analyzer**:是一个开源的、基于Java的轻量级中文分词工具,也有.NET版本。它具有灵活的词典管理、支持用户自定义词典和智能...

    Lucene2.1 Source Code,分词源码

    常见的中文分词算法有基于词典的匹配算法、统计语言模型算法等。在 Lucene 中,分词器(Analyzer)负责将输入的文本切分成一个个独立的词语,这些词语被称为术语(Term)。 - **基于词典的分词**:这种方法主要依赖...

    lucene 索引工具源码(桌面版)

    对于不同的语言,Lucene 提供了相应的分词器,例如,对于中文,可能会使用 IK 分词器或 HanLP 进行分词;对于英文,通常会使用 StandardAnalyzer。 2. **过滤器(Filters)**:过滤器可以进一步修饰和优化分词结果...

    基于java开发的pachong源码

    《基于Java开发的Pachong源码解析》 在信息技术高速发展的今天,数据已经成为企业和社会的重要资源。网络爬虫作为一种高效的数据采集工具,被广泛应用于各类数据分析和研究中。本项目"基于Java开发的Pachong源码",...

    javasmack源码-Navigation-guide:导航指南

    基于mmseg算法的一个轻量级中文分词器 ansj_seg ansj分词.ict的真正java实现 HanLP 自然语言处理 中文分词 jieba-analysis 结巴分词(java版) similarity 相似度计算工具包 Compiler_Experiment 编译原理,使用 Java ...

    基于ASPNET搜索引擎设计与实现(20210809124818).pdf

    可以使用开源的中文分词库如HanLP、IK Analyzer或自定义分词算法对文本进行处理。 1.3 索引构建:索引是搜索引擎快速检索的基础,可采用倒排索引结构。ASP.NET可以使用内存数据库(如Redis)或文件系统(如Lucene...

    微博评论分析工具 weibo

    常用分词工具如jieba、THULAC或HanLP。关键词提取则可能运用TF-IDF算法、TextRank或LDA主题模型,以找出评论中的核心概念。 3. **词云与词频统计**:为了可视化评论中的高频词汇,工具会使用词云生成库,如...

    基于java的文本搜索引擎的设计与实现,java全文搜索引擎,Java源码.zip

    Java中常用的分词库有HanLP、IK Analyzer和Lucene等。 四、索引器 索引是搜索引擎的核心,它将预处理后的文本转化为便于搜索的数据结构。在Java中,最常用的全文搜索引擎框架是Apache Lucene。Lucene提供了一个倒...

    搜索引擎.NET源码

    对于.NET开发者来说,Jieba.NET或者HanLP.NET等开源库提供了强大的中文分词支持。 在"压缩包子文件的文件名称列表"中,虽然我们无法直接看到源代码,但可以推测"net_search_spider"可能包含以下组件: 1. Spider...

    asp.net搜索引擎源码完整版

    这个系统可能内置了中文分词器,如IK Analyzer或HanLP,以适应中文搜索的需求。 5. **搜索算法**:查询解析和结果排序是搜索性能的重要组成部分。源码可能包含了TF-IDF、BM25或其他相关性计算算法,用于确定搜索...

    搜索引擎的研究与实现(Java)(含源码)

    Java中的IK Analyzer或HanLP等库提供了中文分词服务。 5. **倒排索引(Inverted Index)**:倒排索引是一种数据结构,用于快速查找包含特定关键词的文档。在Java的Lucene中,我们可以创建和管理倒排索引。 6. **...

    JAVA技术实现的搜索引擎(含源码)Java实用源码整理learns

    JAVA的正则表达式库可以用于识别关键词,而分词器(如IK Analyzer、HanLP)则可以将中文文本分解为单个词汇。 4. **检索**:最后,搜索引擎会根据索引和查询返回相关结果。这涉及到匹配算法,如BM25、TF-IDF等,...

    毕业设计python完成三个过程PDF的识别与分析信息抽取构建知识图谱信息检索基于知识图源码谱.zip

    对于更复杂的模式,可以使用`scrapy`框架进行网络爬虫开发,或者使用`HanLP`、`jieba`进行中文分词和命名实体识别。 4. **知识图谱构建**:知识图谱是一种结构化的知识表示形式,常用库有`rdflib`用于RDF(Resource...

    Java项目实战-搜索引擎的设计与实现(附源码,部署说明).zip

    这里可能会使用到开源的分词工具,如IK Analyzer或HanLP。 3. **索引模块**:"02数据库.rar"可能包含用于存储索引的数据库结构。搜索引擎可能使用倒排索引,其中每个词项指向包含该词的文档列表,这种数据结构利于...

    基于java的搜索引擎排名优化技术的实现(开题报告+源码+论文+所有需要的文档)

    Java中可使用IK Analyzer、HanLP或jieba分词库,对中文文本进行有效的分词,以便后续处理。 4. **倒排索引**:搜索引擎的核心是倒排索引,它能快速定位到包含特定关键词的文档。在Java中,可以自定义数据结构或使用...

    [搜索链接]淘特搜索引擎共享版_tot_search_engine.zip

    7. **分词技术**:如使用开源的HanLP、IK Analyzer等进行中文分词,以便于处理中文搜索。 8. **缓存机制**:可能包含对搜索结果的缓存,以减少重复计算和提升响应速度。 9. **并发处理**:学习如何处理大量并发的...

    龙珠搜索 v2.1

    同时,中文分词接口是为了解决中文语言特有的问题,如词语边界识别和歧义消解,通常会采用成熟的分词库如jieba分词或HanLP。 标签中提到的"ASP.NET源码"意味着这个搜索引擎系统的源代码是基于ASP.NET框架编写的,...

    hanlearn-api

    1. **分词**:hanlearn-api可能提供了高效的中文分词功能,这是NLP的基础步骤,将连续的汉字序列切分成具有独立语义的词语。例如,它可能使用了HMM( Hidden Markov Model)或CRF(Conditional Random Field)等模型...

    Char01.rar_搜索引擎_Java_

    分词是将文本拆分成有意义的词汇单元,Java中的IK Analyzer或HanLP等库提供了强大的分词能力。去重通常通过哈希算法实现,如MD5或SHA-1,确保每个唯一的文档或段落有唯一的标识。存储方面,倒排索引是一种高效的数据...

Global site tag (gtag.js) - Google Analytics