1. 程式人生 > >單詞詞頻統計(12組)

單詞詞頻統計(12組)

dea strong 文件的 ont 插入 cells 分享 RoCE 操作

單詞詞頻統計

0.前言

該程序寫於2018年7月9日,在北京航空航天大學與南通大學鞠小林老師結對完成。在此期間通過結對編程完成整個項目的需求分析、設計、開發、測試等。現在回顧一下這個程序的編寫過程。與鞠老師的合作是很愉快的。總體信息如下:

+ 小組GitHub 地址:https://github.com/yuan574954352/WordCount

+ 博客園博客地址:

+ PSP

PSP2.1

Personal Software Process Stages

預估耗時(分鐘)

實際耗時(分鐘)

Planning

計劃

· Estimate

· 估計這個任務需要多少時間

10

15

Development

開發

0

0

· Analysis

· 需求分析 (包括學習新技術)

30

30

· Design Spec

· 生成設計文檔

15

15

· Design Review

· 設計復審 (和同事審核設計文檔)

20

30

· Coding Standard

· 代碼規範 (為目前的開發制定合適的規範)

5

5

· Design

· 具體設計

10

20

· Coding

· 具體編碼

40

80

· Code Review

· 代碼復審

20

30

· Test

· 測試(自我測試,修改代碼,提交修改)

40

50

Reporting

報告

0

0

· Test Report

· 測試報告

5

10

· Size Measurement

· 計算工作量

5

5

· Postmortem & Process Improvement Plan

· 事後總結, 並提出過程改進計劃

10

20

合計

210

310

  1. 設計思路

Java中的Map接口建立了 key 和 value 的映射。擬采用 key 存儲需要統計的字符(或單詞),value 則對應對應字符(或單詞)的頻率。

例如, 建立一個map,其中的key存儲的是字符(a,w,z等),value則存儲的對應的頻率。

  2.系統框架

程序的整體開發流程如下:

                 技術分享圖片

1)對文本中非英語的一切字符進行過濾,只留下英語和必要的空格,能夠區分不同單詞,同時對於英語中特別的字符要加以處理)

2)過濾出單詞

3)對單詞首先在數據表中“查找”操作,如果存在,則更新值,如果不存在,則插入值。

4)尋找合適的呈現方法,將最終的數據呈現出來,表格、文件等

主要處理流程是:

main(String[] args) {

lib test = new lib();

test.dealFile(args);

orderList1 = test.sortMap(test.getMap1());

orderList2 = test.sortMap(test.getMap2());

test.out("output1.txt",orderList1);

test.out("output2.txt",orderList2);

}

Step1: 函數dealFile(),逐行讀取文件; 調用函數 dealLine() 來處理每一行字符和字符串;統計好頻率放到對應的全局變量 map1、map2;

Step2 函數sortMap()是對 map map1 map2)的內容按 value 值降序排列;

Step3:函數out() 輸出 top_n 字符(串)到指定的文件。

這個過程中用到了信息隱蔽原則,將上述4個主要函數dealFile、dealLine、sortMapout 獨立編寫在 lib.java文件中;其中 dealFile 循環調用 dealLine 函數以處理輸入文件的每一行;

此外,在 lib.java 中編寫了一些判斷字符類型的短小的函數,如isZ()、isNumber()、isSplit()。

上述設計不足之處是采用if… else… 結構處理分詞,效率比較低,而且容易遺漏一些特殊的單詞組合情況。如以下單詞:isn’t FFile3name 等

  1. 性能評估及改進

利用 JProfile 開展性能評估,處理大文件,gong_with_the_wind.txt第一次,運行時間大概2000+ms,分析發現系統打印輸出代碼耗費了大量的時間,因此移除了調試時插入的一些打印輸出代碼。程序執行時間大為縮短。大約339ms,主要時間耗費在 Map中元素的查找。

技術分享圖片

單詞詞頻統計(12組)