<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
jieba 是目前表現較為不錯的 Python 中文分詞元件,它主要有以下特性:
支援四種分詞模式:
支援繁體分詞
支援自定義詞典
MIT 授權協定
pip3 install jieba
import jieba
lcut 將返回的物件轉化為list物件返回
傳入引數解析:
def cut(self, sentence, cut_all=False, HMM=True, use_paddle=False): # sentence: 需要分詞的字串; # cut_all: 引數用來控制是否採用全模式; # HMM: 引數用來控制是否使用 HMM 模型; # use_paddle: 引數用來控制是否使用paddle模式下的分詞模式,paddle模式採用延遲載入方式,通過enable_paddle介面安裝paddlepaddle-tiny
試圖將句子最精確地切開,適合文字分析
seg_list = jieba.cut("我來到北京清華大學", cut_all=False) print("精準模式: " + "/ ".join(seg_list)) # 精確模式 # -----output----- 精準模式: 我/ 來到/ 北京/ 清華大學
把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
seg_list = jieba.cut("我來到北京清華大學", cut_all=True) print("全模式: " + "/ ".join(seg_list)) # 全模式 # -----output----- 全模式: 我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學
利用PaddlePaddle深度學習框架,訓練序列標註(雙向GRU)網路模型實現分詞。同時支援詞性標註。
paddle模式使用需安裝paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1。
目前paddle模式支援jieba v0.40及以上版本。
jieba v0.40以下版本,請升級jieba,pip installjieba --upgrade。 PaddlePaddle官網
import jieba # 通過enable_paddle介面安裝paddlepaddle-tiny,並且import相關程式碼; jieba.enable_paddle() # 初次使用可以自動安裝並匯入程式碼 seg_list = jieba.cut(str, use_paddle=True) print('Paddle模式: ' + '/'.join(list(seg_list))) # -----output----- Paddle enabled successfully...... Paddle模式: 我/來到/北京清華大學
在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞
seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造") # 搜尋引擎模式 print(", ".join(seg_list)) # -----output----- 小明, 碩士, 畢業, 於, 中國, 科學, 學院, 科學院, 中國科學院, 計算, 計算所, ,, 後, 在, 日本, 京都, 大學, 日本京都大學, 深造
新建自定義分詞器,可用於同時使用不同詞典。jieba.dt 為預設分詞器,所有全域性分詞相關函數都是該分詞器的對映。
import jieba test_sent = "永和服裝飾品有限公司" result = jieba.tokenize(test_sent) ##Tokenize:返回詞語在原文的起始位置 print(result) for tk in result: # print ("word %stt start: %d tt end:%d" % (tk[0],tk[1],tk[2]) ) print (tk) # -----output----- <generator object Tokenizer.tokenize at 0x7f6b68a69d58> ('永和', 0, 2) ('服裝', 2, 4) ('飾品', 4, 6) ('有限公司', 6, 10)
開發者可以指定自己自定義的詞典,以便包含 jieba 詞庫裡沒有的詞。雖然 jieba有新詞識別能力,但是自行新增新詞可以保證更高的正確率。
jieba.load_userdict(dict_path) # dict_path為檔案類物件或自定義詞典的路徑。
一個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。
創新辦 3 i 雲端計算 5 凱特琳 nz 中信建投 投資公司
import jieba test_sent = "中信建投投資公司投資了一款遊戲,中信也投資了一個遊戲公司" jieba.load_userdict("userdict.txt") words = jieba.cut(test_sent) print(list(words)) #-----output------ ['中信建投', '投資公司', '投資', '了', '一款', '遊戲', ',', '中信', '也', '投資', '了', '一個', '遊戲', '公司']
import jieba # 定義範例句子 test_sent = "中信建投投資公司投資了一款遊戲,中信也投資了一個遊戲公司" #新增詞 jieba.add_word('中信建投') jieba.add_word('投資公司') # 刪除詞 jieba.del_word('中信建投') words = jieba.cut(test_sent) print(list(words)) #-----output------ ['中信', '建投', '投資公司', '投資', '了', '一款', '遊戲', ',', '中信', '也', '投資', '了', '一個', '遊戲', '公司']
import jieba.analyse
import jieba import jieba.analyse #讀取檔案,返回一個字串,使用utf-8編碼方式讀取,該檔案位於此python同以及目錄下 content = open('data.txt','r',encoding='utf-8').read() tags = jieba.analyse.extract_tags(content,topK=10,withWeight=True,allowPOS=("nr")) print(tags) # ----output------- [('虛竹', 0.20382572423643955), ('丐幫', 0.07839419568792882), ('什麼', 0.07287469641815765), ('自己', 0.05838617200768695), ('師父', 0.05459680087740782), ('內力', 0.05353758008018405), ('大理', 0.04885277765801372), ('咱們', 0.04458784837687502), ('星宿', 0.04412126568280158), ('少林', 0.04207588649463058)]
用法:jieba.analyse.set_idf_path(file_name) # file_name為自定義語料庫的路徑
自定義語料庫範例:
勞動防護 13.900677652 勞動防護 13.900677652 生化學 13.900677652 生化學 13.900677652 奧薩貝爾 13.900677652 奧薩貝爾 13.900677652 考察隊員 13.900677652 考察隊員 13.900677652 崗上 11.5027823792 崗上 11.5027823792 倒車檔 12.2912397395 倒車檔 12.2912397395 編譯 9.21854642485 編譯 9.21854642485 蝶泳 11.1926274509 外委 11.8212361103
import jieba import jieba.analyse #讀取檔案,返回一個字串,使用utf-8編碼方式讀取,該檔案位於此python同以及目錄下 content = open(u'data.txt','r',encoding='utf-8').read() jieba.analyse.set_stop_words("stopwords.txt") tags = jieba.analyse.extract_tags(content, topK=10) print(",".join(tags))
import jieba import jieba.analyse #讀取檔案,返回一個字串,使用utf-8編碼方式讀取,該檔案位於此python同以及目錄下 content = open(u'data.txt','r',encoding='utf-8').read() jieba.analyse.set_stop_words("stopwords.txt") tags = jieba.analyse.extract_tags(content, topK=10,withWeight=True) print(tags)
import jieba.posseg as pseg words = pseg.cut("我愛北京天安門") for word, flag in words: print('%s %s' % (word, flag)) # ----output-------- 我 r 愛 v 北京 ns 天安門 ns
詞性對照表
將目標文字按行分隔後,把各行文字分配到多個 Python 程序並行分詞,然後歸併結果,從而獲得分詞速度的可觀提升。用法:
可參考 test_file.py
注意:基於 python 自帶的 multiprocessing 模組,目前暫不支援 Windows
注意,輸入引數只接受 unicode
import jieba import jieba.analyse result = jieba.tokenize(u'永和服裝飾品有限公司') for tk in result: print("word %stt start: %d tt end:%d" % (tk[0],tk[1],tk[2])) # ----output------- word 永和 start: 0 end:2 word 服裝 start: 2 end:4 word 飾品 start: 4 end:6 word 有限公司 start: 6 end:10
import jieba import jieba.analyse result = jieba.tokenize(u'永和服裝飾品有限公司', mode='search') for tk in result: print("word %stt start: %d tt end:%d" % (tk[0],tk[1],tk[2])) # ----output------- 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
使用 jieba 和 whoosh 可以實現搜尋引擎功能。
whoosh 是由python實現的一款全文搜尋工具包,可以使用 pip 安裝它:
pip install whoosh
介紹 jieba + whoosh 實現搜尋之前,你可以先看下文 whoosh 的簡單介紹。
下面看一個簡單的搜尋引擎的例子:
import os import shutil from whoosh.fields import * from whoosh.index import create_in from whoosh.qparser import QueryParser from jieba.analyse import ChineseAnalyzer analyzer = ChineseAnalyzer() schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT(stored=True, analyzer=analyzer)) if not os.path.exists("test"): os.mkdir("test") else: # 遞迴刪除目錄 shutil.rmtree("test") os.mkdir("test") idx = create_in("test", schema) writer = idx.writer() writer.add_document( title=u"document1", path="/tmp1", content=u"Tracy McGrady is a famous basketball player, the elegant basketball style of him attract me") writer.add_document( title=u"document2", path="/tmp2", content=u"Kobe Bryant is a famous basketball player too , the tenacious spirit of him also attract me") writer.add_document( title=u"document3", path="/tmp3", content=u"LeBron James is the player i do not like") writer.commit() searcher = idx.searcher() parser = QueryParser("content", schema=idx.schema) for keyword in ("basketball", "elegant"): print("searched keyword ",keyword) query= parser.parse(keyword) print(query,'------') results = searcher.search(query) for hit in results: print(hit.highlights("content")) print("="*50)
ieba 採用延遲載入,import jieba 和 jieba.Tokenizer() 不會立即觸發詞典的載入,一旦有必要才開始載入詞典構建字首字典。如果你想手工初始 jieba,也可以手動初始化。
import jieba jieba.initialize() # 手動初始化(可選)
上面程式碼中,使用 add_document() 把一個檔案新增到了 index 中。在這些檔案中,搜尋含有 “basketball”和 “elegant” 的檔案。
1,佔用記憶體較小的詞典檔案 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small
2,支援繁體分詞更好的詞典檔案 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big
下載你所需要的詞典,然後覆蓋 jieba/dict.txt 即可;或者用
jieba.set_dictionary('data/dict.txt.big')
更多關於Python中文分詞的文章請檢視下面的相關連結
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45