现代软件工程 作业 文本文件中英语单词的频率
這是《構建之法》現代軟件工程課的個人項目作業
程序的測試,回歸測試,效能測試C/C++/C# 等基本語言的運用和 debug。 考慮到同學的基礎參差不齊,這個作業提供了多種要求,請按先易后難的次序實現。?
用戶需求:英語的26 個字母的頻率在一本小說中是如何分布的?某類型文章中常出現的單詞是什么?某作家最常用的詞匯是什么?《哈利波特》 中最常用的短語是什么,等等。 我們就寫一些程序來解決這個問題,滿足一下我們的好奇心。?
假設我們的命令行程序叫 WF.exe? ?(WF: Word Frequence)?
第0步:輸出某個英文文本文件中 26 字母出現的頻率,由高到低排列,并顯示字母出現的百分比,精確到小數點后面兩位。
命令行參數是:
wf.exe -c <file name>
一些同學要復習一下程序如何處理命令行參數, 請看別人的經驗。?
字母頻率 = 這個字母出現的次數 / (所有A-Z,a-z字母出現的總數)
如果兩個字母出現的頻率一樣,那么就按照字典序排列。? 如果 S 和 T 出現頻率都是 10.21%, 那么, S 要排在T 的前面。
這個程序容易寫吧?? 如果要處理一本大部頭小說 (例如 Gone With The Wind), 你的程序效率如何?有沒有什么可以優化的地方?
第一步:輸出單個文件中的前 N 個最常出現的英語單詞。
作用:一個用于統計文本文件中的英語單詞出現頻率的控制臺程序 單詞:以英文字母開頭,由英文字母和字母數字符號組成的字符串視為一個單詞。單詞以分隔符分割且不區分大小寫。在輸出時,所有單詞都用小寫字符表示。?
英文字母:A-Z,a-z字母數字符號:A-Z,a-z,0-9分割符:空格,非字母數字符號 例:good123是一個單詞,123good不是一個單詞。good,Good和GOOD是同一個單詞
功能列表:
- 功能1:wf.exe -f <file>??
輸出文件中所有不重復的單詞,按照出現次數由多到少排列,出現次數同樣多的,以字典序排列。 - 功能2:wf.exe -d <directory>??指定文件目錄,對目錄下每一個文件執行? wf.exe -f <file> 的操作。?
- wf.exe -d -s? <directory>? 同上, 但是會遞歸遍歷目錄下的所有子目錄。
- 功能3:支持 -n 參數,輸出出現次數最多的前 n 個單詞,? 例如,? -n 10 就是輸出最常出現單詞的前 10 名。 當沒有指明數量的時候,我們默認列出所有單詞的頻率。
- 功能1:wf.exe -f <file>??
現在我們這個程序已經有一點復雜度了, 我們要構建一些基本的測試用例來保證程序的基本功能不會在不斷的擴展中出問題。 請看 《構建之法》【回歸測試】的內容,構建一些測試來保證基本功能的正確性。?
第二步:? 支持 stop words
我們從第一步的結果看出,在一本小說里, 頻率出現最高的單詞一般都是 "a", ?"it", "the", "and", "this", 這些詞, 我們并不感興趣.? 我們可以做一個 stop word 文件 (停詞表), 在統計詞匯的時候,跳過這些詞。? 我們把這個文件叫 "stopwords.txt" file.?
功能 4:支持新的命令行參數, 例如:? ?wf.exe -x <stopwordfile>? -f <file>?
在這一步我們要增加什么回歸測試呢?
第三步:? 我們想看看常用的短語是什么, 怎么辦呢??
先定義短語:"兩個或多個英語單詞, 它們之間只有空格分隔".? ?請看下面的例子:
hello world? ?//這是一個短語
hello, world //這不是一個短語?
功能 5:支持新的命令行參數? -p <number>?
參數 <number> 說明要輸出多少個詞的短語,并按照出現頻率排列。同一頻率的詞組, 按照字典序來排列。?
在這一步我們要增加什么回歸測試呢??
第四步:把動詞形態都統一之后再計數。?
我們想找到常用的單詞和短語,但是發現英語動詞經常有時態和語態的變化,導致同一個詞,同一個短語卻被認為是不同的。 怎么解決這個問題呢?
假設我們有這樣一個文本文件,這個文件的每一行都是這樣構成:
動詞原型? 動詞變形1 動詞變形2...?
詞之間用空格分開。
e.g.? 動詞 TAKE 有下面的各種變形
take takes took taken taking
我們希望在實現上面的各種功能的時候,有一個選項, 就是把動詞的各種變形都歸為它的原型來統計。?
功能 6:支持動詞形態的歸一化,參數為 -v
wf.exe -v <verb file>? 其中 <verb file> 是紀錄動詞形態的文本文件。?
實現這些功能, 分析程序的效能??(link: 現代軟件工程講義 2 開發技術 - 效能分析),?
每一步都至少要簽入源代碼控制 (github 或其他工具)一次,同時把回歸測試的測試用例也寫好簽入到適當的目錄中。?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的现代软件工程 作业 文本文件中英语单词的频率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度链接解析_【集合】百度分享链接解析的
- 下一篇: 微软认知服务应用秘籍 – 与机器人聊知识