中文分詞中的戰鬥機-jieba庫

来源:http://www.cnblogs.com/AsuraDong/archive/2017/05/30/jieba.html
-Advertisement-
Play Games

英文分詞的第三方庫NLTK不錯,中文分詞工具也有很多(盤古分詞、Yaha分詞、Jieba分詞等)。但是從載入自定義字典、多線程、自動匹配新詞等方面來看。 大jieba 確實是中文分詞中的 戰鬥機 。 請隨意觀看表演 "安裝" "分詞" "自定義詞典" "延遲載入" "關鍵詞提取" "詞性標註" "詞 ...


英文分詞的第三方庫NLTK不錯,中文分詞工具也有很多(盤古分詞、Yaha分詞、Jieba分詞等)。但是從載入自定義字典、多線程、自動匹配新詞等方面來看。
大jieba確實是中文分詞中的戰鬥機

請隨意觀看表演

安裝

  1. 使用pip包傻瓜安裝:py -3 -m pip install jieba / pip install jiba(windows下推薦第一種,可以分別安裝python2和3對應jieba)
  2. pypi下載地址

分詞

3種模式

  1. 精確模式:試圖將句子最精確地切開,適合文本分析
  2. 全模式:把句子中所有的可以成詞的詞語都掃描出來(速度快)
  3. 搜索引擎模式:在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞

實現方式

  1. 精確模式:jieba.cut(sen)
  2. 全模式:jieba.cut(sen,cut_all=True)
  3. 搜索引擎模式:jieba.cut_for_search(sen)
import jieba
sen = "我愛深圳大學"
sen_list = jieba.cut(sen)
sen_list_all = jieba.cut(sen,cut_all=True)
sen_list_search = jieba.cut_for_search(sen)
for i in sen_list:
    print(i,end=" ")
print()
for i in sen_list_all:
    print(i,end=" ")
print()
for i in sen_list_search:
    print(i,end=" ")
print()

結果:附截圖

自定義詞典

創建方式

  • 尾碼:txt
  • 格式:詞語( 權重 詞性 )
  • 註意事項:
    1. windows下txt不能用自帶的編輯器,否則會亂碼。可以用VSCODE,或者其他編輯器
    2. 可以只有詞語
    3. 在沒有權重的情況下,只有比預設詞典長的詞語才可以載入進去。附截圖

載入字典

jieba.load_userdict(txtFile)

調整字典

添加詞:jieba.add_word(word,freq=None,tag=None)

刪除詞:jieba.del_word(word)

import jieba
sen = "膠州市市長江大橋"
sen_list = jieba.cut(sen)
for i in sen_list:
    print(i,end=" ")
print()
膠州市 市 長江大橋
jieba.add_word('江大橋',freq=20000)
sen_list = jieba.cut(sen)
for i in sen_list:
    print(i,end=" ")
print()

結果附截圖

改變主字典

延遲載入

之前發現,詞典不是一次性載入的,說明它採用的是延遲載入。即:當遇到應用的時候才會載入。有點類似於python高級特性中的 yield (節省記憶體)

效果圖如下:

  • 手動載入的方法:jieba.initialize()

關鍵詞提取

jieba.analyse.extract_tags(sentence,topK=20):返回topK個TF/IDF權重最大的詞語

import jieba.analyse
sen_ana = jieba.analyse.extract_tags(sen,3)
for i in sen_ana:
    print(i)
江大橋
膠州市
市長

詞性標註

jieba.posseg.cut(sen):返回的每個迭代對象有兩個屬性-> word 詞語 + flag 詞性

import jieba.posseg
words = jieba.posseg.cut(sen)
for word in words:
    print(word.flag," ",word.word)
ns   膠州市
n   市長
x   江大橋

詞語定位

jieba.tokenize(sen,mode):mode可以設置為search,開啟搜索模式

index= jieba.tokenize(sen)
for i in index:
    print(i[0],"from",i[1],"to",i[2])
膠州市 from 0 to 3
市長 from 3 to 5
江大橋 from 5 to 8

內部演算法

  1. 基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG)
  2. 採用了動態規劃查找最大概率路徑, 找出基於詞頻的最大切分組合
  3. 對於未登錄詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法。

參考文獻


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇文章整理了幾道Linux下C語言的經典面試題,相信對大家更好的理解Linux下的C語言會有很大的幫助,歡迎大家探討指正。 1、如果在Linux下使用GCC編譯器執行下列程式,輸出結果是什麼? 答案如下: 2、C語言程式不使用任何條件運算符,列印出十次"Hello"? 答案如下: 或是: 3、如果 ...
  • 一、實驗原理 二、實驗步驟 三、實驗過程 1.(程式) (1)二分法:求 在區間(1,2)之間的根,取 (a)bipart.m: (b)fun1.m: (2)不動點迭代法:求方程在附近的根,取 (a)budong.m: (b)fun.m (3)牛頓迭代法:求方程在附近的根,取 newton.m: 2 ...
  • CloseHandle函數 來源:https://msdn.microsoft.com/en us/library/windows/desktop/ms724211(v=vs.85).aspx 作用 關閉一個打開的對象句柄。 語法 參數 hObject 已經打開的有效對象句柄。 返回值 如果函數操作 ...
  • 數據類型之集合 set set集合,是一個無序且不重覆的元素集合 A = set([1, 2, 3, 4, 5, 6,]) B = set([2, 3, 4, 5, 6, 7, 8]) type(A) type(B) class set(object): """ set() new empty se ...
  • 前言 前面已經學習了Apache Commons Beanutils包里的PropertyUtils和動態bean,接下來將學習剩下的幾個工具類,個人覺得還是非常實用的,特別是CollectionUtils; BeanUtils 簡單介紹下兩個方法的使用,populate和copyPropertie ...
  • 首先需要弄清楚npm與cnpm的區別(要看解決問題方案的情直接跳到最後): npm:npm(node package manager)是nodejs的包管理器,用於node插件管理(包括安裝、卸載、管理依賴等) cnpm:因為npm安裝插件是從國外伺服器下載,受網路影響大,可能出現異常,如果npm的 ...
  • 記憶體分配方式 簡介 在C++中,記憶體分成5個區,他們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。 棧:在執行函數時,函數內局部變數的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。 堆:就是那些由 n ...
  • 今天這一題有點燒腦: 有一個序列u,滿足: 1. 第一個元素是1 2. 此後任意一個元素x,2x+1和3x+1也必定在u中 現給定整數n,求序列u中的第n+1個元素是什麼? 規定:要註意演算法的效率 分析: 乍一想有點亂。先找幾個數計算一下: 1 [1], 3, 4 1, [3], 4, 7, 10 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...