201671030102陳飛 《英文文本統計分析》結對項目報告

博文簡要信息表

項目html

內容java

該做業所屬課程git

軟件工程github

這個做業的要求出處編程

實驗四 軟件工程結對項目數組

課程學習目標學習

熟悉軟件開發總體流程,提高自身能力測試

本次做業在哪一個具體方面幫助咱們實現目標this

第一次體驗一個完整的工程編碼


點評信息

點評博客:

201671030102201671030107詞頻統計軟件項目報告

Github連接地址:

源碼地址

點評內容:

博文結構較規範,可是內容有一部分並無提到。好比程序結構(即類名),流程圖都沒有看見。就PSP而言,咱們並無培養出寫規劃的習慣,以致於如計劃時間太短、生成文檔時間過程等問題是沒法避免的。 從代碼來看,代碼機構劃分不明顯,但功能基本實現。人機交互界面較爲空難。

點評心得:

在讀取代碼以後發現了,使用hashmap這個存儲結構可以極大的提高程序處理文件的速度,因爲我使用泛型數組致使程序運行速度較慢


源碼地址

源碼可於此處查看

結對項目實施過程

需求分析
根據實驗四 軟件工程結對項目所提要求,咱們分析的主要需求有:
         a. 可處理任意用戶輸入的任意英文文本功能;
         b. 統計該文本的行數和字符數功能
         c. 指定單詞詞頻統計功能;
         d. 前k個高頻詞統計功能;
         e. 統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt功能
         f. 統計時計時功能;
         g. GUI人機交互界面;
         h. 統計文本中除冠詞、代詞、介詞以外的高頻詞;

軟件設計

在第二次實驗中,我沒有將各功能分開分別在幾個類中實現,因此這一次吸收了上一次的經驗教訓
該軟件共有10個類:
         1. frequency.java類用於調用文本輸入界面MainWindows.java類
         2.MainWindows.java類用於實現文本輸入界面,當輸入一個文本名時若是存在,則順利進入功能選擇並實現界面OneWindows.java類,不然,彈出文件不存在的提示框;
         3. OneWindows.java類利用JFrameButton功能實現對各功能選擇界面的監聽,當獲取到各按鈕的id以後將實現各功能的界面,默認的界面是ChuLi.java類,當點擊按值排序的按鈕時調用GaoPin.java類,當點擊查詢單詞的按鈕時調用px.java類,當點擊保存退出的按鈕時將全部單詞按照字母表順序存放到result.txt文件中,將除了介詞、代詞、冠詞之外的其他詞彙按照詞頻從高到底的順序保存到result1.txt文件中,以後彈出提示信息:「文件已經將除了介詞、代詞、冠詞以外的單詞按詞頻高低保存到result1.txt中\n將全部的單詞按字典順序保存到result.txt中\n注:此處爲附加任務一所得結果」;
         4. ChuLi.java類所實現的處理信息,包括:文本名、文本行數、文本字符數、分離文本中的單詞並統計各單詞詞頻所花費的時間;
         5. px.java類用於實現輸入須要輸出的高頻詞彙的個數,點擊確認後,會將按照詞頻從高到低的順序輸出到OneWindows.java類的界面中;
         6. GaoPin.java類用於實現從OneWindows.java類獲取一個字符串,而後調用WordQuery.java類類對該字符串進行處理;
         7. wordQuery.java類用於將須要查詢的特殊詞對應的詞頻輸出而且將其繪製成JFrame所實現可視化柱狀圖;
         8. SortMapByValue.java類根據映射的值排序,排序後可根據用戶輸入的k值進行輸出
         9. SortMapByValue.java類根據映射的鍵排序,排序後將單詞以及單詞對應的詞頻保存至result.txt文件中
         10.TongJiGaoPinCi.java類用於實現除了介詞、代詞、冠詞以外的其它詞以及其對應的高頻詞保存至result1.txt文件中。

核心功能代碼段展現

輸入文本名界面,若文本不存在,則彈出提示框,不然處理文本並計時:

JLabel l1=new JLabel("請輸入文件名");
    j1.add(l1);
    JTextField FileName =new JTextField(15);
    j2.add(FileName);
    JButton en=new JButton("確認");
    j3.add(en);
    this.add(j1);
    this.add(j2);
    this.add(j3);
    en.addActionListener(event ->{
        Filename=FileName.getText();
        if(Filename.length()==0)
        {
            FileName.setText("文件名不能爲空!");
        }
        else
        {   
            long date1=System.currentTimeMillis();
             String regex = "[1234567890」「…—‘’ 【】、.。,,。\"!--;:?\'\\]]";
                try {
                    // 讀取要處理的文件
                    File f=new File(Filename);
                    if(!f.exists())
                    {
                        JOptionPane.showMessageDialog(null, "文件不存在", "警告", JOptionPane.ERROR_MESSAGE);
                        FileName.setText("");
                    }
                    else {
                        this.setVisible(false);
                        BufferedReader br = new BufferedReader(new FileReader(Filename));
                        
                        String value;
                        while ((value = br.readLine()) != null) {
                            hang++;
                            zifu+=value.length();
                            value = value.replaceAll(regex, " ");
                            // 使用StringTokenizer來分詞
                            StringTokenizer tokenizer = new StringTokenizer(value);
                            while (tokenizer.hasMoreTokens()) {
                                String word = tokenizer.nextToken();
                                if (!hashMap.containsKey(word)) {
                                    hashMap.put(word, new Integer(1));
                                } else {
                                    int k = hashMap.get(word).intValue() + 1;
                                    hashMap.put(word, new Integer(k));
                                }
                            }
                        }
                        br.close();
                        long date2=System.currentTimeMillis();
                        time=date2-date1;
                        OneWindows o=new OneWindows();
                        o.setVisible(true);
                        o.setSize(600,300);
                        o.setLocation(300,200);
                        o.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    }

不一樣功能根據按鈕所獲取的id來彈出相應的用戶界面

ChuLi c=new ChuLi();
        this.add(c,BorderLayout.CENTER);
        c.setVisible(true);
        GaoPin g=new GaoPin();
        px p=new px();
        
        b1.addActionListener(event ->{
            this.add(c,BorderLayout.CENTER);
            c.setVisible(true);
            g.setVisible(false);
            p.setVisible(false);
        });
        b2.addActionListener(event ->{
            this.add(p,BorderLayout.CENTER);
            p.setVisible(true);
            g.setVisible(false);
            c.setVisible(false);
        });
        b3.addActionListener(event ->{
            this.add(g,BorderLayout.CENTER);
            g.setVisible(true);
            c.setVisible(false);
            p.setVisible(false);
        });
        b4.addActionListener(event ->{
            g.setVisible(false);
            c.setVisible(false);
            p.setVisible(false);
            TongJiGaoPinCi.tongjigaopinci();
            JOptionPane.showMessageDialog(null, "文件已經將除了介詞、代詞、冠詞以外的單詞按詞頻高低保存到result1.txt中\n將全部的單詞按字典順序保存到result.txt中\n注:此處爲附加任務一所得結果", "保存", JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        });


程序運行

文本處理功能,文本行數、字符數統計功能,詞頻統計所耗費的毫秒數功能(即計時功能):

文本未找到時彈出提示框功能:

按值排序功能:

查找單詞並繪製柱狀圖功能:

保存並退出功能(將除了介詞、代詞、冠詞的單詞按照詞頻的高低順序保存到result1.txt文件中,將全部單詞按照字母表順序保存到result.txt文件中):

result.txt文件的內容:

result1.txt文件的內容:


結對照片


結對做業的PSP

PSP2.1

任務內容

計劃共完成須要的時間(min)

實際完成須要的時間(min)

Planning

計劃

10

8

Estimate

估計這個任務須要多少時間,並規劃大體工做步驟

8

6

Development

開發

120

150

Analysis

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

6

10

Design Spec

生成設計文檔

15

26

Design Review

設計複審(和同事審覈設計文檔)

4

5

Coding Standard

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

5

4

Design

具體設計

10

15

Coding

具體編碼

240

300

Code Review

代碼複審

10

9

Test

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

20

25

Reporting

報告

9

6

Test Report

測試報告

10

8

Size Measurement

計算工做量

2

2

Process Improvement Plan

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

3

3

      根據PSP表能夠看到,咱們在開發和編碼的時候實際時間遠多於計劃時間,這是因爲在開發和編碼的過程當中,JFrame圖形用戶界面的好多知識點已經忘了,因此在開發和編碼的過程當中須要不斷在網上和教材上去查找和從新學習相關的知識點,因此耗費的時間比較多。       在這次開發過程當中發現,不一樣的人有不一樣的編程風格,並且在不理解別人風格的狀況下是很難進行溝通的       固然,實驗二中存在的處理後文本有非單詞的狀況和沒有面向對象的思想的問題,在此次的實驗中也有努力的解決。

相關文章
相關標籤/搜索