Python 實(shí)現(xiàn)文言文詞頻統(tǒng)計(jì)

前言

Github 鏈接

本文旨在對(duì)開發(fā)過程中出現(xiàn)的若干問題作記錄。因?yàn)殚_發(fā)本身過程大多采用參考代碼,不完全原始開發(fā),因此不涉及具體的python語法記錄,只對(duì)搭建環(huán)境及需求分析作統(tǒng)一的記述。

需求描述

目的

旨在開發(fā)一個(gè)詞頻統(tǒng)計(jì)工具。統(tǒng)計(jì)某個(gè)文件夾下所有的.txt,.docx,.doc文件中出現(xiàn)的所有單個(gè)字出現(xiàn)的次數(shù)。

區(qū)別于現(xiàn)代文和英文(現(xiàn)代文設(shè)計(jì)組詞分詞,英文則是根據(jù)空格區(qū)分單詞),文言文的基本釋義是一字一義。因此,我們的統(tǒng)計(jì)可以適用于遍歷所有的漢字,然后作統(tǒng)計(jì)。

選用 python 的目的

本次的需求實(shí)際上是一個(gè)桌面端應(yīng)用的開發(fā)。當(dāng)前能夠使用的桌面端開發(fā)工具有許多。

  • Windows 平臺(tái)下的桌面端仍然是微軟提供的 MFC 開發(fā),采用 C++語言
  • Mac 平臺(tái)下和iOS 相同,采用Objective-CSwift配合Xcode IDE

本次的工具旨在開發(fā)一款跨平臺(tái)的桌面端應(yīng)用(在Windows, MacOSX)下通用。目前我個(gè)人已知的跨平臺(tái)開發(fā)庫除了Python相關(guān)的庫外,就是JavaScript世界中的幾個(gè)跨院庫:Electron等。

跨平臺(tái)開發(fā)本質(zhì)上意味著犧牲一部分的性能以及包大小。簡(jiǎn)單來說就是各個(gè)平臺(tái)本身有一套根據(jù)自身硬件性能和平臺(tái) api 特性設(shè)計(jì)的開發(fā)方案??缙脚_(tái)的開發(fā)工具先用自身的開發(fā)邏輯實(shí)現(xiàn)了所有的業(yè)務(wù),最后通過解釋器生成原生使用的機(jī)器語言。

簡(jiǎn)單的解釋,好比你帶了一個(gè)翻譯出國旅行。雖然也可以算得上暢行無阻,但是交流起來畢竟隔了一層。

本次的需求本身而言并不復(fù)雜,選用python的原因主要還是因?yàn)樗暮?jiǎn)單易用性。而electron,還需要熟悉更多額外的內(nèi)容。

設(shè)計(jì)思路

文言文統(tǒng)計(jì)流程圖

開發(fā)環(huán)境及搭建

  • python環(huán)境 —— python 2.7

    • Windows需要額外安裝,下載這個(gè)鏈接中的Windows x86-64 MSI installer,安裝時(shí)記得勾選最后一個(gè)add python.exe to Path(這一步是添加python 到環(huán)境變量,如果不勾選,回頭還要手動(dòng)作,很麻煩)
      圖片
    • mac 下因?yàn)樽詭Я?code>python 2.7不需要額外安裝
  • python IDE 這沒啥好說的,就是使用JetBrains他們家的Pycharm.
    這里額外說明一下,用過pycharm的同學(xué)可以直接跳過。
    Pycharm的優(yōu)點(diǎn)在于:

    • 良好的包管理工具 —— 開發(fā)者不需要像很多教程中提到的,使用命令行進(jìn)行pip的手動(dòng)安裝,直接搜索庫中已有的第三方庫。直接可視化操作。

    • 默認(rèn)安裝了虛擬環(huán)境 —— 安裝虛擬環(huán)境的目的:通常地,創(chuàng)建一個(gè)python項(xiàng)目,如果有用到第三方庫,我們都是直接安裝在本地目錄下。

      這樣造成的一個(gè)結(jié)果就是,每當(dāng)我新建一個(gè)工程,也許都存在一個(gè)不相干的共享的python庫在其中。

      虛擬環(huán)境的搭建,旨在針對(duì)每一個(gè)新建的python工程,都有一個(gè)干凈的python庫在其中。下面是在pycharm中建立虛擬環(huán)境 virtualEnv(virtual environment)

      示意圖1

      示意圖2

  • 使用到的第三方庫:

    • xlwt 生成/寫入excel文件的庫
    • python-docx 讀取Word文檔的第三方庫
    • zhon 處理漢字標(biāo)點(diǎn)符號(hào)
    • langconv 處理簡(jiǎn)繁體轉(zhuǎn)化
    • Tkinter 這個(gè)是python自帶的桌面GUI 開發(fā)工具,比較輕量級(jí)。最后的效果大概如下
      mac 端的視圖

遇到的問題

業(yè)務(wù)邏輯上的問題

除了上面提到的程序上的問題外,業(yè)務(wù)本身還存在幾個(gè)開發(fā)過程中需要解決的痛點(diǎn)。這里一一羅列:

  • 標(biāo)點(diǎn)符號(hào) —— 我們統(tǒng)計(jì)詞頻的時(shí)候,需要做的事就是“掐頭去尾”,即,遍歷每一行的字符串內(nèi)容,去掉其中的所有標(biāo)點(diǎn)符號(hào)(包括中英文),然后作下一步操作

  • 簡(jiǎn)繁轉(zhuǎn)化 —— 簡(jiǎn)體字和繁體字并不是一一對(duì)應(yīng)的關(guān)系。比如繁體字的"麵條"和“面對(duì)”,對(duì)應(yīng)簡(jiǎn)體字都是“面”,繁轉(zhuǎn)簡(jiǎn)還好說,簡(jiǎn)轉(zhuǎn)繁的時(shí)候,究竟對(duì)應(yīng)哪個(gè)面,也許就不得而知了。
    目前的做法是統(tǒng)一轉(zhuǎn)化成簡(jiǎn)體。但是一些特殊情況也會(huì)出問題,比如“乾隆”和“乾坤”,轉(zhuǎn)成簡(jiǎn)體字,會(huì)變成“干隆”和“干坤”。

    之前使用的簡(jiǎn)繁轉(zhuǎn)換庫叫做opencc,之后發(fā)現(xiàn)打包后運(yùn)行時(shí),會(huì)報(bào)轉(zhuǎn)化失敗的錯(cuò)誤。故而改用一個(gè)引入源碼的庫langconv.py

  • 讀取 .txt.docx/.doc的區(qū)別
    Word相對(duì)于記事本,是支持富文本的。因此在文件的讀取上也有很多的不同。這里專門使用了一個(gè)pythonWord讀取庫叫做python-docx作讀取操作。

開發(fā)中遇到的問題

  • 不同平臺(tái)下的若干問題
    • 打包問題 —— 使用什么打包工具
      網(wǎng)上有很多的文章,提到了windows 平臺(tái)使用py2exe等等的庫,mac 平臺(tái)使用py2app.實(shí)際情況是,這些庫都不盡如人意,存在許許多多的問題。不是打包失敗,就是打包成功后運(yùn)行失敗,且無法定位問題。

      閑話少敘,這里使用的是叫做Pyinstaller的打包工具。

      這里也有一個(gè)小坑:首次安裝pyinstaller后,在虛擬環(huán)境中執(zhí)行終端的打包指令是會(huì)報(bào)無法識(shí)別pyinstaller的。這時(shí)候必須要將整個(gè)pycharm重啟。當(dāng)看到終端指令前面出現(xiàn)(venv)的字樣,才能執(zhí)行。

      示意圖3

    打包mac 下的 app,那么要在 mac 下運(yùn)行。打包 Windows 的.exe 文件,那么工程必須運(yùn)行在 Windows 下。也就是說,我在 A 平臺(tái)的時(shí)候,不能打包 B 平臺(tái)下的包。這個(gè)其實(shí)也蠻麻煩的,等于我在兩個(gè)平臺(tái)都要安裝一遍程序。
    
* 打開文件/文件夾,mac 和 windows 下的命令不同,代碼要做兼容
完成統(tǒng)計(jì)后,我們理想的狀態(tài)是打開生成的`excel`和它所在的文件夾。
    * mac 底下用的是`open ./desExcel.xls`,
    * windows 底下的命令是`./desExcel.xls`

    針對(duì)這點(diǎn),需要作區(qū)別處理完成兼容
  • 調(diào)試過程中可以正常使用,打包后無法運(yùn)行。—— 涉及打包后如何定位問題
    mac平臺(tái),打包后在dist文件夾下會(huì)生成兩個(gè)文件,一個(gè)是.app,一個(gè)是一個(gè)終端文件,直接拖曳進(jìn)入終端后可以執(zhí)行,且會(huì)出現(xiàn)打印日志,方便定位運(yùn)行失敗問題。

    示意圖4

  • 異常處理 —— 對(duì)于Word會(huì)生成隱藏的臨時(shí)文件,當(dāng)臨時(shí)文件為空時(shí),python中的讀取會(huì)報(bào)錯(cuò)。
    這里可以使用try except語法忽略空文件。因?yàn)樯婕罢Z法,不贅述。

以上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 3,127評(píng)論 1 3
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,838評(píng)論 6 427
  • 你自以為的利他 卻是自我感動(dòng) 結(jié)果 你忘了初心,忘了自己 路 愈是遙遠(yuǎn)
    高小多閱讀 146評(píng)論 0 1
  • 蟬鳴漸遠(yuǎn),眼見要過了熾熱的夏,見夕陽還未落,卻也有了絲絲涼意。日子,緘默無聲,總是在潺潺流水般的節(jié)奏里逐漸的...
    Deaf丶閱讀 980評(píng)論 3 7
  • 有幸在全國虐狗日參觀了中英金融科技孵化器 感觸頗多 這是一場(chǎng)堪比互聯(lián)網(wǎng)革命的新科技革命 這是一次消除不...
    小闖超人不會(huì)飛閱讀 145評(píng)論 0 0

友情鏈接更多精彩內(nèi)容