1. 程式人生 > >Python中文分詞 jieba 十五分鐘入門與進階

Python中文分詞 jieba 十五分鐘入門與進階

整體介紹

下篇博文將介紹將任意中文文字生成中文詞雲

同時如果你希望使用其它分詞工具,那麼你可以留意我之後的部落格,我會在接下來的日子裡釋出其他有關內容.

三種分詞模式與一個引數##

以下程式碼主要來自於jieba的github,你可以在github下載該原始碼

import jieba

seg_list = jieba.cut("我來到北京清華大學", cut_all=True, HMM=False)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut("我來到北京清華大學", cut_all=False, HMM=True)
print("Default Mode: " + "/ ".join(seg_list))  # 預設模式

seg_list = jieba.cut("他來到了網易杭研大廈", HMM=False)
print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造", HMM=False)  # 搜尋引擎模式
print(", ".join(seg_list))

# jieba.cut的預設引數只有三個,jieba原始碼如下
# cut(self, sentence, cut_all=False, HMM=True)
# 分別為:輸入文字 是否為全模式分詞 與是否開啟HMM進行中文分詞

分詞模式的執行結果

關鍵詞提取

from os import path
import jieba.analyse as analyse

d = path.dirname(__file__)

text_path = 'txt/lz.txt' #設定要分析的文字路徑
text = open(path.join(d, text_path)).read()

for key in analyse.extract_tags(text,50, withWeight=False):
# 使用jieba.analyse.extract_tags()引數提取關鍵字,預設引數為50
    print key.encode('utf-8')
    # 設定輸出編碼為utf-8不然在因為win下控制檯預設中文字符集為gbk,所以會出現亂碼
    # 當withWeight=True時,將會返回number型別的一個權重值(TF-IDF)

提取關鍵詞的執行效果

執行結果如圖所示,但是同樣的我們也發現了一些問題,比如:
問題一:
分詞錯誤,在執行結果中中"路明非"(龍族男主)被分成了"路明"和"明非"啷箇中文詞語,這是因為jieba的詞庫中並不含有該詞的原因,同樣的原因以及jieba詞庫比較老,因而在許多文字分詞時都會產生這種情況,而這個問題我們將在第五個模組"三種可以讓分詞更準確的方法"解決
問題二:
出現非實意詞語,無論在哪種語言中,都會存在大量的非實意單詞,這一類詞雲我們需要在進行中文分詞時進行去除停用詞,這個問題將在下一個模組中解決

中文歧義測試與去除停用詞##

本段程式碼主要來自於《機器學習實踐指南(第二版))》,其作者為麥好,ps:這是一本好書

import jieba
TestStr = "2010年底部隊友誼籃球賽結束"
# 因為在漢語中沒有空格進行詞語的分隔,所以經常會出現中文歧義,比如年底-底部-部隊-隊友
# jieba 預設啟用了HMM(隱馬爾科夫模型)進行中文分詞,實際效果不錯

seg_list = jieba.cut(TestStr, cut_all=True)
print "Full Mode:", "/ ".join(seg_list) # 全模式

seg_list = jieba.cut(TestStr, cut_all=False)
print "Default Mode:", "/ ".join(seg_list) # 預設模式
# 在預設模式下有對中文歧義有較好的分類方式

seg_list = jieba.cut_for_search(TestStr) # 搜尋引擎模式
print "cut for Search","/".join(seg_list)

中文歧義測試

去除文字中的停用詞

# - * - coding: utf - 8 -*-
#
# 作者:田豐(FontTian)
# 建立時間:'2017/5/27'
# 郵箱:[email protected]
# CSDN:http://blog.csdn.net/fontthrone

import sys
import jieba
from os import path

d = path.dirname(__file__)
stopwords_path = 'stopwords\stopwords1893.txt' # 停用詞詞表

text_path = 'txt/lz.txt' #設定要分析的文字路徑
text = open(path.join(d, text_path)).read()

def jiebaclearText(text):
    mywordlist = []
    seg_list = jieba.cut(text, cut_all=False)
    liststr="/ ".join(seg_list)
    f_stop = open(stopwords_path)
    try:
        f_stop_text = f_stop.read( )
        f_stop_text=unicode(f_stop_text,'utf-8')
    finally:
        f_stop.close( )
    f_stop_seg_list=f_stop_text.split('\n')
    for myword in liststr.split('/'):
        if not(myword.strip() in f_stop_seg_list) and len(myword.strip())>1:
            mywordlist.append(myword)
    return ''.join(mywordlist)

text1 = jiebaclearText(text)
print text1

龍族中文分詞去除中文停用詞後的效果

三種可以讓分詞更準確的方法##

方案一,在jieba中新增中文詞語:
這種方法可以有效的解決之前龍族男主"路明非"被分為"路明"和"明非"兩個詞的情況

#這個只需要在原始碼中加入一個語句即可
import sys
import jieba
from os import path

d = path.dirname(__file__)
stopwords_path = 'stopwords\stopwords1893.txt' # 停用詞詞表

jieba.add_word('路明非')
# 新增的自定義中文語句的程式碼在這裡
# 新增的自定義中文語句的程式碼在這裡
# 新增的自定義中文語句的程式碼在這裡

text_path = 'txt/lz.txt' #設定要分析的文字路徑
text = open(path.join(d, text_path)).read()

def jiebaclearText(text):
    mywordlist = []
    seg_list = jieba.cut(text, cut_all=False)
    liststr="/ ".join(seg_list)
    f_stop = open(stopwords_path)
    try:
        f_stop_text = f_stop.read( )
        f_stop_text=unicode(f_stop_text,'utf-8')
    finally:
        f_stop.close( )
    f_stop_seg_list=f_stop_text.split('\n')
    for myword in liststr.split('/'):
        if not(myword.strip() in f_stop_seg_list) and len(myword.strip())>1:
            mywordlist.append(myword)
    return ''.join(mywordlist)

text1 = jiebaclearText(text)
print text1

執行效果如下:
新增自定義語句之後

方案二,新增自定義詞庫:
下面的程式碼主要來自於jieba的github原始碼,你可以在github下載該例子

#encoding=utf-8
from __future__ import print_function, unicode_literals
import sys
sys.path.append("../")
import jieba
jieba.load_userdict("userdict.txt")
# jieba採用延遲載入,"import jieba"不會立即觸發詞典的載入,一旦有必要才開始載入詞典構建trie。如果你想手工初始jieba,也可以手動初始化。示例如下:
# import jieba
# jieba.initialize() #手動初始化(可選)
# 在0.28之前的版本是不能指定主詞典的路徑的,有了延遲載入機制後,你可以改變主詞典的路徑:
# 注意使用者詞典為主詞典即優先考慮的詞典,原詞典此時變為非主詞典
# jieba.set_dictionary('data/dict.txt.big')

import jieba.posseg as pseg

test_sent = (
"李小福是創新辦主任也是雲端計算方面的專家; 什麼是八一雙鹿\n"
"例如我輸入一個帶“韓玉賞鑑”的標題,在自定義詞庫中也增加了此詞為N類\n"
"「臺中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
)
words = jieba.cut(test_sent)
print('/'.join(words))

print("="*40)

result = pseg.cut(test_sent)
# pseg.cut 切分,並顯示詞性
# 下面是userdict.txt的內容,如果不加入這個詞庫,那麼在執行結果中,雲端計算,創新辦等詞都將無法識別
'''
雲端計算 5
李小福 2 nr
創新辦 3 i
easy_install 3 eng
好用 300
韓玉賞鑑 3 nz
八一雙鹿 3 nz
臺中
凱特琳 nz
Edu Trust認證 2000
'''

新增使用者詞典

下面這段程式碼主要來自於jieba的github,你可以在github下載該原始碼

print('='*40)
print('新增自定義詞典/調整詞典')
print('-'*40)

print('/'.join(jieba.cut('如果放到post中將出錯。', HMM=False)))
#如果/放到/post/中將/出錯/。
# 調整詞典使 中將 變為中/將
print(jieba.suggest_freq(('中', '將'), True))
#494
print('/'.join(jieba.cut('如果放到post中將出錯。', HMM=False)))
#如果/放到/post/中/將/出錯/。
print('/'.join(jieba.cut('「臺中」正確應該不會被切開', HMM=False)))
#「/臺/中/」/正確/應該/不會/被/切開
print(jieba.suggest_freq('臺中', True))
print(jieba.suggest_freq('臺中', True))
#69
# 調整詞典使 臺中 不被分詞為臺/中
print('/'.join(jieba.cut('「臺中」正確應該不會被切開', HMM=False)))
#「/臺中/」/正確/應該/不會/被/切開

平行計算

下面這段程式碼主要來自於jieba的github,你可以在github下載該原始碼

原理:將目標文字按行分隔後,把各行文字分配到多個python程序並行分詞,然後歸併結果,從而獲得分詞速度的可觀提升

基於python自帶的multiprocessing模組,目前暫不支援windows

import sys
import time
sys.path.append("../../")
import jieba

jieba.enable_parallel() # 關閉並行分詞
jieba.enable_parallel(4) # 開啟並行分詞模式,引數為並行程序數 

url = sys.argv[1]
content = open(url,"rb").read()
t1 = time.time()
words = "/ ".join(jieba.cut(content))

t2 = time.time()
tm_cost = t2-t1

log_f = open("1.log","wb")
log_f.write(words.encode('utf-8'))

print('speed %s bytes/second' % (len(content)/tm_cost))

實驗結果:在4核3.4GHz Linux機器上,對金庸全集進行精確分詞,獲得了1MB/s的速度,是單程序版的3.3倍。

相關推薦

Python中文 jieba 十五分入門

整體介紹 下篇博文將介紹將任意中文文字生成中文詞雲 同時如果你希望使用其它分詞工具,那麼你可以留意我之後的部落格,我會在接下來的日子裡釋出其他有關內容. 三種分詞模式與一個引數## 以下程式碼主要來自於jieba的github,你可以在github下載該原始碼

Python中文 jieba

問題 turn Coding windows 停用 分享圖片 詞典 ces text1 三種分詞模式與一個參數 以下代碼主要來自於jieba的github,你可以在github下載該源碼 import jieba seg_list = jieba.cut("我來到北京清

Python 中文 jieba(小白

0、安裝 法1:Anaconda Prompt下輸入conda install jieba 法2:Terminal下輸入pip3 install jieba 1、分詞 1.1、CUT函式簡介 cut(sentence, cut_all=False, HMM=

python中文jieba的高階應用

最近在使用python的中文分詞功能,感覺jieba挺不錯的,就轉載了這篇文章,希望對各位CSDN網友有所幫助。 jieba "結巴"中文分詞:做最好的Python中文分片語件 "Jieba"  Feature 支援三種分詞模式: 精確模式,試圖將句子最精確地

Python中文--jieba的基本使用

中文分詞的原理 1、中文分詞(Chinese Word Segmentation)  指的是將一個漢字序列切分成一個一個單獨的詞。 分詞就是將連續的字序列按照一定的規範重新組合成詞序列的過程 2、現有的分詞演算法可分為三大類:基於字串匹配的分詞方法、基於理解的分詞方法

Python第三方庫jieba(結巴-中文入門(官方文檔)

修改 demo 特點 pypi nlp CA 動態修改 tag 官方文檔 jieba “結巴”中文分詞:做最好的 Python 中文分詞組件。下載地址:https://github.com/fxsjy/jieba 特點 支持三種分詞模式: 精確模式,試圖將句子最精確地

python基礎===jieba模塊,Python 中文組件

word cut 用法 地址 api mas 精確 == com api參考地址:https://github.com/fxsjy/jieba/blob/master/README.md 安裝自行百度 基本用法: import jieba #全模式 word = jie

python中文器(jieba類庫)

 先上效果圖: 資料來源: 分詞後的txt檔案: 分詞後的excel檔案: 原始碼: #!/usr/bin/python # -*- coding: UTF-8 -*- # *************************************

Python中文_使用介紹(wordcloud+jieba)

詞雲又叫文字雲,是對文字資料中出現頻率較高的“關鍵詞”在視覺上的突出呈現,形成關鍵詞的渲染形成類似雲一樣的彩色圖片,從而一眼就可以領略文字資料的主要表達意思。 安裝需要的libs 接下來的程式碼裡會用到如下四個主要的libs,我本地是64位win10,安

python中文工具:結巴jieba

結巴分詞jieba特點    支援三種分詞模式:        精確模式,試圖將句子最精確地切開,適合文字分析;        全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;        搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提

中文jieba python 學習

中文分詞工具,結巴分詞很好用,以下是驗證小結。 import jieba import jieba.analyse import jieba.posseg as pseg import time filename='tianlongbabu.txt' def file_ji

jieba(結巴)—— Python 中文

學術界著名的分詞器: 中科院的 ICTCLAS,程式碼並不十分好讀 哈工大的 ltp, 東北大學的 NIU Parser, 另外,中文 NLP 和英文 NLP 不太一致的地方還在於,中文首先需要分詞,針對中文的分詞問題,有兩種基本的解決思路: 啟發式(He

PyNLPIR python中文工具

命名 hub 兩個 工具 ict mage ret wid tty 官網:https://pynlpir.readthedocs.io/en/latest/ github:https://github.com/tsroten/pynlpir NLPIR分詞系

python中文,使用結巴python進行

php 分詞 在采集美女站時,需要對關鍵詞進行分詞,最終采用的是python的結巴分詞方法.中文分詞是中文文本處理的一個基礎性工作,結巴分詞利用進行中文分詞。其基本實現原理有三點:基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG)采用了動態規劃查找最大概率

優秀的中文jieba

不存在 分詞 png 搜索引擎 函數 inf alt TP eba jieba庫的簡介 jieba是優秀的中文分詞庫,中文文本需要通過分詞來獲的單個詞語。jieba庫提供了三種分詞模式:精確模式,全模式,搜索引擎模式。精確模式是將文本精確割分,不存在冗余。全模式是將文本中所

python 結巴(jieba)詳解

【轉自:https://www.cnblogs.com/jackchen-Net/p/8207009.html】 “結巴”中文分詞:做最好的 Python 中文分片語件 "Jieba" (Chinese for "to stutter") Chinese text segmentation:

中文 jieba和HanLP

安裝python包: pip install nltk pip install jieba pip install pyhanlp pip install gensim 使用jieba進行分詞 import jieba content = "現如今,機器學習和深度學習帶動人工智

python 結巴(jieba)學習

原始碼下載的地址:https://github.com/fxsjy/jieba 演示地址:http://jiebademo.ap01.aws.af.cm/ 特點 1,支援三種分詞模式:     a,精確模式,試圖將句子最精確地切開,適合文字分析;      b,全

Python中文模組結巴演算法過程的理解和分析

結巴分詞是國內程式設計師用python開發的一箇中文分詞模組, 原始碼已託管在github, 地址在: https://github.com/fxsjy/jieba 作者的文件寫的不是很全, 只寫了怎麼用, 有一些細節的文件沒有寫. 以下是作者說明檔案中提到的結巴分

Python 中文 NLPIR 快速搭建

前述 本篇文章寫完需要半個小時,閱讀需要十分鐘,讀完後,你將學會在Python中使用NLPIR,以及關於使用它的一些有用的基礎知識 NLPIR 是中科院的漢語分詞系統,在Python中使用也比較廣泛,而且曾多次奪得漢語分詞比賽的冠軍,並且其可以在多個語言上都