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