成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python 實(shí)現(xiàn)中文分詞統(tǒng)計(jì)

Honwhy / 1848人閱讀

摘要:利用我們集成的目前世界上規(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

相關(guān)文章

  • 分詞,難在哪里?科普+解決方案!

    摘要:分詞的算法中文分詞有難度,不過也有成熟的解決方案。例如通過人民日?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ù)...

    Steven 評(píng)論0 收藏0
  • Python文本分析:2016年政府工作報(bào)告有哪些高頻詞?

    摘要:據(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)行梳理,我們也可...

    CntChen 評(píng)論0 收藏0
  • python使用jieba進(jìn)行中文分詞wordcloud制作詞云

    摘要:準(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è)詞,使用自定義詞典,原本...

    yvonne 評(píng)論0 收藏0
  • 重磅 | 完備的 AI 學(xué)習(xí)路線,最詳細(xì)的資源整理!

    摘要:是你學(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)讀】本文由知名開源平...

    荊兆峰 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<