統計史記的字數


好久沒有讀書了,突然想讀一讀歷史來提高一下自己的逼格。然后就到網上下載了《史記》原文全文。

因為不知道是不是全集的,所以突發奇想,想統計一下總的文字數量,看看是不是基本齊全。OK ,說干就干,能使用的語言很多,C# ,PHP ,JAVA ,C++ ,PYTHON, VB , 都可以。用哪一種呢?python 剛接觸,挺新鮮,就你了。沒想到,一下子就掉坑里了(如果上天再給我一次選擇的機會,我一定選擇Java,沒想到python 2.7 處理中文真費勁)。 決定用python 了,先選個版本吧,電腦上裝了3.5 和 2.7 ,用哪一個呢? 實話說,3.5 就用了一次,爬蟲需要。平時用的多的還是2.7 ,經常拿來做一些小的科學計算。那就用 2.7 吧(就這么一步步掉坑里了)。 OK ,開始寫代碼,第一步就跪了。。。: 沃日,這是什么情況,想看看文件列表都不行。趕緊問度娘,明白了,原來是路徑不能出現中文,出現中文的話需要unicode 一下。 我忍了,畢竟寫web  的時候,處理下載中文名文件時候也遇到過。於是改吧: OK ,沒問題了,沒有報錯,我們就是加了一句 unicode(originpath,"utf-8"). 能羅列出來文件,接下來我們就是挨個的遍歷每一個文件了: 看上去沒問題,能夠全部讀出來了。然后我們需要判斷是符號還是漢字啊,問度娘,知道了unicode 的話,判斷是否為漢字可以通過下面方式:
  1. #判斷是否為漢字
  2. def is_chinese(uchar):
  3. if uchar >= u'\u4E00'and uchar <= u'\u9FA5':
  4. returnTrue
  5. else:
  6. returnFalse
如上,判斷是否為漢字的函數。我們加到程序里面,同時為了統計字數,還需要一個全局變量,python 里面的全局變量有些奇怪,不能初始化。所以,代碼進一步完善如下:
如上,測試了一下,發現竟然亂碼了,想想錯在哪里呢?f  是直接從文件讀取出來的字符串,還是中文的,肯定需要Unicode才能處理啊,趕緊改代碼: 我的個神,這次沒有報錯,但是竟然沒有把漢字打印出來,我打印了一個字符才break的啊,怎么回事兒?我改成打印五個字符試試: 能打印出來,好奇怪,這說明第一個字符不是中文?趕緊看看文件: 是漢字啊?那是什么原因?難道是可惡的BOM 頭 ?     原來如此啊,果然是BOM 頭搞的鬼。 趕緊加代碼去除BOM 頭:
  1. #去除BOM 頭信息
  2. def cut_bom(f):
  3. if f[:3]== codecs.BOM_UTF8:
  4. f = f[3:]
  5. return f
如上所示,有東西了,我們已經去掉BOM 頭信息了。搞定這些了,只差最后一步的統計了: 完美,最后統計出來漢字個數一共有 51 萬多。 百度了一下史記字數描述如下: 查了一萬多字呢。基本上差不多。畢竟史記是經過刪改,后人也往里面加了好多東西的。這五十萬字就夠我看了的。 統計漢字數量並不難,如果用Java 估計十分鍾就寫出來了,用 python 主要把時間浪費在了亂碼處理上,現在基本上就明白了這里面的原理。還是認真讀讀在Python中正確使用Unicode, 才有了更加深刻的認識。                        



來自為知筆記(Wiz)



关注微信公众号

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



統計字數問題 word統計章節字數 關於字數統計 一個統計字數的程序 一個統計字數的程序 單詞字數統計 php 統計可讀字數 用 Python 統計高頻字數 用C++統計字數 統計字數的小程序(1)
 
粤ICP备14056181号  © 2014-2020 ITdaan.com