jieba源碼研讀筆記
文章平均质量分 96
jieba的功能主要包括分詞、詞性標注及關鍵詞提取三部份。本專欄將對這三個主要功能進行介紹。
keineahnung2345
这个作者很懒,什么都没留下…
展开
-
jieba源碼研讀筆記(十八) - 關鍵詞提取之TF-IDF使用示例
jieba中除了給出TF-IDF算法實現外,還提供了它的使用示例。使用示例在test這個資料夾底下。extract_tags.py檔是關鍵詞提取的使用示例。原创 2019-03-05 15:23:23 · 420 阅读 · 0 评论 -
jieba源碼研讀筆記(十七) - 關鍵詞提取之TF-IDF
在前篇介紹了jieba/analyse/tfidf.py的架構,本篇將介紹該檔案中的TFIDF類別。TFIDF類別的extract_tags函數負責實現核心算法。透過allowPOS這個參數可以選擇要使用一般的tokenizer或是用於詞性標注的tokenizer。參考維基百科中的tf-idf頁面:TF代表的是term frequency,即文檔中各詞彙出現的頻率。IDF代表的是inverse document frequency,代表詞彙在各文檔出現頻率倒數的對數值(以10為底)。而TF-IDF值則原创 2019-03-05 12:03:28 · 1692 阅读 · 0 评论 -
jieba源碼研讀筆記(十六) - 關鍵詞提取之tfidf.py檔初探
jieba支持使用兩種算法做關鍵詞提取,包括TF-IDF及TextRank。其中TF-IDF算法主要是在jieba/analyse/tfidf.py這個檔案中完成。本篇將會介紹tfidf.py這個檔案的架構。原创 2019-03-05 11:10:44 · 956 阅读 · 0 评论 -
jieba源碼研讀筆記(十五) - 關鍵詞提取函數入口
jieba的關鍵詞提取功能主要由jieba/analyse這個模組實現。jieba支援兩種關鍵詞提取的算法,包括TF-IDF及TextRank兩種。在jieba/analyse/__init__.py中,會調用TFIDF及TextRank這兩個檔案,並利用它們定義一些全局變數及函數。原创 2019-03-05 09:11:24 · 214 阅读 · 0 评论 -
jieba源碼研讀筆記(十四) - 詞性標注函數入口
在前面兩篇中介紹了__cut_DAG_NO_HMM及__cut_DAG函數。本篇介紹的__cut_internal函數是__cut_DAG及__cut_DAG_NO_HMM這兩個函數的入口,它的參數HMM可以選擇要使用哪一個。本篇還會介紹_lcut_internal,_lcut_internal_no_hmm,cut及lcut,它們是__cut_internal的wrapper,讓它變得更易用。原创 2019-03-04 16:46:28 · 327 阅读 · 0 评论 -
jieba源碼研讀筆記(十三) - 詞性標注(使用HMM維特比算法發現新詞)
jieba/posseg/__init__.py裡的__cut_DAG負責的是使用了HMM的詞性標注。__cut_DAG,__cut_detail,__cut負責詞性標注的核心算法,其中__cut函數還會呼叫viterbi.py裡的viterbi這個函數。而cut及__cut_internal則是__cut_DAG的wrapper,隱藏了一些細節,讓它們變得更容易使用。本篇將由內而外介紹,從viterbi到__cut,__cut_detail直到__cut_DAG函數。原创 2019-03-04 15:43:49 · 542 阅读 · 0 评论 -
jieba源碼研讀筆記(十二) - 詞性標注(使用DAG有向無環圖+動態規劃)
在前篇中看到了POSTokenizer的詞性標注核心函數包括:__cut_DAG_NO_HMM及__cut,__cut_detail,__cut_DAG。恰如其名,__cut_DAG_NO_HMM的功能是不使用HMM的詞性標注。其它三個函數則會在使用HMM的模式中被使用。本篇介紹的重點是不使用HMM的詞性標注。原创 2019-03-01 19:29:19 · 299 阅读 · 0 评论 -
jieba源碼研讀筆記(十一) - 詞性標注之POSTokenizer初探
前篇看了posseg/__init__.py檔的大架構,這裡將繼續介紹檔案中的POSTokenizer這個類別。本篇僅介紹POSTokenizer類別初始化及載入字典的部份,核心函數及其wrapper將會在後續的文章裡介紹。原创 2019-03-01 16:30:29 · 828 阅读 · 0 评论 -
jieba源碼研讀筆記(十) - 詞性標注功能初探
jieba除了分詞,還包括了詞性標注及關鍵詞提取的功能。詞性標注的功能是在posseg這個模組中實現。以下是jieba文檔中對詞性標注功能的描述:标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法關於ictclas,可參考ICTCLAS 汉语词性标注集。原创 2019-03-01 15:49:38 · 463 阅读 · 0 评论 -
jieba源碼研讀筆記(九) - 分詞之搜索引擎模式
jieba的分詞共包含三種模式,分別是:全模式、精確模式及搜索引擎模式。其中精確模式(在jieba中為默認模式)又分為使用HMM或不使用HMM兩種模式。前面己經介紹過了全模式及精確模式,並且也看到了作為分詞函數入口的cut。本篇將介紹搜索引擎模式,對應的是jieba/__init__.py裡Tokenizer這個類別中的cut_for_search這個函數,它會調用前篇介紹的cut函數。以下是jieba文檔中對搜索引擎模式的描述:jieba.cut_for_search 方法接受两个参数:需要分词的字符串原创 2019-03-01 14:03:43 · 744 阅读 · 0 评论 -
jieba源碼研讀筆記(八) - 分詞函數入口cut及tokenizer函數
根據jieba文檔,jieba的分詞共包含三種模式,分別是:全模式、精確模式及搜索引擎模式。其中的精確模式又分為不使用HMM兩種模式或使用HMM(在jieba中為默認模式)兩種。所以分詞總共有四種模式可以使用。在前三篇文章:全模式,精確模式(使用動態規劃),精確模式(使用HMM維特比算法發現新詞)當中,己經看到了前三種模式,它們分別對應到:__cut_all,__cut_DAG_NO_HMM及__cut_DAG函數。本篇介紹的cut函數將作為上述分詞函數的入口,依據傳入參數的不同,來選擇要調用哪一個函數。原创 2019-03-01 11:59:08 · 751 阅读 · 0 评论 -
jieba源碼研讀筆記(七) - 分詞之精確模式(使用HMM維特比算法發現新詞)
jieba分詞的精確模式分為1. 不使用HMM(使用動態規劃算法) 或 2. 使用HMM(使用維特比算法發現新詞)兩種模式。本篇介紹的是使用了HMM維特比算法的精確模式,對應的jieba/__init__.py裡的__cut_DAG這個函數。在__cut_DAG中,仍然是以查字典為主,但是:对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法__cut_DAG函數是由cut(sentence, cut_all=False, HMM=True)這個函數調用。而它又會呼叫jieba原创 2019-02-28 17:58:11 · 1279 阅读 · 0 评论 -
jieba源碼研讀筆記(六) - 分詞之精確模式(使用DAG有向無環圖+動態規劃)
本篇的主題是精確模式(不使用HMM,使用動態規劃),它是在Tokenizer這個類別中,以calc及__cut_DAG_NO_HMM這兩個函數來實現。jieba文檔上精確模式的介紹:精确模式,试图将句子最精确地切开,适合文本分析;采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合動態規劃的程序寫在calc函數中,但是因為它會把英數字都切成一個一個的字元,所以我們還需要__cut_DAG_NO_HMM這個wrapper,用於處理句中有英數字的情況。原创 2019-02-23 15:51:19 · 629 阅读 · 0 评论 -
jieba源碼研讀筆記(五) - 分詞之全模式
根據jieba文檔,jieba的分詞共包含三種模式,分別是:全模式、精確模式及搜索引擎模式。其中的精確模式又分為不使用HMM兩種模式或使用HMM(在jieba中為默認模式)兩種。所以分詞總共有四種模式可以使用。筆者將依全模式→精確模式(不使用HMM)→精確模式(使用HMM發現新詞)→搜索引擎模式的順序來介紹這四種分詞模式。了解完四種分詞模式後,再繼續看作為分詞函數入口的cut以及tokenize函數。本篇介紹全模式,對應的是__cut_all函數。jieba的README中關於全模式分詞的介紹:基于前原创 2019-02-22 17:14:54 · 489 阅读 · 0 评论 -
jieba源碼研讀筆記(四) - 正則表達式
jieba包含的三大功能:分詞、詞性標注及關鍵詞提取都需要用到正則表達式。筆者將jieba/__init__.py,jieba/finalseg/__init__.py及jieba/posseg/__init__.py三個檔案裡出現的正則表達式集中在本篇介紹。先介紹下筆者在學習正則表達式時用到的工具:regex101:可以使用這個線上工具來測試regex的效果。以及Python正則表達式的教學:Python - Regular Expressions還有一篇中文的:正则表达式的功法大全,做N原创 2019-02-22 11:18:41 · 639 阅读 · 0 评论 -
jieba源碼研讀筆記(三) - 分詞之Tokenizer初探
jieba/__init__.py負責分詞的功能,在前篇中己經將它的架構做了簡要的介紹。jieba/__init__.py的核心部份是Tokenizer類別,這將是本篇介紹的重點。原创 2019-02-21 09:48:48 · 1510 阅读 · 0 评论 -
jieba源碼研讀筆記(二) - Python2/3相容
jieba的主程序是__init__.py,定義了cut, cut_for_search等用於分詞的函數。在正式介紹分詞函數以前,先來看看_compat.py這個檔案,它用於處理Python2/3之間相容的問題。這個檔案中定義了get_module_res,strdecode,resolve_filename等讀檔時會用到的函數,它們會在__init__.py中頻繁地被調用。原创 2019-02-20 21:10:56 · 457 阅读 · 0 评论 -
jieba源碼研讀筆記(一) - 分詞功能初探
jieba的分詞功能是由jieba這個模組本身及finalseg來完成。而jieba這個模組裡包含了__init__.py,__main__.py,_compat.py及dict.txt四個檔案。其中__init__.py定義了Tokenizer類別及一些全局函數,用於分詞本身。__main__.py定義了jieba在命令行裡的使用方式。_compat.py用於處理Python2/3相容性的問題。dict.txt則是字典,記錄了各詞的詞頻及詞性。原创 2019-02-20 16:55:05 · 698 阅读 · 0 评论