日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python中文分词 jieba 十五分钟入门与进阶

發布時間:2025/3/21 python 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中文分词 jieba 十五分钟入门与进阶 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 整體介紹
    • 三種分詞模式與一個參數
    • 關鍵詞提取
    • 中文歧義測試與去除停用詞
    • 三種可以讓分詞更準確的方法
    • 并行計算

整體介紹

jieba 基于Python的中文分詞工具,安裝使用非常方便,直接pip即可,2/3都可以,功能強悍,博主十分推薦
github:https://github.com/fxsjy/jieba
開源中國地址:http://www.oschina.net/p/jieba/?fromerr=LRXZzk9z
寫這篇文章花費兩個小時小時,閱讀需要十五分鐘,讀完本篇文章后您將能上手jieba

下篇博文將介紹將任意中文文本生成中文詞云

同時如果你希望使用其它分詞工具,那么你可以留意我之后的博客,我會在接下來的日子里發布其他有關內容.

三種分詞模式與一個參數

以下代碼主要來自于jieba的github,你可以在github下載該源碼

import jiebaseg_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 analysed = 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()參數提取關鍵字,默認參數為50print key.encode('utf-8')# 設置輸出編碼為utf-8不然在因為win下控制臺默認中文字符集為gbk,所以會出現亂碼# 當withWeight=True時,將會返回number類型的一個權重值(TF-IDF)

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

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

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

找停用詞點這里:多版本中文停用詞詞表 + 多版本英文停用詞詞表 + python詞表合并程序

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' # 郵箱:fonttian@163.com # CSDN:http://blog.csdn.net/fontthroneimport sys import jieba from os import pathd = 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 pathd = 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 psegtest_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 jiebajieba.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-t1log_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 十五分钟入门与进阶的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。