Python文本分詞工具庫-jieba

內容目錄

        • 一、分詞
        • 二、設置分詞
        • 三、詞性信息
        • 四、關鍵詞提取

jieba庫是一個針對中文文本的分詞工具庫,廣泛應用于自然語言處理(NLP)領域的中文文本預處理階段。

主要功能:

  • 中文分詞:能夠將連續的中文文本切割成有意義的詞語序列,這是中文信息處理的基礎。
  • 三種分詞模式:
    • 精確模式:力求精準地進行分詞,適合文本分析。
    • 全模式:列出文本中所有可能的詞語組合,包含許多冗余項,但能發現更多潛在信息。
    • 搜索引擎模式:在精確模式基礎上,對長詞再次切分,以適應搜索引擎的需求,提高召回率。
    • 詞性標注:通過jieba.posseg模塊,不僅可以分詞,還能為每個詞標注其詞性,如名詞(n)、動詞(v)、形容詞(a)等。
    • 自定義詞典:用戶可以根據需要添加自定義的詞語到詞典中,以便jieba在分詞時能夠正確處理專有名詞、行業術語或新詞。
    • 關鍵詞提取:提供關鍵詞抽取功能,幫助從文本中快速提取出代表性的關鍵詞。
一、分詞

lcut(): jieba 分詞庫中的一個函數,用于對給定的字符串進行分詞處理,并將分詞結果以列表(list)的形式返回。這個方法非常適合于需要對分詞結果進行進一步列表操作或遍歷的場景。
lcut()可以支持三個參數:

def cut(self, sentence, cut_all=False, HMM=True, use_paddle=False):"""The main function that segments an entire sentence that containsChinese characters into separated words.Parameter:- sentence: The str(unicode) to be segmented.- cut_all: Model type. True for full pattern, False for accurate pattern.- HMM: Whether to use the Hidden Markov Model."""
  • 第一個參數:待分詞的字符串 - 這是必需的參數,表示你想要進行分詞處理的文本內容。
    • cut_all (可選參數):
      • 類型:布爾值(True 或 False)。
      • 默認值:False。
      • 含義:控制分詞模式。如果設置為 True,則使用全模式分詞,會列出文本中所有可能的詞語組合;如果為 False(默認),則使用精確模式分詞,僅輸出最可能的詞語組合。
  • HMM(可選參數):
    • 類型:布爾值(True 或 False)。
    • 默認值:True。
    • 含義:是否使用隱馬爾可夫模型(Hidden Markov Model)。HMM 在 jieba 中用于新詞發現,當設置為 False 時,會關閉基于HMM模型的新詞識別功能。
import jieba
review = "之前我沒得選,但現在我想做一個好人"
words = jieba.lcut(review,  cut_all=True)
# ['之前', '我', '沒得選', ',', '但', '現在', '我', '想', '做', '一個', '好人']
print("cut_all=True: ", words)review = "之前我沒得選,但現在我想做一個好人"
words = jieba.lcut(review)
# ['之前', '我', '沒得選', ',', '但', '現在', '我', '想', '做', '一個', '好人']
print("cut_all=False: ", words)

參數 cut_all 用于控制分詞模式。當 cut_all=True 時,啟用的是 全模式 分詞。全模式會將文本中的每一個詞的所有可能成詞方式都進行拆分,也就是說,它會盡可能地進行切分,包括一些較為生僻或者非通用的組合詞,這會使得分詞結果更加全面,但也可能導致較多的冗余項。
相比之下,如果設置 cut_all=False(這也是默認值),則使用 精確模式 分詞。精確模式會按照常見詞語和組合進行分詞,盡量減少拆分,提供更為準確的詞語劃分,適合大多數文本分析場景。

cut_all=True:  ['之前', '我', '沒得', '選', ',', '但', '現在', '我', '想', '做', '一個', '好人']
cut_all=False:  ['之前', '我', '沒得選', ',', '但', '現在', '我', '想', '做', '一個', '好人']

cut_for_search():是 jieba 分詞庫中的一個特殊分詞模式,主要用于搜索引擎分詞。這個方法結合了精確模式和全模式的優點,旨在提高搜索時的查詢詞召回率。 是 jieba 分詞庫中的一個特殊分詞模式,主要用于搜索引擎分詞。這個方法結合了精確模式和全模式的優點,旨在提高搜索時的查詢詞召回率。

cut_fo_search()支持傳入兩個參數:

def cut_for_search(self, sentence, HMM=True):"""Finer segmentation for search engines."""
  • 需要分詞的字符串:即要進行分詞處理的文本內容。
  • 是否使用 HMM 模型:這是一個可選參數,默認為 True。HMM(Hidden Markov Model)模型在這里用于新詞發現,當設置為 False 時,會關閉基于HMM模型的新詞識別功能。這個參數可以影響分詞結果,尤其是在處理未登錄詞(新詞、專有名詞等)時。
import jieba
review = "之前我沒得選,但現在我想做一個好人"seg_list = jieba.cut_for_search(review)
print("/".join(seg_list))
# 之前/我/沒得/沒得選/,/但/現在/我/想/做/一個/好人seg_list2 = jieba.cut_for_search(review,HMM=False)
print("/".join(seg_list2))
# 之前/我/沒/得/選/,/但/現在/我/想/做/一個/好人
二、設置分詞

add_word(): 允許用戶向分詞詞典中添加自定義的詞語。這對于確保特定詞匯(如品牌名、專業術語、新詞或專有名詞等)能夠被正確識別和處理非常有用。使用這個方法可以提升分詞的準確性和適應性。
add_word()支持傳入三個參數:

def add_word(self, word, freq=None, tag=None):"""Add a word to dictionary.freq and tag can be omitted, freq defaults to be a calculated valuethat ensures the word can be cut out."""
  • word:必需參數,表示要添加的詞語字符串。
  • freq:可選參數,表示詞語的頻率。在某些情況下,jieba 會根據詞語的頻率來決定分詞時的優先級。如果省略,則默認值為 None。
  • tag:可選參數,表示詞語的詞性標記。這對于需要進行詞性標注的場景非常有用。如果省略,則默認值為 None。
import jieba
review = "之前我沒得選,但現在我想做一個好人"seg_list = jieba.cut(review)
print("/".join(seg_list))
# 之前/我/沒得選/,/但/現在/我/想/做/一個/好人jieba.add_word("做一個好人")
seg_list2 = jieba.cut(review)
print("/".join(seg_list2))
# 之前/我/沒得選/,/但/現在/我/想/做一個好人
三、詞性信息

pseg模塊: jieba 分詞庫中的一個模塊,用于同時進行分詞和詞性標注。相比于基礎的分詞功能,pseg 能夠提供每個分詞的詞性信息,這對于自然語言處理中的許多高級任務,如情感分析、命名實體識別等尤為重要。

import jieba.posseg as psegreview = "之前我沒得選,但現在我想做一個好人"words = pseg.cut(review)
for word, flag in words:print(f"{word}{flag}")# 之前:f
# 我:r
# 沒得:v
# 選:v
# ,:x
# 但:c
# 現在:t
# 我:r
# 想:v
# 做:v
# 一個:m
# 好人:n

可以通過jieba.add_word() 方法添加自定義詞及詞性

import jieba.posseg as pseg
import jiebareview = "之前我沒得選,但現在我想做一個好人"jieba.add_word('一個好人', tag='n')
words = pseg.cut(review)
for word, flag in words:print(f"{word}{flag}")# 之前:f
# 我:r
# 沒得:v
# 選:v
# ,:x
# 但:c
# 現在:t
# 我:r
# 想:v
# 做:v
# 一個好人:n

詞性含義:

# r (代詞): 代詞,指代替名詞或名詞性短語的詞,如“我”、“你”、“這”、“那”等。
# p (介詞): 介詞,用在名詞、代詞或名詞性短語前邊,一起組成介賓短語,在句中作狀語或補語,如“在”、“對”、“從”等。
# ns (地名): 地名,包括特定區域、地域的名稱,如“北京”、“中國”等。
# v (動詞): 動詞
# n (名詞): 名詞,表示人、事物、地方、抽象概念等名稱的詞。
# a (形容詞): 形容詞,主要用來修飾名詞或代詞,表示性質或特征,如“美麗”、“高興”。
# ad (副詞): 副詞,用來修飾動詞、形容詞或其他副詞,表示程度、時間、頻率、范圍等意義,如“很”、“非常”、“經常”。
# m (數詞): 數詞,表示數目或順序的詞,如“一”、“二”、“第三”。
# q (量詞): 量詞,與數詞結合使用,表示數量,如“個”、“次”、“件”。
# c (連詞): 連詞,連接詞、短語或句子,如“和”、“但”、“因為”。
# u (助詞): 助詞,附著在詞或短語之后,表示結構關系或附加意義,如“的”、“著”、“了”。
# x (非語素字): 非語素字,不能單獨成詞但有語法意義的字符,如“阿”、“哎”。
# w (標點符號): 標點符號,文本中的各種標點符號。
# d (副詞性代詞): 如“都”、“僅僅”。
# f (方位詞): 表示方向或位置關系的詞,如“上”、“下”、“內”。
# an (形容詞性慣用語): 形容詞性的固定短語,如“黑乎乎”。
# b (區別詞): 用來表示人或事物與其他同類相區別的詞,如“野生”、“男”、“女”。
# e (嘆詞): 表達強烈感情或呼喚應答的詞,如“哎呀”、“喂”。
# i (成語): 固定的四字或四字以上的漢語成語,如“畫蛇添足”。
# j (簡稱略語): 簡稱或略語,如“北約”、“GDP”。
# o (擬聲詞): 模仿聲音的詞,如“嘩啦”、“咚咚”。
# t (時間詞): 表示時間的詞,如“現在”、“昨天”。
# y (語氣詞): 位于句尾或句中,表達說話人的語氣或情感,如“啊”、“吧”。
四、關鍵詞提取

textrank(): 使用TextRank算法提取關鍵詞
textrank()支持傳入五個參數:

def textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False):"""Extract keywords from sentence using TextRank algorithm.Parameter:- topK: return how many top keywords. `None` for all possible words.- withWeight: if True, return a list of (word, weight);if False, return a list of words.- allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v'].if the POS of w is not in this list, it will be filtered.- withFlag: if True, return a list of pair(word, weight) like posseg.cutif False, return a list of words"""
  • sentence: 需要分析的文本。
  • topK: 返回關鍵詞的數量,默認為20。
  • withWeight: 是否一并返回關鍵詞的權重,默認為False。
  • allowPOS: 限定詞性的列表,只把符合詞性要求的詞語當作關鍵詞,默認包括名詞、形容詞等。
import jieba.analysetext1 = '全世界的無產階級聯合起來'
keywords = jieba.analyse.textrank(text1, topK=5, withWeight=True)
for keyword, weight in keywords:print(f"關鍵詞: {keyword}, 權重: {weight}")
# 關鍵詞: 起來, 權重: 1.0
# 關鍵詞: 聯合, 權重: 0.9966849915940917
# 關鍵詞: 全世界, 權重: 0.9929941828082526
extract_tags(): 基于TF-IDF算法提取關鍵詞。
extract_tags()支持傳入五個參數:
def extract_tags(self, sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False):"""Extract keywords from sentence using TF-IDF algorithm.Parameter:- topK: return how many top keywords. `None` for all possible words.- withWeight: if True, return a list of (word, weight);if False, return a list of words.- allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v','nr'].if the POS of w is not in this list,it will be filtered.- withFlag: only work with allowPOS is not empty.if True, return a list of pair(word, weight) like posseg.cutif False, return a list of words"""

參數說明同上

import jieba.analysereview = "之前我沒得選,但現在我想做一個好人"# 使用TF-IDF算法提取關鍵詞
keywords = jieba.analyse.extract_tags(review, topK=5, withWeight=True)
for keyword, weight in keywords:print(f'關鍵詞: {keyword}, 權重: {weight}')
# 關鍵詞: 沒得選, 權重: 2.39095350058
# 關鍵詞: 好人, 權重: 1.556957105298
# 關鍵詞: 之前, 權重: 1.038705095328
# 關鍵詞: 現在, 權重: 0.79074950832
# 關鍵詞: 一個, 權重: 0.5635101944259999

tips: 權重值含義

權重值通常反映了一個詞項(關鍵詞)在文檔或語料庫中的重要性。

TextRank中的權重值:類似于Google的PageRank算法,TextRank算法會為文本中的每個詞計算一個分數,這個分數代表了該詞作為關鍵詞的重要程度。它是基于詞語共現的統計信息得出的,如果一個詞經常與其他關鍵詞共同出現,那么它的TextRank權重就相對較高。簡而言之,TextRank權重體現了詞在文本網絡中的中心性或影響力。

TF-IDF中的權重值: TF-IDF(Term Frequency-Inverse Document Frequency)是一種衡量詞項重要性的經典方法。TF-IDF權重由兩部分組成:
TF(Term Frequency):詞頻,即某個詞在文檔中出現的次數。出現次數越多,初步認為其越重要。
IDF(Inverse Document Frequency):逆文檔頻率,衡量詞的罕見度。如果一個詞在很多文檔中都出現,則IDF值低,表明這個詞對于區分文檔的重要性小;反之,如果一個詞僅僅在少數文檔中出現,則IDF值高,意味著這個詞具有很好的區分能力。 綜合起來,TF-IDF權重值高的詞,就是在文檔中出現頻繁但在整個文檔集合中不常見的詞,這些詞往往更能代表文檔的主題。

通過這些權重值,用戶可以識別出哪些詞匯對于理解文本內容最為關鍵

可以使用jieba.add_word()方法設置抽取的關鍵詞

import jieba
import jieba.analyse
review = "之前我沒得選,但現在我想做一個好人"
jieba.add_word("一個好人")# 使用TF-IDF算法提取關鍵詞
keywords = jieba.analyse.extract_tags(review, topK=5, withWeight=True)
for keyword, weight in keywords:print(f'關鍵詞: {keyword}, 權重: {weight}')# 關鍵詞: 沒得選, 權重: 2.988691875725
# 關鍵詞: 一個好人, 權重: 2.988691875725
# 關鍵詞: 之前, 權重: 1.29838136916
# 關鍵詞: 現在, 權重: 0.9884368854

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21474.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21474.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21474.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

變壓器中性點接地電阻柜的出廠標準是什么

變壓器中性點接地電阻柜的出廠標準是什么? 現代電氣配電系統中,接地電阻是保障人身安全的非常重要的設施。在高壓電氣設備中,中性點接地電阻柜的作用是限制設備中的過電流和短路故障所產生的電流,以保障人身安全。變壓器中性點接…

楊輝三角形及其C語言實現

一、引言 楊輝三角形(Pascal’s Triangle),又稱帕斯卡三角形,是一個在數學中經常出現的數表。它的構造規則非常簡單:三角形中的每個數字等于它上方兩數字之和(或者說,它是位于它肩上的兩個數字…

開源VS閉源:大模型發展路徑之爭,你站哪一派?

文章目錄 引言一、數據隱私1.1開源大模型的數據隱私1.2 閉源大模型的數據隱私1.3 綜合考量 二、商業應用2.1 開源大模型的商業應用2.2 閉源大模型的商業應用2.3 商業應用的綜合考量 三、社區參與3.1 開源大模型的社區參與3.2 閉源大模型的社區參與3.3 綜合考量 結論 引言 在人…

解析“分層引流”在顱內感染治療中的價值意義

臨床中,化膿性顱內感染的治療一直是界內關注的重點。近年來,得益于醫療技術的持續革新與提升,顱內感染的治療方法也獲得了不斷的更新與優化。在此背景下,北京精誠博愛醫院所倡導的“分層引流”理念,作為一種新興的治療…

外貿小白到銷冠,如何30天快速提升?

外貿從業8年,在工廠從0-1做外貿,外貿的坑踩過很多,也做出了很多出色的業績,希望這篇文章可以給到外貿新人快速提升的思路。 對于剛剛進入外貿行業的職場新人?應該怎么做? 第一個月應該學什么?…

什么牌子的開放式耳機質量好?2024超強實力派品牌推薦!

耳機對于一個音樂人有重要這個不必多說,我朋友是個音樂編輯,他經常需要長時間佩戴耳機進行音頻編輯和混音工作。在嘗試過多款開放式耳機后,都沒找到合適的。今天,我將從專業角度為大家帶來幾款熱門開放式耳機的測評報告&#xff0…

第二證券炒股知識:股票內盤外盤代表什么意思?

股票內盤是主動性賣盤,表明以買入價成交的股數,持股的投資者主動以等于或是低于買一、買二、買三、買四、買五的價格賣出手中持有的股份,買入成交數量核算參加內盤。 股票外盤是主動性買盤,表明以賣出價成交的股數,場…

跟著大佬學RE(一)

學了一個 map()函數的使用 import base64rawData "e3nifIH9b_CndH" target list(map(ord, rawData)) # map 函數將 rawData 中的每個字符傳遞給 ord 函數。ord 函數返回給定字符的 Unicode 碼點 print(target) # 打印 map 對象的內存地址&…

電腦中病毒了怎么辦?7招教你保護電腦安全!

“不知道怎么回事,我的電腦莫名其妙就中病毒了,實在不知道應該怎么操作了,希望大家可以幫我!” 在數字化時代的浪潮中,電腦已成為我們生活與工作中不可或缺的一部分。然而,就像任何事物都有其陰暗面一樣&am…

Python | 武理刷題

1. 為什么是非法的? a1a1 在Python(以及大多數其他編程語言)中,表達式 a1a1 是非法的,因為它試圖將一個值(a1 的結果)賦給一個表達式(a1 本身),而不是一個…

ip地址快速切換軟件有哪些好處

ip地址快速切換軟件有哪些好處?IP地址快速切換軟件具有諸多顯著的好處,以下是對其主要優勢的詳細闡述: 首先,IP地址快速切換軟件極大地提升了網絡活動的靈活性和便捷性。對于需要經常切換網絡環境或進行多賬號管理的用戶而言&…

新版 Vivado 2024.1分享(附安裝包)

Vivado新版本來了,文末附下載方法。 Vivado 2024.1版本的亮點主要集中在多個方面的功能增強和優化上。 Vivado 2024.1版主要亮點: 通用訪問與性能提升: MicroBlaze? V軟處理器(基于RISC V開源ISA)提供了更廣泛的通…

Python應用開發——Streamlit 創建多頁面應用程序進行APP的構建

創建多頁面應用程序 在附加功能中,我們介紹了多頁面應用程序,包括如何定義頁面、構建和運行多頁面應用程序,以及如何在用戶界面的頁面間導航。更多詳情,請參閱多頁面應用程序指南Multipage apps - Streamlit Docs 在本指南中,讓我們通過將上一版本的 streamlit hello 應…

基于深度學習的音樂合成算法實例

基于深度學習的音樂合成算法可以生成高質量的音樂片段。以下是一個簡化的基于深度學習的音樂合成算法實例,使用了LSTM網絡來生成音樂序列。這個示例展示了如何使用LSTM網絡來訓練和生成音樂。 數據準備 首先,需要準備訓練數據。可以使用MIDI文件作為訓練數據,并將其轉換為…

AI大模型在穿戴設備健康中的心率深度融合與案例分析

文章目錄 1. 架構設計2. 應用場景3. 實現步驟3.1 步驟1:數據預處理3.2 步驟2:邊緣計算初步分析3.3 步驟3:數據上傳到云端3.4 步驟4:云端復雜分析3.5 步驟5:深度學習模型訓練與部署 4. 云端API設計4.1 安裝Flask4.2 API…

美國前總統特朗普竟然入駐TikTok,粉絲破24萬

大家好! 我是老洪! 剛看到一則關于美國前總統特朗普的新聞, 特朗普竟然入駐TikTok了,太令人驚訝了。(為什么驚訝,后面再說) 更為驚人的是,他的到來竟然引來了眾多粉絲的熱烈追捧&…

如何從清空的回收站中恢復已刪除的Word文檔?

“嗨,我將 10 個 Word 文檔移動到回收站,然后用清潔軟件清理回收站。現在我意識到我犯了一個大錯誤——我刪除了錯誤的文件。我想知道是否可以從清空的回收站中恢復已刪除的Word文檔。我沒有數據恢復的經驗,也不精通計算機技術。有沒有簡單的…

三.一布局和布局切換的實踐與探索

在前端開發中,靈活的布局切換是一項非常實用的功能。今天,我想和大家分享一下如何在主組件中通過更換 Layout 目錄下的組件來實現布局切換。 首先,我們有一個主組件 index.vue,它承擔著整個頁面的主要邏輯和展示。 而在 Layout …

SG90舵機(Arduino)/XY軸搖桿使用(Arduino)

XY軸搖桿使用 需要注意,必須是 ADC 引腳才可以接收模擬信號輸入 /** 接線* PS2搖桿 Arduino* x A0* y A1* sw 7 */const int yg_x_pin A0; const int yg_y_pin A1; const int yg_btn_pin 7; // 搖桿按下的輸入引腳 void…

Django 里解決自定義中間件的問題

如果在項目文件夾下創建一個文件夾utils,里面存自己定義的中間件。 要是出現這種問題 django.core.exceptions.ImproperlyConfigured: utils.md.ExampleMiddleware isnt a subclass of AppConfig.解決方法: 在 settings.py 里 # 將自定義的中間件寫在…