最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python寫程序統(tǒng)計詞頻的方法

 更新時間:2019年07月29日 11:36:20   作者:劉娟娟🍀PRESS.ONElv-1  
這篇文章主要介紹了python寫程序統(tǒng)計詞頻的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

在李笑來所著《時間當(dāng)作朋友》中有這么一段:

可問題在于,當(dāng)年我在少年宮學(xué)習(xí)計算機(jī)程序語言的時候,怎么可能想象得到,在20多年后的某一天,我需要先用軟件調(diào)取語料庫中的數(shù)據(jù),然后用統(tǒng)計方法為每個單詞標(biāo)注詞頻,再寫一個批處理程序從相應(yīng)的字典里復(fù)制出多達(dá)20MB的內(nèi)容,重新整理……

在新書《自學(xué)是門手藝》中,他再次提及:

又過了好幾年,我去新東方教書。2003 年,在寫詞匯書的過程中,需要統(tǒng)計詞頻,C++ 倒是用不上,用之前學(xué)過它的經(jīng)驗,學(xué)了一點 Python,寫程序統(tǒng)計詞頻 ——《TOEFL 核心詞匯 21 天突破》到今天還在銷售。一個當(dāng)年 10 塊錢學(xué)費開始學(xué)的技能,就因為這本書,這些年給我 “變現(xiàn)” 了很多錢。

正在通過xue.cn 自學(xué) python 的我順手在 trello 中給自己添加一張卡片: 要不用 python 寫個統(tǒng)計詞頻的腳本玩玩? 這是前不久的事兒了。

今日周末,我翻出這張卡片,打算實踐看看。下文是我寫詞頻統(tǒng)計腳本時的一些思考與實踐成果。

2、如何把難題拆解為小CASE?

從需求來看,“統(tǒng)計詞頻的腳本”是一個泛泛的需求?!也⒉皇窍胍y(tǒng)計特定內(nèi)容的詞頻,我希望生成的腳本可以處理各式內(nèi)容。這對腳本的最終交付成果提出了高要求。

如果請你用 python 寫個統(tǒng)計詞頻的腳本,你會如何寫呢?當(dāng)我正襟危坐,正視這道題目時,第一秒鐘感知到了為難與膽怯。有個小人兒在腦袋里說:“好難,我做不到吧?”

面對新事物、新挑戰(zhàn),人們善于用想象力把困難放的很大。而我已經(jīng)有了多次迎難而上的經(jīng)驗,于是我喝了一口苦咖啡,問自己:

從哪兒下手呢?不如進(jìn)一步拆解來看看吧。

需求拆解如下:

“統(tǒng)計詞頻的腳本”,可以拆分為2個部分,a) 有哪些詞?b) 統(tǒng)計這些詞出現(xiàn)的次數(shù)。 b是簡單的。 a分為2種情況:i) 給定詞庫;ii) 自己從內(nèi)容中找詞。 i是簡單的,ii則可能復(fù)雜。

此時你可能問,你是如何判斷簡單還是復(fù)雜?簡單吖,根據(jù)自己的編程能力與經(jīng)驗,預(yù)判自己能否寫出代碼。

需求經(jīng)過拆解后,當(dāng)前的重點聚焦于:

如何從內(nèi)容中抓取詞?

其中,內(nèi)容是一個寬泛的概念。在程序中,它可能是:string 常量,文件,網(wǎng)頁,api 返回的數(shù)據(jù)如此等等。關(guān)鍵是什么呢?關(guān)鍵是腳本的一線代碼們處理的是 string,列表或字典。其余的文件、網(wǎng)頁、api 返回數(shù)據(jù)等,無非是數(shù)據(jù)的載體更為復(fù)雜,我已經(jīng)掌握了把從它們那里獲取數(shù)據(jù),生成 string、列表或字典的能力。而這個能力你也能很簡單獲得,即通過“python 如何讀取文件數(shù)據(jù)”之類句式,從搜索引擎中找到答案。

一篇文章可以直接定義或讀取為一個 string 常量。而 for i in stringcontent 句式能夠幫我們遍歷 string 統(tǒng)計單個字的詞頻。然后雙字詞、三字詞、N字詞等等,都可以由單字詞拼接而成。

難點既然這么快想清楚,那么寫代碼實現(xiàn)吧!

3、從上帝視角調(diào)控成長體驗

第一個版本代碼如下圖所示,還是非常簡便的。我在同個目錄下,另起一個 poem.py 文件用來把內(nèi)容定義為常量,供該腳本調(diào)用。

首次測試的string 常量 poem 是一首中文小詩,從常理來說,中文詞匯包括漢字1、2、3、4個,超過 4 個的雖有但很少。順著上面的思路,我繼續(xù)把 3字詞、4字詞的代碼也寫出來了。運算結(jié)果正常。

我想試試復(fù)雜的。比如讀取pdf文件。這涉及到一個我尚未掌握的新知識點:python如何讀取pdf文件?獲取答案也很容易,搜索然后嘗試。

如果把“統(tǒng)計詞頻的python腳本”當(dāng)作主線任務(wù),那么“python如何讀取pdf文件”就是分支任務(wù)啦。在這個分支任務(wù)上我立即遇到困難:使用 anaconda powshell prompt 安裝第三方庫時, pip install pdfminer 命令行執(zhí)行了小段就報錯。

此時要么在支線任務(wù)中深究下去,要么回歸主線任務(wù)。我選擇回歸主線任務(wù),但順手在 trello 上給自己建卡“python如何讀取pdf文件”等以后專門來研究它。

現(xiàn)在,我繼續(xù)專注于詞頻腳本。

除了內(nèi)容載體的復(fù)雜,還可以有內(nèi)容量的冗長。我拷貝了一篇幾千字的中文文章,定義為 string 常量,然后用剛才調(diào)試通過的腳本統(tǒng)計詞頻。

在處理數(shù)百字的小詩時,腳本運行迅速,結(jié)果幾乎立即被終端打印出來。而處理這篇長文時,終端打印完單字詞、雙字詞的統(tǒng)計結(jié)果后,就一直沒有輸出,好似“卡”在那里。于是我強(qiáng)制結(jié)束腳本,在代碼中添加了幾條打印來檢查程序是否正常運行中。由此發(fā)現(xiàn)了一個“性能”上的問題:電腦或編輯器,都沒有卡住,程序運算持續(xù)在進(jìn)行中,只是沒有運算完成。

這篇長文,單字詞幾百條;按照我的上述代碼邏輯,雙字詞運算 幾百*幾百 次,三字詞運算 幾百*幾百 *幾百 次,四字詞運算 幾百*幾百 *幾百 次。演算一下,具體是多少呢?

4字詞運算次數(shù):467758877041 次

四千六百多億次!難怪遲遲沒有結(jié)果輸出!看來代碼本身需要被修改優(yōu)化,以降低計算量。第二個版本除了修改算法外,也調(diào)整了代碼結(jié)構(gòu),使之更易于調(diào)試和增刪。

在這個版本中,詞頻統(tǒng)計僅可用于中文,處理幾千字的文章,大概需要1分鐘左右。此時,一個下午已經(jīng)過去了。再次久坐忘動的我,決定暫停休息一下,扭扭脖子甩甩胳膊。而且,很重要的一件事是, 把實踐過程中的思考與第二個版本的腳本做一個階段交付 。

不得不提的是, 寫文章是一個提升階段交付成就感的小策略 。這也是此文的由來。當(dāng)然啦,我還要順手在 trello 上給自己添加2張新卡片,等有精力時繼續(xù)實踐:

python如何統(tǒng)計英文文章詞頻? python統(tǒng)計中文詞頻的腳本處理十幾萬字的書籍時,性能如何?

在群里談及我在寫的詞頻腳本時,有位網(wǎng)友提出一個觀點,“不是程序員,學(xué)編程沒用”。我想,他肯定是沒有讀過李笑來的書,或者干脆讀過,只是讀成了另外一個版本吧!

如果你也在學(xué)習(xí) python 或想要提高自學(xué)能力,歡迎來xue.cn 聊天室找我 @liujuanjuan1984 ~

def write_rlt(content,dic1,dic2):
  rlt = {}#有該結(jié)果但并沒有用上
  rlts = {}
  for i in dic1.keys():
    for j in dic2.keys():
      cix = i + j
      if cix in content:
        num = content.count(cix)
        if cix not in rlt.keys():
          rlt[cix]=num
          if num > 1:
            rlts[cix]=num
  return rlts

def cipin_1(content):
  rlt1 = {}
  rlt1s = {}
  for ci in content:
    #r"[^\u4e00-\u9fa5^a-z^A-Z^0-9]"
    atext ="""
    \ \\\\n ,.,。/一()()<>《》
    """
    if ci not in atext:
      num = content.count(ci)
      if ci not in rlt1.keys():
        rlt1[ci]=num
        if num > 1:
          rlt1s[ci]=num
  return rlt1s

def merge_dic(dic1,dic2):
  rlt = dic1.copy()
  rlt.update(dic2)
  return rlt

def cipin_x(content,dic1,dic2):
  rltsx = write_rlt(content,dic1,dic2)
  rltsy = write_rlt(content,dic2,dic1)
  rlts = merge_dic(rltsx,rltsy)
  return rlts

def sorted_dic(dic1,txt=None):
  rlt = sorted(dic1.items(),key=lambda x:x[1],reverse=True)
  print("\n--------------------\n")
  if txt==None:
    atxt = "結(jié)果共" 
  else:
    atxt = txt + "字詞共"
  print(atxt,len(rlt),"條,具體為:\n",rlt)
  return rlt


def main():
  from txt import zixue_x as content #加載想要統(tǒng)計的內(nèi)容,string type
  import datetime

  print("---begin---",datetime.datetime.now())

  rlt1s = cipin_1(content)
  rlt2s = cipin_x(content,rlt1s,rlt1s)
  rlt3s = cipin_x(content,rlt1s,rlt2s)
  rlt4s = cipin_x(content,rlt1s,rlt3s)
  rlt5s = cipin_x(content,rlt1s,rlt4s)
  rlt6s = cipin_x(content,rlt1s,rlt5s)
  rlt7s = cipin_x(content,rlt1s,rlt6s)

  sorted_dic(rlt1s,"單")
  sorted_dic(rlt2s,"雙")
  sorted_dic(rlt3s,"3")
  sorted_dic(rlt4s,"4")
  sorted_dic(rlt5s,"5")
  sorted_dic(rlt6s,"6")
  sorted_dic(rlt7s,"7")

  print("---end---",datetime.datetime.now())

if __name__ == "__main__":
  main()

這篇文章的 PRESS.one 簽名: press.one/file/v?s=33…

總結(jié)

以上所述是小編給大家介紹的python寫程序統(tǒng)計詞頻的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Python繪圖并標(biāo)記出指定點(最大值點)方法實例

    Python繪圖并標(biāo)記出指定點(最大值點)方法實例

    我們在用python畫散點圖的時候經(jīng)常會需要標(biāo)記出特定的點,這篇文章主要給大家介紹了關(guān)于Python繪圖并標(biāo)記出指定點(最大值點)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • python 安裝virtualenv和virtualenvwrapper的方法

    python 安裝virtualenv和virtualenvwrapper的方法

    下面小編就為大家?guī)硪黄猵ython 安裝virtualenv和virtualenvwrapper的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 關(guān)于Streamlit性能優(yōu)化:緩存與狀態(tài)管理實戰(zhàn)

    關(guān)于Streamlit性能優(yōu)化:緩存與狀態(tài)管理實戰(zhàn)

    這篇文章主要介紹了關(guān)于Streamlit性能優(yōu)化:緩存與狀態(tài)管理實戰(zhàn),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • pytorch中nn.RNN()匯總

    pytorch中nn.RNN()匯總

    這篇文章主要介紹了pytorch中nn.RNN()知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • Python訪問Redis的詳細(xì)操作

    Python訪問Redis的詳細(xì)操作

    redis 提供兩個類 Redis 和 StrictRedis, StrictRedis 用于實現(xiàn)大部分官方的命令,Redis 是 StrictRedis 的子類,用于向后兼用舊版本,接下來通過本文給大家分享Python訪問Redis的詳細(xì)操作,需要的朋友參考下吧
    2021-06-06
  • python之class類和方法的用法詳解

    python之class類和方法的用法詳解

    這篇文章主要介紹了python中class類和方法的用法詳解,如果有不太清楚面向?qū)ο蟮念惡头椒ǖ木幊趟枷氲男』锇榭梢越梃b參考本文
    2023-03-03
  • flask服務(wù)端響應(yīng)與重定向處理的實現(xiàn)

    flask服務(wù)端響應(yīng)與重定向處理的實現(xiàn)

    本文主要介紹了flask服務(wù)端響應(yīng)與重定向處理的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Python利用pynimate實現(xiàn)制作動態(tài)排序圖

    Python利用pynimate實現(xiàn)制作動態(tài)排序圖

    這篇文章主要為大家詳細(xì)介紹了Python如何利用pynimate實現(xiàn)制作動態(tài)排序圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • Python批處理更改文件名os.rename的方法

    Python批處理更改文件名os.rename的方法

    今天小編就為大家分享一篇Python批處理更改文件名os.rename的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 使用python中的openpyxl操作excel詳解

    使用python中的openpyxl操作excel詳解

    這篇文章主要介紹了使用python中的openpyxl操作excel詳解,openpyxl 模塊是一個讀寫Excel文檔的Python庫,本文就來講解如何使用openpyxl操作excel,需要的朋友可以參考下
    2023-07-07

最新評論

白玉县| 顺义区| 阜平县| 芜湖市| 乾安县| 大名县| 长宁区| 灵丘县| 宁阳县| 成都市| 金沙县| 甘泉县| 怀来县| 台北市| 新河县| 焉耆| 普格县| 金昌市| 紫金县| 綦江县| 鹤山市| 宜兰县| 万载县| 芜湖县| 丁青县| 建德市| 翁牛特旗| 军事| 扶风县| 北票市| 嘉峪关市| 石渠县| 四子王旗| 大竹县| 永定县| 常熟市| 阿勒泰市| 宜良县| 临泉县| 通化市| 定南县|