jieba目前是一款比較好分詞模塊
import jieba # 可使用jieba.cut進行分詞 sentence = "失去戀人所帶來的苦痛遠遠超過了他的承受範圍" """ 函數大體以下 jieba.cut(sentence, cut_all=False, HMM=True) sentence:分詞的句子 cut_all:是否使用全模式,默認是False,表示精準模式 HMM:是否使用隱藏馬爾科夫模型,默認爲True """ seg = jieba.cut(sentence) # 獲得的seg是一個生成器 print(list(seg)) # ['失去', '戀人', '所', '帶來', '的', '苦痛', '遠遠', '超過', '了', '他', '的', '承受', '範圍'] # 能夠看到分的仍是蠻準確的 # 若是使用全模式呢 seg = jieba.cut(sentence, cut_all=True) print(list(seg)) # ['失去', '戀人', '所', '帶來', '的', '苦痛', '遠遠', '遠超過', '超過', '了', '他', '的', '承受', '範圍'] # 默認通常都是用精準模式 # 除了jieba.cut以外還有一個jieba.lcut,二者之間功能同樣,只不事後者會直接返回一個列表 # 搜索引擎模式 seg = jieba.cut_for_search(sentence) print(list(seg)) # ['失去', '戀人', '所', '帶來', '的', '苦痛', '遠遠', '超過', '了', '他', '的', '承受', '範圍'] # 因爲句子比較簡單,致使和cut的結果是相似的 # 同理也有lcut_for_search,也是直接返回一個列表
import jieba # 可使用jieba.cut進行分詞 sentence = "古明地覺來自於東方地靈殿,是一個超級可愛的女孩" print(jieba.lcut(sentence)) # ['古明', '地覺', '來自', '於', '東方', '地靈', '殿', ',', '是', '一個', '超級', '可愛', '的', '女孩'] # 注意到,古明地覺四個字被進行了切割,能夠若是我想讓它做爲總體出現呢 # jieba分詞會使用一個詞典,根據詞典裏面的詞進行分詞,若是像人名之類的,再也不jieba使用的詞典裏,那麼分詞就會出現不預期以內的結果 # 因此咱們能夠自定義詞典,追加到jieba使用的詞典裏面
自定義的詞典格式以下:python
詞語 詞頻(可省略) 詞性(可省略)算法
至於詞頻和詞性後面會說函數
自定義一個1.txt文件,裏面包含內容以下搜索引擎
古明地覺 東方地靈殿
import jieba sentence = "古明地覺來自於東方地靈殿,是一個超級可愛的女孩" print(jieba.lcut(sentence)) # ['古明', '地覺', '來自', '於', '東方', '地靈', '殿', ',', '是', '一個', '超級', '可愛', '的', '女孩'] jieba.load_userdict("1.txt") print(jieba.lcut(sentence)) # ['古明地覺', '來自', '於', '東方地靈殿', ',', '是', '一個', '超級', '可愛', '的', '女孩'] # 能夠看到,在將咱們自定義的詞典load進去以後,就能分出咱們想要的結果了 # 由於jieba使用詞典裏的單詞,詞性標註,詞頻等等來切割單詞 # 但若是詞不在裏面的話,就不行了,所以咱們能夠本身定義告訴結巴,'古明地覺'和'東方地靈殿'都是一個總體,不要進行切割
除此以外,還能夠不用經過加載文件的方式來加載詞典
code
import jieba sentence = "古明地覺來自於東方地靈殿,是一個超級可愛的女孩" print(jieba.lcut(sentence)) # ['古明', '地覺', '來自', '於', '東方', '地靈', '殿', ',', '是', '一個', '超級', '可愛', '的', '女孩'] # 經過add_word的方式一樣能夠添加咱們本身定義的詞語 jieba.add_word("古明地覺") jieba.add_word("東方地靈殿") print(jieba.lcut(sentence)) # ['古明地覺', '來自', '於', '東方地靈殿', ',', '是', '一個', '超級', '可愛', '的', '女孩'] # 固然也能夠動態參數 jieba.del_word("東方地靈殿") print(jieba.lcut(sentence)) # ['古明地覺', '來自', '於', '東方', '地靈', '殿', ',', '是', '一個', '超級', '可愛', '的', '女孩'] # 能夠看到,在刪除'東方地靈殿'以後,又分的不許了
jieba 提供了兩種關鍵詞提取方法,分別基於 TF-IDF 算法和 TextRank 算法。
索引
TF-IDF(Term Frequency-Inverse Document Frequency, 詞頻-逆文件頻率)token
一個詞語在一篇文章中出現次數越多,同時在全部文檔中出現次數越少,越可以表明該文章文檔
import jieba import jieba.analyse sentence = """ 地靈殿的主人。 雖然地底都市已經被排除在地獄以外,但那些曾經是地獄設施的遺蹟裏 依然還殘留着無數充滿怨念的靈們,於是必須有人對他們進行管理。 在灼熱地獄遺址上創建起了地靈殿,她就在那裏居住了下來。 由於她可以讀取他人心中的想法,不論是任何妖怪,怨靈都爲之感到恐懼, 不知從什麼時候起幾乎沒有人再來地靈殿造訪了。 可是,相反由於能讀心而受到那些不會說話的動物們的喜好,地靈殿逐漸 變成了充滿火焰貓,地獄鴉等寵物們的房屋。 由於寵物的增多結果致使灼熱地獄遺蹟沒法完美的管理,最後只得把不少 管理事項交由寵物們去作。 把寵物的管理交給寵物去作。 把庭院的修繕交給寵物去作。 把陪妹妹玩的工做交給寵物去作,如此。 可是,忽然出現不該該出現的地上的人類,在據說怨靈和間歇泉異變 以後她大吃一驚。 怨靈的管理她交由阿燐去作,灼熱地獄的火力調節則交給了阿空。 她們應該都是忠心於覺不會作什麼壞事纔對。她相信決不會發生 什麼異變纔對。 搞很差,也許是眼前這我的類撒謊有什麼別的企圖,她這麼想着。 讀了那人類心中的想法以後,她又吃了一驚。 她們的心中,幾乎沒有任何關於怨靈和間歇泉的情報。 覺詫異了,她決定先試探一下她們。 """ for x in jieba.analyse.extract_tags(sentence, withWeight=True): """ 接收參數以下: sentence:句子 topK:返回幾個 TF/IDF 權重最大的關鍵詞,默認值爲20 withWeight:是否一併返回關鍵詞權重值,默認值爲 False allowPOS:僅包括指定詞性的詞,默認值爲空 """ print(x) """ ('寵物', 0.42209719717412125) ('地靈', 0.31035309971636366) ('地獄', 0.29652634405236367) ('怨靈', 0.2898125455248485) ('灼熱', 0.16584643925200002) ('交給', 0.1567760269529697) ('管理', 0.14164445757030303) ('異變', 0.13837298184484847) ('間歇泉', 0.13345825326181818) ('她們', 0.11076269718599999) ('交由', 0.10921610331818181) ('人類', 0.10237571981272728) ('心中', 0.09523635988763636) ('遺蹟', 0.09067494210703031) ('想法', 0.08044421223127274) ('充滿', 0.07707872184351516) ('由於', 0.07360687520381819) ('靈們', 0.07245313638121212) ('讀心', 0.07245313638121212) ('鴉等', 0.07245313638121212) """
import jieba import jieba.analyse sentence = """ 地靈殿的主人。 雖然地底都市已經被排除在地獄以外,但那些曾經是地獄設施的遺蹟裏 依然還殘留着無數充滿怨念的靈們,於是必須有人對他們進行管理。 在灼熱地獄遺址上創建起了地靈殿,她就在那裏居住了下來。 由於她可以讀取他人心中的想法,不論是任何妖怪,怨靈都爲之感到恐懼, 不知從什麼時候起幾乎沒有人再來地靈殿造訪了。 可是,相反由於能讀心而受到那些不會說話的動物們的喜好,地靈殿逐漸 變成了充滿火焰貓,地獄鴉等寵物們的房屋。 由於寵物的增多結果致使灼熱地獄遺蹟沒法完美的管理,最後只得把不少 管理事項交由寵物們去作。 把寵物的管理交給寵物去作。 把庭院的修繕交給寵物去作。 把陪妹妹玩的工做交給寵物去作,如此。 可是,忽然出現不該該出現的地上的人類,在據說怨靈和間歇泉異變 以後她大吃一驚。 怨靈的管理她交由阿燐去作,灼熱地獄的火力調節則交給了阿空。 她們應該都是忠心於覺不會作什麼壞事纔對。她相信決不會發生 什麼異變纔對。 搞很差,也許是眼前這我的類撒謊有什麼別的企圖,她這麼想着。 讀了那人類心中的想法以後,她又吃了一驚。 她們的心中,幾乎沒有任何關於怨靈和間歇泉的情報。 覺詫異了,她決定先試探一下她們。 """ for x in jieba.analyse.textrank(sentence, withWeight=True): """ 接收參數以下,和extract_tags參數一致,但allowPOS默認值不會空: sentence:句子 topK:返回幾個 TF/IDF 權重最大的關鍵詞,默認值爲20 withWeight:是否一併返回關鍵詞權重值,默認值爲 False allowPOS:僅包括指定詞性的詞,默認值不爲空 """ print(x) """ ('寵物', 1.0) ('地獄', 0.8169410022497963) ('管理', 0.7111631257164159) ('怨靈', 0.6872520018950034) ('交給', 0.5766849288790858) ('不會', 0.5671709845112852) ('地靈', 0.5418423145115177) ('人類', 0.4235967140492308) ('怨念', 0.40976053284203795) ('遺蹟', 0.3890312542892664) ('出現', 0.38728082208337444) ('異變', 0.3678994864195963) ('間歇泉', 0.3523723288507097) ('致使', 0.3217237709168045) ('讀心', 0.3193653873378865) ('受到', 0.29192544019397326) ('據說', 0.2910761395893028) ('說話', 0.28670968889003423) ('動物', 0.28639826197065527) ('試探', 0.2805685960379144) """
jieba.cut只是分詞,其實jieba.posseg.cut在分詞的時候還能給出詞性
it
import jieba.posseg sentence = "古明地覺是一個可愛的女孩子" # 這裏的tag表示單詞的詞性,nr表示人名 jieba.add_word("古明地覺", tag="nr") for k, v in jieba.posseg.lcut(sentence): print(k, v) """ 古明地覺 nr 是 v 一個 m 可愛 v 的 uj 女孩子 n """ # n: 名詞 ns: 地名 vn: 名動詞 v: 動詞 nr: 人名,不在這裏面的會被過濾掉
在分詞的時候,除了返回分好的,還能夠返回詞語的開始位置和結束位置
ast
import jieba sentence = "古明地覺是一個可愛的女孩子" for k, start, last in jieba.tokenize(sentence): print(k, start, last, sentence[start: last]) """ 古明 0 2 古明 地覺 2 4 地覺 是 4 5 是 一個 5 7 一個 可愛 7 9 可愛 的 9 10 的 女孩子 10 13 女孩子 """