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中使用也比較廣泛,而且曾多次奪得漢語分詞比賽的冠軍,並且其可以在多個語言上都