首頁 > 軟體

python中jieba模組的深入瞭解

2022-06-21 18:01:44

一、前言        

英語單詞之間是通過空格分隔的,但是中文卻不存在空格的概念,因此需要一個模組來解決中文的分詞問題。jieba模組是一個python第三方中文分詞模組,可以用於將語句中的中文詞語分離出來

此外,全國計算機等級考試二級python語言程式設計也涉及到該模組的相關知識。因此大家可以好好了解下該模組。

二、模組的安裝

 jieba模組作為python的一個第三方模組,是需要我們自行下載安裝後才能使用的,我們主要採用pip安裝工具進行jieba的安裝,具體步驟如下:

在windows作業系統中,快捷鍵win+R

然後輸入cmd,點選確定,開啟

輸入:

pip install jieba 

即可安裝成功。

三、jieba模組具體講解

3.1分詞模式

jieba模組支援三種分詞模式:全模式、精準模式以及搜尋引擎模式。

①全模式:全模式可以將句子中所有可能的詞語全部提取出來,該模式提取速度快,但可能會出現冗餘詞彙

如圖,第一行出現了冗餘詞彙,其採用的就是全模式,而第二行採用精準模式。

②精準模式:精準模式通過優化的智慧演演算法將語句精準的分隔,適用於文字分析

③搜尋引擎模式:搜尋引擎模式在精準模式的基礎上對詞語進行再次劃分,提高召回率,適用於搜尋引擎分詞。 

3.2cut()、lcut()

3.2.1cut(sentence, cut_all=False, HMM=True, use_paddle=False)

引數解析:

  sentence:要分割的str(unicode)。

  cut_all:模型型別。True 表示全模式,False 表示精準模式。其預設為精準模式。

  HMM:是否使用隱馬爾可夫模型。

函數功能: 

The main function that segments an entire sentence that contains Chinese characters into separated words.

將包含漢字的整個句子分割成單獨的單詞的主要功能。

import jieba
sentence = 'python是世界上最好的程式語言'
ls = jieba.cut(sentence, cut_all=False)
print(ls)
# <generator object Tokenizer.cut at 0x000001966B14EA98>

print(type(ls))
# <class 'generator'>

 

如圖,其是迭代器型別,可以用以下三種方式顯示結果

①' '.join()

# ①''.join
ls_1 = ' '.join(ls)
print(ls_1)
# python 是 世界 上 最好 的 程式設計 程式語言 語言

②for迴圈遍歷 

# ②for迴圈遍歷
for i in ls:
    print(i)
'''
python
是
世界
上
最好
的
程式語言
'''

③列表推導式

# ③列表推導式
ls_2 = [i for i in ls]
print(ls_2)
# ['python', '是', '世界', '上', '最好', '的', '程式語言']

3.2.2lcut(sentence,cut_all=False)

    def lcut(self, *args, **kwargs):
        return list(self.cut(*args, **kwargs))

檢視jieba模組,其定義lcut()函數如上,可以發現lcut()函數最終返回的是list(cut())

import jieba
sentence = 'python是世界上最好的程式語言'
ls = jieba.cut(sentence, cut_all=False)
print(ls)
print(list(ls))
ls1 = jieba.lcut(sentence, cut_all=True)
print(ls1)
ls2 = jieba.lcut(sentence)
print(ls2)

結果如下 :

注意:cut_all=False是精準模式,也是其預設的型別。

3.3cut_for_search()、lcut_for_search()

cut_for_search(sentence, HMM=True)和lcut_for_search(sentence, HMM=True)和上面所講的類似。其都是對搜尋引擎進行更精細的細分,即採用搜尋引擎模式。

import jieba
sentence = 'python是世界上最好的程式語言'
ls3 = jieba.cut_for_search(sentence)
print(ls3)
# <generator object Tokenizer.cut_for_search at 0x00000199C7A3D9A8>
print(list(ls3))
# ['python', '是', '世界', '上', '最好', '的', '程式設計', '語言', '程式語言']
ls4 = jieba.lcut_for_search(sentence)
print(ls4)
# ['python', '是', '世界', '上', '最好', '的', '程式設計', '語言', '程式語言']

3.4add_word(self, word, freq=None, tag=None)

Add a word to dictionary.
freq and tag can be omitted, freq defaults to be a calculated value that ensures the word can be cut out.
  • 函數功能:在字典中新增一個單詞。
  • 引數解析:freq 和 tag 可以省略,freq 預設是一個計算值,保證單詞可以被切掉。
import jieba
sentence = 'python是世界上最好的程式語言'
ls2 = jieba.lcut(sentence)
print(ls2)
ls5 = jieba.add_word('最好的')
ls6 = jieba.lcut(sentence)
print(ls6)

 

結果如上,最終最好的就沒有被切掉。

3.5del_word(word)

函數功能:分詞詞典中刪除詞word

import jieba
sentence = 'python是世界上最好的程式語言'
ls2 = jieba.lcut(sentence)
print(ls2)
ls7 = jieba.del_word('世界')
ls8 = jieba.lcut(sentence)
print(ls8)

不過經過筆者更改word,發現word是程式語言時,最後就分割成了程式設計和語言;當word是程式設計時,結果沒變化;當word是python時,結果也沒變化。因此有些需要筆者自己去嘗試。

3.6suggest_freq(segment, tune=False)

 """
        Suggest word frequency to force the characters in a word to be
        joined or splitted.
        Parameter:
            - segment : The segments that the word is expected to be cut into,
                        If the word should be treated as a whole, use a str.
            - tune : If True, tune the word frequency.
        Note that HMM may affect the final result. If the result doesn't change,
        set HMM=False.
        """
  • 函數功能:建議詞頻,強制將單詞中的字元合併或拆分。
  • 引數解析:
    •   segment :該單詞預期被切割成的片段,如果該單詞應該被視為一個整體,則使用str。
    •   tune : 如果為True,則調整詞頻。

注意:HMM可能會影響最終結果。如果結果不變,設定HMM=False。 

3.7tokenize(unicode_sentence, mode="default", HMM=True)

  """
        Tokenize a sentence and yields tuples of (word, start, end)
        Parameter:
            - sentence: the str(unicode) to be segmented.
            - mode: "default" or "search", "search" is for finer segmentation.
            - HMM: whether to use the Hidden Markov Model.
        """
  • 函數功能:標記一個句子併產生 (word, start, end) 的元組
  • 引數解析:
    •     unicode_sentence:要分割的 str(unicode)。
    •     模式:"default" or "search", "search" is for finer segmentation.    “預設”或“搜尋”,“搜尋”用於更精細的分割。
    •     HMM: 是否使用隱馬爾可夫模型。 

四、所需程式碼展示

# -*- coding: utf-8-*-
import jieba
sentence = 'python是世界上最好的程式語言'
ls = jieba.cut(sentence, cut_all=False)
# print(ls)
# print(list(ls))
# # <generator object Tokenizer.cut at 0x0000019F5E44DA98>
# print(type(ls))
# # <class 'generator'>
 
# # ①''.join
# ls_1 = ' '.join(ls)
# print(ls_1)
# # python 是 世界 上 最好 的 程式語言
# ②for迴圈遍歷
# for i in ls:
#     print(i)
# '''
# python
# 是
# 世界
# 上
# 最好
# 的
# 程式語言
# '''
# # ③列表推導式
# ls_2 = [i for i in ls]
# print(ls_2)
# # ['python', '是', '世界', '上', '最好', '的', '程式語言']
# ls1 = jieba.lcut(sentence, cut_all=True)
# print(ls1)
ls2 = jieba.lcut(sentence)
print(ls2)
 
# ls3 = jieba.cut_for_search(sentence)
# print(ls3)
# # <generator object Tokenizer.cut_for_search at 0x00000199C7A3D9A8>
# print(list(ls3))
# # ['python', '是', '世界', '上', '最好', '的', '程式設計', '語言', '程式語言']
# ls4 = jieba.lcut_for_search(sentence)
# print(ls4)
# ['python', '是', '世界', '上', '最好', '的', '程式設計', '語言', '程式語言']
 
# ls5 = jieba.load_userdict('文案.txt')
# ls6 = jieba.lcut(sentence)
# print(ls6)
# ls5 = jieba.add_word('最好的')
# ls6 = jieba.lcut(sentence)
# print(ls6)
ls7 = jieba.del_word('世界')
ls8 = jieba.lcut(sentence)
print(ls8)

需要的可以自行復制

五、總結

  • ①全國計算機等級考試二級python語言程式設計中涉及到的內容一般只是分詞模式、lcut()、lcut_for_search()和add_word()這幾方面知識;
  • ②筆者所寫的不是特別詳細,要是之後有好的案例或者其他方式,會進行新增以及完善3.6,3.7的內容;
  • ③該模組的理解與使用不是特別難,希望大家自己動手試試,找幾個案例,敲敲程式碼!!

到此這篇關於python中jieba模組的深入瞭解的文章就介紹到這了,更多相關python jieba 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com