Life is short,I need python . NPL jieba分詞基礎(下)

jieba 分詞基礎 (下)

調整詞典

使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中動態修改詞典。
使用 suggest_freq(segment, tune=True) 可調節單個詞語的詞頻,使其能(或不能)被分出來。
注意:自動計算的詞頻在使用 HMM 新詞發現功能時可能無效。
對字典進行調整示例:

在這裏插入圖片描述

在這裏插入圖片描述


詞性標註

jieba.posseg.POSTokenizer(tokenizer=None) 新建自定義分詞器,tokenizer 參數可指定內部使用的 jieba.Tokenizer 分詞器。jieba.posseg.dt 爲默認詞性標註分詞器。
標註句子分詞後每個詞的詞性,採用和 ictclas 兼容的標記法。
用法示例

# 詞性標註
import jieba.posseg as pseg

words = pseg.cut("我愛北京天安門")
# words類別爲:generator

for word, flag in words:
    print('%s %s' % (word, flag))

在這裏插入圖片描述

關鍵詞提取

基於 TF-IDF(term frequency–inverse document frequency) 算法的關鍵詞抽取

import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

sentence :爲待提取的文本
topK: 爲返回幾個 TF/IDF 權重最大的關鍵詞,默認值爲 20
withWeight : 爲是否一併返回關鍵詞權重值,默認值爲 False
allowPOS : 僅包括指定詞性的詞,默認值爲空,即不篩選

# 基於TF-IDF算法的關鍵詞抽取

# 基於TF-IDF算法的關鍵詞抽取

import jieba
import jieba.analyse

sentence = '全國港澳研究會會長徐澤在會上發言指出,學習系列重要講話要深刻領會主席關於香港迴歸後的憲制基礎和憲制秩序的論述,這是過去20年特別是中共十八大以來一國兩制在香港實踐取得成功的根本經驗。首先,要在夯實 香港的憲制基礎、鞏固香港的憲制秩序上着力。只有牢牢確立起一國兩制的憲制秩序,才能保證一國兩制實踐不走樣 、不變形。其次,要在完善基本法實施的制度和機制上用功。中央直接行使的權力和特區高度自治權的結合是特區憲制秩 序不可或缺的兩個方面'
keywords = jieba.analyse.extract_tags(sentence, topK=20, withWeight=True, allowPOS=('n','nr','ns'))

# print(type(keywords))
# <class 'list'>

for item in keywords:
    print(item[0],item[1])
	
	

在這裏插入圖片描述


基於 TextRank 算法的關鍵詞抽取

ieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 直接使用,接口相同,注意默認過濾詞性。
jieba.analyse.TextRank() 新建自定義 TextRank 實例
基本思想:

將待抽取關鍵詞的文本進行分詞
以固定窗口大小(默認爲5,通過span屬性調整),詞之間的共現關係,構建圖
計算圖中節點的PageRank,注意是無向帶權圖

import jieba
import jieba.analyse

sentence = '全國港澳研究會會長徐澤在會上發言指出,學習系列重要講話要深刻領會主席關於香港迴歸後的憲制基礎和憲制秩序的論述,這是過去20年特別是中共十八大以來一國兩制在香港實踐取得成功的根本經驗。首先,要在夯實 香港的憲制基礎、鞏固香港的憲制秩序上着力。只有牢牢確立起一國兩制的憲制秩序,才能保證一國兩制實踐不走樣 、不變形。其次,要在完善基本法實施的制度和機制上用功。中央直接行使的權力和特區高度自治權的結合是特區憲制秩 序不可或缺的兩個方面'


# 基於TextRank算法的關鍵詞抽取

keywords = jieba.analyse.extract_tags(sentence, topK=20, withWeight=True, allowPOS=('n','nr','ns'))

# type(keywords)
# <class 'list'>

for item in keywords:
    print(item[0],item[1])
	

在這裏插入圖片描述


Tokenize

返回詞語在原文的起止位置
此功能輸入參數只接受 unicode
默認模式
搜索模式

#encoding=utf-8
from __future__ import unicode_literals  #將模塊中顯式出現的所有字符串轉爲unicode類型
import jieba
result = jieba.tokenize('彼此挾持這另一部分的自已') #默認模式進行分詞,Tokenize: 返回詞語在原文的起止位置
print("默認模式爲:")
for tk in result:
  print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

result = jieba.tokenize(u'彼此挾持這另一部分的自已', mode='search')
print("搜索模式爲:")
for tk1 in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk1[0],tk1[1],tk1[2]))

在這裏插入圖片描述


對《西遊記》進行分詞處理(尚未解決的問題)

python -m jieba xiyouji.txt >xiyouji_cutcopy.txt

利用上述代碼進行對於西遊記的分詞 出現了下列的情況
在這裏插入圖片描述
程序顯示 創建 copy成功,但是在分詞到0xfe之後 就無法進行分詞

在這裏插入圖片描述

從兩個文本的大小我們可以看出 ,cutcopy 並未完成所有的任務,而是其中的一小部分進行了分詞。
在這裏插入圖片描述

在這裏插入圖片描述

出現上述的問題之後 ,我嘗試將xiyouji.txt 的編碼改成 uncode 和 UTF-8但是 運行後的cutcopy 文件爲0KB。問題尚未解決。 個人認爲,在操作方式相同,文本無誤的情況之下,應該是由於python2 和python3之間的版本的兼容問題造成的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章