日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件工程实践之词频统计

發(fā)布時(shí)間:2025/4/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件工程实践之词频统计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GitHub倉庫地址:?https://github.com/softwarehsc/java1

PSP表格:

PSP2.1Personal Software Process Stages預(yù)估耗時(shí)(分鐘)實(shí)際耗時(shí)(分鐘)
合計(jì)?540?
· Test Repor· 測試報(bào)告6040
· Test· 測試(自我測試,修改代碼,提交修改)60240
· Size Measurement· 計(jì)算工作量1010
· Postmortem & Process Improvement Plan· 事后總結(jié), 并提出過程改進(jìn)計(jì)劃1010
· Estimate· 估計(jì)這個(gè)任務(wù)需要多少時(shí)間2060
· Design Spec· 生成設(shè)計(jì)文檔3030
· Design Review· 設(shè)計(jì)復(fù)審3010
· Design· 具體設(shè)計(jì)6030
· Coding Standard· 代碼規(guī)范 (為目前的開發(fā)制定合適的規(guī)范)2015
· Coding· 具體編碼120380
· Code Review· 代碼復(fù)審6030
· Analysis· 需求分析 (包括學(xué)習(xí)新技術(shù))6060
Reporting報(bào)告8060
Planning計(jì)劃6060
Development開發(fā)480795

需求分析
  • 統(tǒng)計(jì)文件的字符數(shù):

    • 只需要統(tǒng)計(jì)Ascii碼,漢字不需考慮
    • 空格,水平制表符,換行符,均算字符
  • 統(tǒng)計(jì)文件的單詞總數(shù),單詞:至少以4個(gè)英文字母開頭,跟上字母數(shù)字符號,單詞以分隔符分割,不區(qū)分大小寫。

    統(tǒng)計(jì)文件的有效行數(shù):任何包含非空白字符的行,都需要統(tǒng)計(jì)。
    • 英文字母: A-Z,a-z
    • 字母數(shù)字符號:A-Z, a-z,0-9
    • 分割符:空格,非字母數(shù)字符號
    • 例:file123是一個(gè)單詞, 123file不是一個(gè)單詞。file,File和FILE是同一個(gè)單詞
  • 統(tǒng)計(jì)文件中各單詞的出現(xiàn)次數(shù),最終只輸出頻率最高的10個(gè)。頻率相同的單詞,優(yōu)先輸出字典序靠前的單詞。
  • 按照字典序輸出到文件result.txt:例如,windows95,windows98和windows2000同時(shí)出現(xiàn)時(shí),則先輸出windows2000

    • 輸出的單詞統(tǒng)一為小寫格式
  • 輸出的格式為

  • characters: number words: number lines: number <word1>: number <word2>: number
    實(shí)現(xiàn)過程
    在eclipse建立文件main.java包含文件的讀入和主方法,調(diào)用lib.java中Print類的求characters、words、lines等的方法實(shí)現(xiàn)需求。
    在WordCount類中首先通利用BufferedReader類通過從字符輸入流中讀取文本。將所有字母單詞轉(zhuǎn)換為小寫形式,再次讀取文檔,通過正則表達(dá)式
    過濾掉標(biāo)點(diǎn)符號分離出單詞存儲(chǔ)在lists列表中(List<String> lists = new ArrayList<String>();?)。最后通過wordsCount存儲(chǔ)單詞計(jì)數(shù)信息(Map<String, Integer> wordsCount = new TreeMap<String,Integer>();)
    代碼說明
    主方法類用于讀取文本文件統(tǒng)計(jì)字符個(gè)數(shù) 并調(diào)用Store類中的函數(shù)將words、lines等參數(shù)的值存入
    result.txt文件中: package main.java;import java.io.BufferedReader; import java.io.CharArrayWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.Reader; import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Scanner; import java.util.TreeMap; import lib.java.Store; public class WordCount { public static void main(String[] args) throws Exception { try {//File file = new File(args[0]);//String pathname = file.getPath();Scanner scanner=new Scanner(System.in);String pathname=scanner.nextLine();Reader myReader = new FileReader(pathname);Reader myBufferedReader = new BufferedReader(myReader); //對文本處理CharArrayWriter tempStream = new CharArrayWriter();int i = -1;do {if(i!=-1)tempStream.write(i);i = myBufferedReader.read();if(i >= 65 && i <= 90){i += 32;}}while(i != -1);myBufferedReader.close();Writer myWriter = new FileWriter(pathname);tempStream.writeTo(myWriter);tempStream.flush();tempStream.close();myWriter.close();BufferedReader br = new BufferedReader(new FileReader(pathname)); int characterscount=0; int wordline = 0;int wordcount = 0;List<String> lists = new ArrayList<String>(); //存儲(chǔ)過濾后單詞的列表 String readLine = null;while((readLine = br.readLine()) != null){ wordline++;String[] wordsArr1 = readLine.split("[^a-zA-Z0-9]"); //過濾出只含有字母的單詞characterscount+=readLine.length();for (String word : wordsArr1) { if(word.length() != 0){ //去除長度為0的行while(!(word.charAt(0)>=97&&word.charAt(0)<=122)){word = word.substring(1, word.length());}if(word.length()>=4) wordcount++;lists.add(word); } } } br.close(); Map<String, Integer> wordsCount = new TreeMap<String,Integer>(); //單詞的詞頻統(tǒng)計(jì) for (String li : lists) { if(wordsCount.get(li) != null){ wordsCount.put(li,wordsCount.get(li) + 1); }else{ wordsCount.put(li,1); } } Store st= new Store();st.store_result(wordsCount, wordline, wordcount, characterscount); }catch (Exception e) {e.printStackTrace();} } }

     用Store類將輸出存入result.txt文件中:

    1 package lib.java; 2 import java.io.BufferedWriter; 3 import java.io.File; 4 import java.io.FileWriter; 5 import java.util.ArrayList; 6 import java.util.Collections; 7 import java.util.Comparator; 8 import java.util.Map; 9 import java.util.Map.Entry; 10 11 public class Store { 12 13 public static void store_result(Map<String,Integer> oldmap,int wordline,int wordcount,int characterscount){ 14 ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet()); 15 Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){ 16 public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { 17 return o2.getValue() - o1.getValue(); //降序 18 } 19 }); 20 try { 21 //System.out.println(wordcount); 22 File file = new File("src//result.txt"); 23 BufferedWriter bi = new BufferedWriter(new FileWriter(file)); 24 bi.write("characters: "+(characterscount+wordline)+"\r\n"); 25 bi.write("words: "+wordcount+"\r\n"); 26 bi.write("lines: "+wordline+"\r\n"); 27 int k=0; 28 for(int i = 0; i<list.size(); i++){ 29 if(k>=10)break; 30 if(list.get(i).getKey().length()>3) 31 { 32 bi.write("<"+list.get(i).getKey()+">"+ ": " +list.get(i).getValue()+"\r\n"); 33 k++; 34 } 35 36 } 37 bi.close(); 38 }catch (Exception e) { 39 e.printStackTrace(); 40 } 41 42 } 43 }

    ?




    用EclEmma進(jìn)行覆蓋率測試:

    ?

    ?

    ?命令行測試樣例:

    ?

    ?

    ?

    ?

    ?總結(jié):

    一開始沒有認(rèn)真地理解題目意思,更沒有系統(tǒng)地分析解題過程。在沒有較為完善的計(jì)劃之前就直接寫程序?qū)е伦吡撕芏嗟膹澛贰R院笤僮鲆粋€(gè)項(xiàng)目之前,哪怕這個(gè)項(xiàng)目結(jié)構(gòu)不是很復(fù)雜,也應(yīng)該寫好項(xiàng)目文檔,這樣在開發(fā)的過程中便能清楚地知道將要完成的模塊和更好的完善代碼。在測試過程中也能根據(jù)文檔快速地進(jìn)行代碼優(yōu)化。

    ?

    ?

    ?

    ?



    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/heshoucheng/p/9610814.html

    總結(jié)

    以上是生活随笔為你收集整理的软件工程实践之词频统计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。