深度學習文本分析利器:3分鐘入門jieba,代碼實例快速上手

和英文與拉丁語系不同,中文是緊湊連接的,詞與詞之間不用空格來分割,而當我們進行自然語言處理或者語音識別,或者進行其他的文本操作時,在大部分情況下,詞彙是文本的核心,是進行文本處理的前提,因此需要一個簡單高效的工具把完整的文本分解為具體的詞,為文本處理做出更加準確詞庫,這樣的一個操作我們稱為“分詞”。jieba就是這樣一個對新手非常友好的,進行分詞的工具,而且還包含了一些其他的功能。本文將用代碼詳解jieba的使用。

深度學習文本分析利器:3分鐘入門jieba,代碼實例快速上手

首先是jieba的安裝

很簡單的一條命令:pip install jieba,然後在python程序中輸入import jieba並執行,如果沒有出錯就說明安裝完成。

基本分詞函數與用法

jieba.cut和jieba.cut_for_search是分詞的基本函數,它們返回的結構都是一個可迭代的generator,例如下面一句話就會被分解為若干個詞語,我們可以使用for循環得到每一個詞。

代碼:

jieba_str = "人工智能技術是創造未來智能化社會的重要技術!"

seg_list = jieba.cut(jieba_str,cut_all=True)

print(seg_list)

執行結果:

<generator>

可以看到,直接輸出的話就輸出的是一個generator,那麼為了得到一個直觀的分詞結果,我們可以使用join函數和一個分隔符將得到的每個詞拼接為一句話,如下所示。

代碼:

jieba_str = "人工智能技術是創造未來智能化社會的重要技術!"

seg_list = jieba.cut(jieba_str,cut_all=True)

print("/".join(seg_list))

執行結果:

人工/人工智能/智能/技術/是/創造/未來/智能/智能化/社會/的/重要/技術//

我們可以看到,一句話得到了良好的分詞效果,jieba.cut函數中的參數,第一個參數是要分解的字符串,第二個cut_all參數指是否使用全模式,如果為True,則使用全模式,False為不使用全模式,使用全模式後,分解的粒度會更加精細,不使用全模式時,只會把一句話分解,分解的詞不會重複。如下。

當cut_all為False時上段代碼的執行結果:

人工智能/技術/是/創造/未來/智能化/社會/的/重要/技術/!

下面分析jieba中cut_all_search的用法,這個函數也是用來進行分詞,不同的是,這個函數用的是搜索引擎模式,相比於全模式的分詞,搜索引擎模式的分詞更加精細化!

代碼:

seg_list_search = jieba.cut_for_search(jieba_str)

print("/".join(seg_list_search))

執行結果:

人工/智能/人工智能/技術/是/創造/未來/智能/智能化/未來社會/社會/的/重要/技術/!

但是根據我們的經驗,人工智能應該是一個專用名詞,而不應該被分開,所以,jieba允許用戶添加專用的名詞詞包,詞包中出現的詞語都將不會被劃分。添加詞包的方法如下。

代碼如下:

user_dict = ["人工智能技術"]

jieba.load_userdict(user_dict)

這裡使用的是load_userdict()函數,這個函數傳入的也可以是一個txt文件,文件中的每一行代表一個專屬名詞,經過這一函數的操作,原來的非全模式代碼執行結果如下:

人工智能技術/是/創造/未來/智能化/社會/的/重要/技術/!

可以看到,這裡的人工智能技術已經作為一個完整的詞語了。

如果需要添加的詞彙量非常少時,也可以用add_word(word,freq=None,tag=None)添加名詞和del(word)刪除名詞。

代碼:

jieba.add_word("人工智能技術是創造")

jieba_str = "人工智能技術是創造未來智能化社會的重要技術!"

seg_list = jieba.cut(jieba_str,cut_all=False)

print("/".join(seg_list))

執行結果:

人工智能技術是創造/未來/智能化/社會/的/重要/技術/!

可以看到,人工智能技術是創造已經作為一個專有名詞沒有被分開。類似的也可以使用del刪去專有名詞。

以上函數是jieba這一庫中用的最頻繁的函數,也是其核心功能,只需對這幾個函數稍加練習,基本上就掌握了jieba庫的使用,如果使用過程有問題,歡迎評論!


分享到:


相關文章: