摘要:利用我們集成的目前世界上規(guī)模最大的人工分詞和詞性標(biāo)注中文語料庫約含萬字訓(xùn)練而成,模型標(biāo)注能力強(qiáng)大。據(jù)說是最好的中文分詞組件,支持等多種語言。
總是看到別人用Python搞各種統(tǒng)計(jì),前端菜鳥的我也來嘗試了一把。有各種語義分析庫在,一切好像并不是很復(fù)雜。不過Python剛開始看,估計(jì)代碼有點(diǎn)丑。
一、兩種中文分詞開發(fā)包thulac (http://thulac.thunlp.org/)THULAC(THU Lexical Analyzer for Chinese)由清華大學(xué)自然語言處理與社會(huì)人文計(jì)算實(shí)驗(yàn)室研制推出的一套中文詞法分析工具包,具有中文分詞和詞性標(biāo)注功能。THULAC具有如下幾個(gè)特點(diǎn):
能力強(qiáng)。利用我們集成的目前世界上規(guī)模最大的人工分詞和詞性標(biāo)注中文語料庫(約含5800萬字)訓(xùn)練而成,模型標(biāo)注能力強(qiáng)大。
準(zhǔn)確率高。該工具包在標(biāo)準(zhǔn)數(shù)據(jù)集Chinese Treebank(CTB5)上分詞的F1值可達(dá)97.3%,詞性標(biāo)注的F1值可達(dá)到92.9%,與該數(shù)據(jù)集上最好方法效果相當(dāng)。
速度較快。同時(shí)進(jìn)行分詞和詞性標(biāo)注速度為300KB/s,每秒可處理約15萬字。只進(jìn)行分詞速度可達(dá)到1.3MB/s。
jieba (https://github.com/fxsjy/jieba)
據(jù)說是最好的中文分詞組件,支持Python、C++、Java、node.js、PHP等多種語言。
支持三種分詞模式()
精確模式,試圖將句子最精確地切開,適合文本分析;
全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非???,但是不能解決歧義;
搜索引擎模式,在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。
支持繁體分詞
支持自定義詞典
MIT 授權(quán)協(xié)議
二、語義分詞 2.1 簡(jiǎn)單文本分詞兩種分詞組件的使用都比較簡(jiǎn)單,以 jieba 為例:
# -*- coding: utf-8 -*- import jieba # 精確模式 seg_list = jieba.cut("我來到北京清華大學(xué)", cut_all=False) print "Default Mode: " + "/ ".join(seg_list) #輸出結(jié)果: #Default Mode: 我/ 來到/ 北京/ 清華大學(xué)2.2 對(duì)文件內(nèi)容進(jìn)行分詞
對(duì)文件內(nèi)容進(jìn)行分詞其實(shí)本質(zhì)上和對(duì)字符串的分詞一樣,只不過多了個(gè)文件讀寫的過程。
這里寫了兩個(gè)讀寫文件的函數(shù),之所以使用codecs來讀取,主要是為了解決Python2.7 文件讀寫過程中Unicode編碼問題
# -*- coding: utf-8 -*- import codecs # @see 讀取文件內(nèi)容 def readFile(filename): content = "" try: fo = codecs.open(filename,"r", "utf-8") print "讀取文件名:", filename for line in fo.readlines(): content += line.strip() print "字?jǐn)?shù):", len(content) except IOError as e: print "文件不存在或者文件讀取失敗" return "" else: fo.close() return content # @see 寫入文件內(nèi)容(數(shù)組會(huì)使用writelines進(jìn)行寫入)codec.open實(shí)現(xiàn) # @param toFile 文件名 # content 內(nèi)容 def writeFile(toFile, content): try: fo = codecs.open(toFile, "wb", "utf-8") print "文件名:", toFile if type(content) == type([]): fo.writelines(content) else: fo.write(content) except IOError: print "沒有找到文件或文件讀取失敗" else: print "文件寫入成功" fo.close()
將文件讀寫和分詞結(jié)合起來
# 讀取源文件(sourceFile)內(nèi)容 rawContent = readFile(sourceFile) # 結(jié)巴分詞 seg_list = jieba.cut(rawContent, cut_all=False) # 把分詞結(jié)果寫到目標(biāo)文件(targetFile)中,這里是用空格分割,也可以改成其他符號(hào) writeFile(targetFile, " ".join(seg_list))三、對(duì)分詞結(jié)果進(jìn)行統(tǒng)計(jì)和排序
簡(jiǎn)單說一下思路,讀取分詞結(jié)果的txt文件,然后用空格分割成詞語數(shù)組,遍歷數(shù)組,分別統(tǒng)計(jì)詞語的出現(xiàn)次數(shù)。最后對(duì)所有的單詞根據(jù)頻次進(jìn)行排序。
3.1 統(tǒng)計(jì)分詞# 詞語數(shù)組 wordList= [] # 用于統(tǒng)計(jì)詞頻 wordCount= {} # 從分詞后的源文件中讀取數(shù)據(jù) sourceData = readFile(sourceFile) # 利用空格分割成數(shù)組 wordList = sourceData.split(" ") # 遍歷數(shù)組進(jìn)行詞頻統(tǒng)計(jì),這里使用wordCount 對(duì)象,出發(fā)點(diǎn)是對(duì)象下標(biāo)方便查詢 for item in wordList: if item not in wordCount: wordCount[item] = 1 else: wordCount[item] += 1 # 循環(huán)結(jié)束,wordCount 對(duì)象將保存所有的詞語和詞頻3.2 根據(jù)詞頻排序
Python 數(shù)組中自帶sort() 函數(shù),為了方便比較,我們定義了一個(gè)對(duì)象,并標(biāo)明了比較方法
# 定義wordItem 類 class wordItem: label = "" times = 0 # 構(gòu)造函數(shù) def __init__(self, l, t): self.label = l self.times = t # 用于比較 def __lt__(self, other): return self.times < other.times # 定義wordItem 數(shù)組用于排序 wordItemArray= [] # 構(gòu)造對(duì)象數(shù)組 for key in wordCount: wordItemArray.append(wordItem(key, wordCount[key])) # 按詞頻由高到低倒序排列 wordItemArray.sort(reverse = True) # 寫入目標(biāo)文件 target wf = codecs.open(targetFile,"w", "utf-8") for item in wordItemArray: wf.write(item.label+" "+str(item.times) + " ")四、使用命令行
使用命令行需要引入import sys,通過sys.argv[n]可以獲得輸入的命令行參數(shù),注意第一個(gè)是腳本名。
import sys # 我們調(diào)用時(shí)會(huì) python index.py "source.txt" "target.txt" # 注意這里argv 是腳本名 # print "name: ", sys.argv[0] # 腳本名 如:index.py sourceFile = sys.argv[1] targetFile = sys.argv[2]五、完整代碼
參見 github node-popcorn,項(xiàng)目中加入了一些puppeteer無頭瀏覽器爬蟲抓取網(wǎng)頁內(nèi)容的代碼。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40972.html
摘要:分詞的算法中文分詞有難度,不過也有成熟的解決方案。例如通過人民日?qǐng)?bào)訓(xùn)練的分詞系統(tǒng),在網(wǎng)絡(luò)玄幻小說上,分詞的效果就不會(huì)好。三的優(yōu)點(diǎn)是開源的,號(hào)稱是中,最好的中文分詞組件。 showImg(https://segmentfault.com/img/remote/1460000016359704?w=1350&h=900); 題圖:by Lucas Davies 一、前言 分詞,我想是大多數(shù)...
摘要:據(jù)小編簡(jiǎn)單了解,已知對(duì)工作報(bào)告高頻詞匯進(jìn)行梳理的媒體包括法制日?qǐng)?bào)和新華網(wǎng)。高頻詞詞頻年以來政府工作報(bào)告中的提及總數(shù)發(fā)展經(jīng)濟(jì)改革建設(shè)社會(huì)推進(jìn)創(chuàng)新政策企業(yè)加強(qiáng)下面是新華網(wǎng)數(shù)據(jù)新聞部統(tǒng)計(jì)的高頻詞匯。 本文首發(fā)于微信公眾號(hào)號(hào)編程派。微信搜索編程派,獲取更多Python編程一手教程及優(yōu)質(zhì)資源吧。 上周六,總理在大會(huì)堂作政府工作報(bào)告,全球媒體矚目。每年都會(huì)有媒體對(duì)報(bào)告中的高頻詞匯進(jìn)行梳理,我們也可...
摘要:準(zhǔn)備工作抓取數(shù)據(jù)存到文檔中,了解問題分詞分的不太準(zhǔn)確,比如機(jī)器學(xué)習(xí)會(huì)被切成機(jī)器和學(xué)習(xí)兩個(gè)詞,使用自定義詞典,原本的想法是只切出自定義詞典里的詞,但實(shí)際上不行,所以首先根據(jù)分詞結(jié)果提取出高頻詞并自行添加部分詞作為詞典,切詞完畢只統(tǒng)計(jì)自定義詞典 準(zhǔn)備工作 抓取數(shù)據(jù)存到txt文檔中,了解jieba 問題 jieba分詞分的不太準(zhǔn)確,比如機(jī)器學(xué)習(xí)會(huì)被切成機(jī)器和學(xué)習(xí)兩個(gè)詞,使用自定義詞典,原本...
摘要:是你學(xué)習(xí)從入門到專家必備的學(xué)習(xí)路線和優(yōu)質(zhì)學(xué)習(xí)資源。的數(shù)學(xué)基礎(chǔ)最主要是高等數(shù)學(xué)線性代數(shù)概率論與數(shù)理統(tǒng)計(jì)三門課程,這三門課程是本科必修的。其作為機(jī)器學(xué)習(xí)的入門和進(jìn)階資料非常適合。書籍介紹深度學(xué)習(xí)通常又被稱為花書,深度學(xué)習(xí)領(lǐng)域最經(jīng)典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導(dǎo)讀】本文由知名開源平...
閱讀 3639·2023-04-26 02:24
閱讀 972·2023-04-25 14:47
閱讀 2571·2021-11-24 11:16
閱讀 1762·2021-11-24 09:38
閱讀 1607·2021-11-18 10:07
閱讀 2097·2021-09-22 15:49
閱讀 1622·2019-08-30 15:55
閱讀 916·2019-08-26 13:38