python庫之jieba 庫

?jieba 庫

?jieba 庫的原理分析

jieba庫可用于將中文的一段語句分解為單詞,通常用于解析中文語句的含義。例如外國人需要學習中文而中文語句是一直連續的文字組合。例如“我們在學習Python辦公自動化”這句話,外國人在理解這句話的含義時,首先需要將這句話正確地分解為一個個單詞,即“我們”“在”“學習”“Python”“辦公”“自動化”,如單詞分解錯誤就無法理解這句話的含義,例如“我”“們在”。

將一段文字分解為一個個單詞的原理是庫中已經建立了“詞典”,“詞典”收集了漢語中的所有詞語,當需要對一段文字進行分詞時,會將文字的所有內容和詞典進行匹配,當匹配成功時即得到一個單詞。但還是會在有歧義的問題,例如“路上行人行路上”,代碼可能會將其分詞為“路上”“行”“人行路”“上”,但實際的分詞應該為“路上”“行人”“行”“路上”,而jieba庫會使用概率最大化來決定選擇哪個詞。因此在建立“詞典”時還需對每個詞設置使用概率,概率最大的詞表示使用率最高。由于一段文字中每個詞的概率不同,因此jieba庫中還設置了最優化算法,即選擇一段文字中概率最大的詞。
綜上所述,jieba庫分詞不能保證所有的分詞都是正確的,讀者在后面的學習過程中可能會發現分詞錯誤的情況。關于jieba庫的安裝已經在8.5.3小節進行了演示,讀者可按照如圖8-4所示的命令進行安裝。

iieba 庫的解析

在8.6節介紹的Pyinstaller庫是使用命令的形式來運行代碼的,但是并沒有使用代碼,在iieba庫中將使用代碼的形式實現分詞功能。
接下來對jieba庫做一個簡單的分析。使用pip工具下載、安裝完jieba庫后,打開iieba庫安裝目錄(可通過命令pip show jieba返回的Location獲取到安裝目錄地址)后

其中最為關鍵的是__init_-.py文件,包含用于創建分詞對象的類Tokenizer,類Tokenizer包含大量與分詞相關的方法。analyse文件夾中是用于設計算法以實現分析詞語的相關代碼。finalseg文件夾中是用于詞完成后處理的相關代碼。lac_small文件夾中是用于創建詞法分析模型和模型數據讀取器的相關代碼。main_-·py文件可以實現使用命令的形式運行jieba庫中函數的功能(與Pyinstaller庫的使用方法相同)dict.txt文件是iieba庫中的詞典,用于保存所有的詞語。

__init__.py文件中的類Tokenizer包含處理分詞的方法。本書第6保細介紹了__init__.py文件的組成和原理,讀者需要進入此文件中觀察代碼文件的組成,獲取關鍵函數和類。

類Tokenizer的簡潔定義:

Elass Tokenizer(object):#位于庫jieba\ init .py中definit__(self,dictionary=DEFAULT DICT):...#初始化類def gen pfdict(f):...
def initialize(self,dictionary=None):...#檢查初始化
def check initialized(self):...
def calc(self,sentence,DAG,route):...#計算分詞def get DAG(self,sentence):...def cut(self,sentence,cut_all=False,HMM=True, use paddle=False):..#精確模式分詞,返回一個分詞對象
def cut_for_search(self,sentence,H=True):...#搜索引擎模式分詞,返回一個分詞對象def lcut(self,*args,**kwargs):...#精確模式分詞,返回一個列表
def lcut_for_search(self,*args,**kwargs):...#搜索引擎模式分詞,返回一個列表
def get dict_file(self):...#獲取詞典def load userdict(self,):...#加載個性化詞典,提高分詞正確率
def add word(self,word,freq=None,tag=None):...#向詞典中添加單詞def del word(self,word):...#刪除一個單詞
def suggest freq(self,segment,tune=False):...#調節單詞的頻率def tokenize(self,unicode sentence, mode="default",HMM=True):#對一個句子進行標記并生成元組
def set dictionary(self,dictionary path):...#設置分詞依賴的詞典

這里僅列舉類名和方法名,以便于讀者快速掌握類Tokenizer的使用方法,而對于方法的代碼實現,讀者并不需要過于關心,在此后的所有章節中均按照該形式列舉類的定義。

jieba 庫的使用

jieba庫中提供了3種分詞模式,即精確模式、全模式和搜索引擎模式。

精確模式

精確模式指對句子進行精確的切分,是文本分析中較為常用的一種模式。其使用形式如下:

cut(sentence,cut all=False,HMM=True,use_paddle=False)

參數sentence:需要分詞的中文句子,值的數據類型為字符串類型。

參數cut_all:參數值的數據類型為布爾值類型,值為False表示使用精確模式,值為True表示使用全模式。

參數HMM:是否使用隱馬爾可夫模型(一種優化模型算法)。

示例代碼:

import jieba
s = '我們在學習Python辦公自動化'
jb_a = jieba.Tokenizer()    #類Tokenizer所包含的處理分詞的方法
result = jb_a.cut(sentence = s) #精確模式
print(result,list(result))

第3行代碼使用iieba庫中的類Tokenizer初始化一個分詞對象jb_a。第4行代碼使用了分詞對象中的cut()方法,并對第2行代碼中的字符串內容進行了精確模式分詞。第5行代碼輸出結果,由于cut()方法分詞后會返回一種Python內部數據,因此可以使用list()函數將該數據
轉換為列表類型數據。

輸出結果:

<generator object Tokenizer.cut at 0x0000022B1C26EF80> ['我們', '在', '學習', 'Python', '辦公自動化']

執行代碼后的輸出結果如圖8-21所示,標注框中的紅色字為分詞過程所產生的信息,用于告訴當前用N行分詞的狀態、消耗的時間(尋找最優化分詞的過程需要消耗大量的時間,因此通過消耗時間可以對比不圓最優化算法的性能)等。藍色字為分詞后的內容,轉換為列表數據后表明jieba庫將'我們在學習Python辦公動化'分詞為了'我們'在'學習’'Python'辦公自動化。

全模式

全模式指把句子中所有可以成詞的詞語都掃描出來,這種分詞模式雖然速度快,但不能解決歧義問題。將cut()方法中的參數cut_all的值設置為True即可使用全模式。

示例代碼:

import jieba
s = '我們在學習Python辦公自動化'
jb_a = jieba.Tokenizer()
result = jb_a.cut(sentence = s,cut_all=True)#全模式
print(list(result))

代碼執行結果:

['我們', '在', '學習', 'Python', '辦公', '辦公自動化', '自動', '自動化']

結果中每個可以作為一個單詞的文字都將展示出來。

搜索引擎模式

搜索引擎模式指在精確模式基礎上,對長詞再次切分,適用于搜索引警分詞。其使用形式如下:

cut for search(sentence,HMM=True)

參數sentence:需要分詞的中文句子,值的數據類型為字符串類型。
參數HMM:是否使用隱馬爾可夫模型。
示例代碼:

import jieba
s = '我們在學習Python辦公自動化'
jb_a = jieba.Tokenizer()
result = jb_a.cut_for_search(sentence = s)#搜索引擎模式
print(list(result))

第4行代碼使用cut_for_search()對第2行代碼中的文字進行搜索引擎模式分詞,分詞后的結果如下,表明在精確模式的基礎上再次對“辦公自動化”進行分詞。

['我們', '在', '學習', 'Python', '辦公', '自動', '自動化', '辦公自動化']

添加新詞

除了U上3種分詞模式,由于社會還會不斷地創造出新的間語,因此為子滿是當前社會對分司的需求,還可以使用add-word()方法向詞典中添加新詞(添加的詞語不是永久的:儀當前代碼中有效)。其使用形式如下:

add word(word, freq=None, tag=None)

參數word:需要添加到詞典中的詞語。示例代碼:

import jieba
s = '我們在學習Python辦公自動化'
jb_a = jieba.Tokenizer()
jb_a.add_word('Python辦公自動化')#添加新詞
result = jb_a.cut(sentence = s)
print(list(result))

第4行代碼使用add_word()方法將單詞“Python辦公自動化”添加到詞典中。
第5行代碼使用cut()方法進行精確模式分詞。
執行代碼后的輸出結果如下,可以看出“Python辦公自動化”并沒有分開,而是作為一個詞。

['我們', '在', '學習', 'Python辦公自動化']

在__init--.py文件中對類Tokenizer的使用進行簡化,并重新對該類中的方法進行賦值,代碼如下:

dt = Tokenizer()get FREQ=lambda k,d=None:dt.FREQ.get(k,d)add word = dt.add wordcut =dt.cut
lcut = dt.lcut
cut for search=dt.cut for search
lcut for search =dt.lcut for search
del word = dt.del wordget dict file= dt.get dict file

也可以直接使用iieba.cut()、jieba.cut_for_search()和jieba.add_word()實現以上介紹的4個功能(8.7.4小節的代碼中有此種用法)。

小項目案例:實現判斷評論為好評或差評

項目描述
為了自動識別例如抖音的某個視頻、微博的某個文案、淘寶的某個商品的評論為好評或差評,需要設計一個可以自動判斷用戶評論好壞的代碼程序。
項目任務
任務1:使用jieba庫將用戶的評論分詞為一個個單詞,并建立一套好評、差評詞庫,例如在以下代碼中,列表good中為好評詞語,列表bad中為差評詞語。
任務2:將用戶評論分詞后的單詞分別與列表good、bad進行匹配,并統計好評詞語和差評詞語的個數

項目實現代碼:

import jieba
good = ['好評','好看']
bad = ['差評','垃圾']
s_1 = '衣服好看,顯得皮膚白'
s_2 = '尺寸不差評分必須高'
s_3 = '差評買過最垃圾的東西'
def get_value(s):good_value = bad_value = 0result = list(jieba.cut(sentence=s))print(result)for r in result:if r in good:good_value += 1if r in bad:bad_value += 1print('好評詞語個數:',good_value,'差評詞語個數:',bad_value)if good_value > bad_value:print('此條評論為好評')elif good_value == bad_value:print('此條評論暫無法判斷')else:print('此條評論為差評')
get_value(s_1)
get_value(s_2)
get_value(s_3)

第2、3行代碼中的good和bad分別保存好評詞語和差評詞語。在實際開發中的詞語可能會遠遠多于以上代碼中的詞語,讀者在實際開發中可以自行增加。
第4~6行代碼中為3條待分析的評論。
第7~22行代碼創建了一個用于分析評論的函數get_value()。其中第8行代碼中的good_value和 badvalue用于統計好評詞語和差評詞語的個數。第9行代碼使用iieba.cut()方法將評論解析為單詞。第11~16代碼使用for循環依次判斷解析后的詞語中是否有好評詞語或差評詞語,如果有好評詞語則good_value值加I如果有差評詞語則bad_value值加1。第17~22行代碼用于判斷good_value和bad_value的大小,如果好評詞語的個數大于差評詞語的個數,則表明評論為好評;如果個數相同則暫時無法判斷評論是好評還是差評;如果好評詞語的個數小于差評詞語的個數,則表明評論為差評。
執行代碼后的輸出結果如圖8-22所示,解析后的第1條評論為好評、第2條評論暫時無法判斷、第3條評論為差評,解析后的結果基本是正確。本小節的代碼僅用于演示效果,對于實際中廣泛的、真實的評論來說,需要完全分辨出好評或差評是一件較為困難的事情目前的常用方法是結合人工智能深度學習算法并解析每條評論的語義,但仍然只能是盡可能提高識別的正確率。?

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

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

相關文章

基于Hadoop的航空公司客戶數據分析與客戶群體K-measn聚類分析(含LRFMC模型)

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目介紹數據源介紹數據預處理hadoop集群分析建模分析總結每文一語有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主 項目介紹 本研究依托全國范圍內的航空公司…

實習內容總結

相關來自AI非內部資料 Monorepo 大倉 + pnpm + Turborepo 工程化實踐原理 核心概念解釋 1. Monorepo (單倉庫架構) 概念:將多個項目(packages)放在同一個代碼倉庫中管理,而非分散在多個倉庫。優勢:統一管理依賴、版本一致性、跨項目復用代碼、原子化提交、簡化CI/CD流程…

余電快速泄放電路

余電快速泄放電路&#xff0c;即放電電路&#xff0c;用在需要快速反復開關電源&#xff0c;且負載電路上有大容量電容的場景。 斷開電源開關后&#xff0c;如果負載電路有大電容&#xff0c;會引起負載電路上的電壓下降緩慢。此時如果重新接上電源開關&#xff0c;負載電路在未…

MOSFET驅動電路設計時,為什么“慢”開,“快”關?

MOSFET作為開關器件&#xff0c;在驅動電路中主要用于控制電流的通斷&#xff0c;比如在DC-DC轉換器、電機驅動或者功率放大電路中。它的開關過程&#xff08;開和關&#xff09;會直接影響電路的效率、發熱和可靠性。“慢開快關”的這個設計原則&#xff0c;背后有什么電路設計…

分音塔科技(BABEL Technology) 的公司背景、股權構成、產品類型及技術能力的全方位解讀

分音塔科技&#xff08;BABEL Technology&#xff09; 的公司背景、股權構成、產品類型及技術能力的全方位解讀 文章目錄**分音塔科技&#xff08;BABEL Technology&#xff09;** 的公司背景、股權構成、產品類型及技術能力的全方位解讀**一、公司背景&#xff1a;清華系AI企業…

2025科大訊飛AI大賽<大模型技術方向>(Datawhale AI 夏令營)

賽事報名鏈接&#xff1a;2025 iFLYTEK AI開發者大賽-訊飛開放平臺 本賽事聚焦電商直播帶貨場景&#xff0c;要求基于帶貨視頻及評論文本數據&#xff0c;完成三階段任務&#xff1a; 任務一&#xff1a;商品識別 數據方面的信息 數據來源&#xff1a;origin_videos_data.cs…

M|電鋸驚魂

rating: 7.5 豆瓣: 8.7 M&#xff5c;電鋸驚魂 懸疑片&#xff0c;不恐怖。 前期中規中矩&#xff0c;中后期bug很多&#xff08;降智、劇情殺等&#xff09;&#xff0c;但是反轉優秀。 總之&#xff0c;醫生夫妻、兩位警察在此片中各有不同程度的降智。也許是這種恐怖、懸疑電…

【Lucene/Elasticsearch】 數據類型(ES 字段類型) | 底層索引結構

在 Lucene/Elasticsearch 中&#xff0c;**BKD 樹只負責“多維數值”字段**。其余類型仍走傳統的 **倒排索引** 或專用格式&#xff1a;| 數據類型&#xff08;ES 字段類型&#xff09; | 底層索引結構 | 說明 | |---|---|---| | text、keyword&#xff08;字符串&#xff09; …

原型、原型對象

通俗理解&#xff1a;“類的原型對象就是一塊區域里有這個類的實例對象通用的屬性和方法”?這就是 JavaScript 中原型&#xff08;prototype&#xff09;的核心作用和設計理念。????“一塊區域” 原型對象本身&#xff08;如 String.prototype, Array.prototype, MyClass…

STM32 IIC通信(寄存器與hal庫實現)

一、IIC基礎知識 1. 串口通信與IIC通信串口通信通常需要至少三條線&#xff08;TX、RX和GND&#xff09;&#xff0c;而 I2C 總線僅需要兩條信號線&#xff08;SDA和SCL&#xff09;&#xff1b;串口通信僅支持一對一通信&#xff0c;而 I2C 總線支持多機通信&#xff0c;允許單…

寶塔 php支持sqlserver

PDOException: SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver for SQL Server to communicate with SQL Server.錯誤原因這是 PHP 試圖連接 SQL Server 數據庫&#xff0c;但缺少必要的 ODBC 驅動支持 導致的。具體來說&#xff1a;你使用的是 PDO_SQLS…

day02-數組part02

一、長度最小的子數組&#xff08;滑動窗口&#xff09; leetcode 209 長度最小子數組 這道題的核心思想就是使用滑動窗口&#xff0c;滑動窗口三板斧&#xff1a; 初始位置i滑動窗口長度j-i1結束位置j 我們在寫代碼時是通過for循環來控制結束位置j&#xff0c;而初始位置i…

天愛驗證碼深度解析:從原理到實戰,構建 Web 安全新防線

在網絡安全日益嚴峻的當下&#xff0c;驗證碼作為抵御自動化攻擊的重要屏障&#xff0c;其性能與可靠性直接關系到系統的安全穩定。天愛驗證碼&#xff08;TIANAI CAPTCHA&#xff09;作為國內優秀的開源行為驗證碼解決方案&#xff0c;憑借獨特的技術優勢&#xff0c;在電商、…

軟考(軟件設計師)軟件工程-軟件質量,軟件測試,McCabe圈復雜度

軟件質量 ISO/IEC 9126 是軟件工程領域的經典質量模型&#xff0c;于1991年首次發布&#xff0c;2001年更新后成為軟件產品質量評估的國際標準。其核心貢獻是將抽象的“質量”概念分解為可度量、可管理的特性體系。以下是深度解析&#xff08;2023年行業實踐視角&#xff09;&a…

CentOS7環境安裝包部署并配置MySQL5.7

卸載MySQL卸載MySQL5.71、關閉MySQL5.7服務service mysqld stop2、查看MySQL安裝rpm -qa|grep -i mysqlmysql-community-libs-5.7.35-1.el7.x86_64mysql-community-libs-compat-5.7.35-1.el7.x86_64mysql-community-common-5.7.35-1.el7.x86_64mysql57-community-release-el7-1…

1-Git安裝配置與遠程倉庫使用

Git安裝配置與遠程倉庫使用 1. Git 下載與安裝 ① 進入Git 官網 https://git-scm.com/ ② 選擇合適系統版本下載&#xff0c;本文以windows為例進行下載 當前最新版本為 2.50.1 &#xff0c;瀏覽器默認下載很慢&#xff0c;用迅雷比較快 ③ 安裝Git 我安裝在D盤 等待完…

開源“具身大腦” 實現不同機器人群體協作-RoboBrain

開源“具身大腦” 實現不同機器人群體協作-RoboBrain 具身大小腦協作框架RoboOS與開源具身大腦RoboBrain&#xff0c;實現跨場景多任務輕量化快速部署與跨本體協作&#xff0c;推動單機智能邁向群體智能&#xff0c;為構建具身智能開源統一生態加速場景應用提供底層技術支持。支…

【筆記】訓練步驟代碼解析

目錄 config參數配置 setup_dirs創建訓練文件夾 load_data加載數據 build_model創建模型 train訓練 記錄一下訓練代碼中不理解的地方 config參數配置 config {data_root: r"D:\project\megnetometer\datasets\WISDM_ar_latest\organized_dataset",train_dir: t…

Java填充Word模板

文章目錄前言一、設置word模板普通字段列表字段復選框二、代碼1. 引入POM2. 模板放入項目3.代碼實體類工具類三、測試四、運行結果五、注意事項前言 最近有個Java填充Word模板的需求&#xff0c;包括文本&#xff0c;列表和復選框勾選&#xff0c;寫一個工具類&#xff0c;以此…

【MYSQL8】springboot項目,開啟ssl證書安全連接

文章目錄一、開啟ssl證書1、msysql部署時默認開啟ssl證書2、配置文件3、創建用戶并指定ssl二、添加Java信任庫1、使用 keytool 導入證書2、驗證證書是否已導入三、修改連接配置一、開啟ssl證書 1、msysql部署時默認開啟ssl證書 可通過命令查看&#xff1a; SHOW VARIABLES L…