nlp之jieba分詞

“結巴”中文分詞:做最好的 Python 中文分詞組件

安裝jieba

全自動安裝:easy_install jieba 或者 pip install jieba / pip3 install jieba
半自動安裝:先下載 http://pypi.python.org/pypi/jieba/ ,解壓後運行 python setup.py install
手動安裝:將 jieba 目錄放置於當前目錄或者 site-packages 目錄
通過 import jieba 來引用

主要功能:

分詞
jieba.cut 方法接受三個輸入參數:需要分詞的字符串;cut_all參數用來控制是否採用全模式;HMM參數用來控制是否使用HMM模型

jieba.cut_for_search 方法接受兩個參數:需要分詞的字符串;是否使用HMM模型。該方法適合用於搜索引擎構建倒排索引的分詞,粒度比較細

待分詞的字符串可以是unicode或UTF8字符串,GBK字符串,注意:不建議直接輸入GBK字符串,可能無法預料地錯誤解碼成UTF-8

jieba.cut以及jieba.cut_for_search返回的結構都是一個可迭代的generator,可以使用for循環來獲取分詞後得到的每一個詞語(unicode),或者用jieba.lcut以及jieba.lcut_for_search直接返回list

jieba.Tokenizer(dictionary=DEFAULT_DICT)新建自定義分詞器,可用於同時使用不同詞典。jieba.dt爲默認分詞器,所有全局分詞相關函數都是該分詞器的映射。

1、分詞全模式

import jieba
#1、分詞全模式
text="我們學習大數據與人工智能NLP處理"
seg_list=jieba.cut(text,cut_all=True)
print("【1 全模式】"+"---".join(seg_list))

輸出:
【1 全模式】我們---學習---大數---數據---與---人工---人工智能---智能---NLP---處理

2、精確模式—用的比較多

import jieba

text="我們學習大數據與人工智能NLP處理"
#2 精確模式---用的比較多 NLP中用這個
seg_list=jieba.cut(text,cut_all=False)
print("【2 精確模式】"+"---".join(seg_list))

輸出:
【2 精確模式】我們---學習---大---數據---與---人工智能---NLP---處理

3、搜索引擎模式

import jieba

text="我們學習大數據與人工智能NLP處理"
seg_list=jieba.lcut_for_search(text)
print("【3 搜索引擎模式】"+"---".join(seg_list))

輸出:
【3 搜索引擎模式】我們---學習---大---數據---與---人工---智能---人工智能---NLP---處理

4、繁體分詞

import jieba

text="臺灣回歸祖國大陸"
seg_list=jieba.cut(text,cut_all=False)
print("【4 繁體字分詞】"+"---".join(seg_list))

輸出:
【4 繁體字分詞】臺---灣回---歸祖國---大陸

5、自定義用戶詞典
本地有名爲userdict的文件裏面是自己需要的詞彙

import jieba

jieba.load_userdict("userdict")
seg_list=jieba.cut(text,cut_all=False)
#動態增加詞典
jieba.add_word("攻城獅")
jieba.add_word("白富美")
print("【5 加載用戶詞典後,繁體分詞】"+"---".join(seg_list))

6、關鍵詞抽取

import jieba
#別名 anls
import jieba.analyse as anls

paragraphs="過去幾十年裏,國內外的互聯網巨頭基本都誕生於搜索、社交、電商、衣食住行等生活和消費領域,那時的互聯網也被稱作消費級互聯網,即To C。"\

"但近年來,人口紅利逐漸消失。據QuestMobile研究,2019年,移動互聯網月活用戶規模達到11.38億,增長進一步放緩,月活用戶的增速一直在下跌,2017年12月同比增長6.3%。"\

"而到2019年3月同比增速更是首次跌破了4%;在用戶增長方面,2019年一季度用戶人均單日使用時長增長僅爲半個小時,時長增幅有收窄的趨勢"

#基於 TF-IDF 算法的關鍵詞抽取
keywords = anls.extract_tags(paragraphs,topK=5,withWeight=True)
for keyword,weight in keywords:
    print('%s %s'%(keyword,weight))

#基於 TextRank 算法的關鍵詞抽取
keywords=anls.textrank(paragraphs,topK=5,withWeight=True)
print("textrank 詞的排名 page ranak 網頁排名")
for keyword,weight in keywords:
    print('%s %s'%(keyword,weight))

輸出:

互聯網 1.1245093822563157
電商 0.6469073547105263
消費 0.5559631741768422
衣食住行 0.5267819659947368
社交 0.4924938352478947
textrank 詞的排名 page ranak 網頁排名
互聯網 1.0
消費 0.7601365054568479
誕生 0.6558737425451479
電商 0.5407756667693269
社交 0.5377715630594668

添加自定義詞典

關鍵詞提取

詞性標註

import jieba
import jieba.posseg as pseg
words=pseg.cut("我愛北京天安門")
for word,flag in words:
    print('%s %s' % (word,flag))

輸出:
我 r
愛 v
北京 ns
天安門 ns

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

基於 python 自帶的 multiprocessing 模塊,目前暫不支持 Windows

用法:

jieba.enable_parallel(4) # 開啓並行分詞模式,參數爲並行進程數
jieba.disable_parallel() # 關閉並行分詞模式

Tokenize:返回詞語在原文的起止位置
默認模式

import jieba

result=jieba.tokenize(u'永和服裝飾品有限公司')
for tk in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

輸出:
word 永和		 start: 0 		 end:2
word 服裝		 start: 2 		 end:4
word 飾品		 start: 4 		 end:6
word 有限公司		 start: 6 		 end:10

搜索模式

import jieba

result = jieba.tokenize(u'永和服裝飾品有限公司', mode='search')
for tk in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

輸出:
word 永和                start: 0                end:2
word 服裝                start: 2                end:4
word 飾品                start: 4                end:6
word 有限                start: 6                end:8
word 公司                start: 8                end:10
word 有限公司            start: 6                end:10
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章