1. 程式人生 > >軟工作業4:詞頻統計

軟工作業4:詞頻統計

一、基本資訊

 # 編譯環境:Pycharm2018、Python3.7
 # 專案名稱:詞頻統計——基本功能(結對程式設計)
 # 作者: 1613072050:馬鈺
 #         1613072051:朱佳豪
 #         1613072052:申可佳

 

二、專案分析

Task1:基本任務

主要需要解決二個問題:1、統計檔案的有效行數;2、統計檔案的單詞總數(其中特殊定義了單詞的定義);3、將資料儲存在文字中

1、統計檔案的有效行數

lines = len(open(dst, 'r').readlines())

2、使用正則表示式統計檔案的單詞總數

def process_buffer(dst, phrase_words, regex):
    words = open(dst, 'r', encoding="gb2312").read()  # 文字讀取
    bvffer = words.lower()  # 將文字內容都改為小寫
    # 將文字中的縮寫都替換
    bvffer = bvffer.replace('’t', '')
    bvffer = bvffer.replace('’m', '')
    bvffer = bvffer.replace('’s', '')
    bvffer = bvffer.replace('’ve', '')
    for i in range(len(phrase_words)):  # 將文字中的“停詞”刪除掉
        bvffer = bvffer.replace(' ' + phrase_words[i] + ' ', ' ')
    result = re.findall(regex, bvffer)  # 正則查詢片語
    word_freq = {}
    for word in result:  # 將正則匹配的結果進行統計
        word_freq[word] = word_freq.get(word, 0) + 1
    return word_freq

  3、將資料儲存在文字中

def input_result(dst, lines, words, items):  # 寫入檔案
    with open(dst, 'w') as w:
        w.write(lines)
        w.write(words)
        for item in items:  # 格式化
            item = '<' + str(item[0]) + '>:' + str(item[1]) + '\n'
            w.write(item)
    print('寫入result檔案已完成!')
    w.close()

Task2.1:支援停詞

def process_buffer(bvffer, dst):
    txt_words = open(dst, 'r', encoding="iso-8859-1").readlines()  # 讀取停詞表檔案
    stop_words = []  # 存放停詞表的list
    for i in range(len(txt_words)):
        txt_words[i] = txt_words[i].replace('\n', '')
        # 寫入list要將換行符取代
        stop_words.append(txt_words[i])
    if bvffer:
        word_freq = {}  # 下面新增處理緩衝區 bvffer程式碼,統計每個單詞的頻率,存放在字典word_freq
        bvffer = bvffer.lower()  # 將文字內容都改為小寫
        for ch in '“‘!;,.?’”':  # 除去文字中的中英文標點符號
            bvffer = bvffer.replace(ch, " ")
        words = bvffer.strip().split()
        # strip()刪除空白符(包括'/n', '/r','/t');split()以空格分割字串
        for word in words:
            if word in stop_words:  # 如果word在停詞表裡就跳過
                continue
            else:
                word_freq[word] = word_freq.get(word, 0) + 1
        return word_freq

Task2.2:檢視常用的短語

def create_stop_words(dst):  # 建立停詞表
    txt_words = open(dst, encoding='gb2312').readlines()  # 文字讀取
    phrase_words = []  # 存放停詞表的list
    for i in range(len(txt_words)):
        txt_words[i] = txt_words[i].replace('\n', '')
        # 因為讀取文字是readlines所以寫入list要將換行符取代
        phrase_words.append(txt_words[i])
    return phrase_words


def process_buffer(dst, phrase_words, regex):
    words = open(dst, 'r', encoding="iso-8859-1").read()  # 文字讀取
    bvffer = words.lower()  # 將文字內容都改為小寫
    # 將文字中的縮寫都替換(進過程式發現以下是最常見的)
    bvffer = bvffer.replace('’t', '')
    bvffer = bvffer.replace('’m', '')
    bvffer = bvffer.replace('’s', '')
    bvffer = bvffer.replace('’ve', '')
    # 其實上面的替換可以防在停詞中但是涉及到空格等問題就放在前面直接替換了
    for i in range(len(phrase_words)):  # 將文字中的“停詞”刪除掉,這樣會使結果很清晰更能接受
        bvffer = bvffer.replace(' ' + phrase_words[i] + ' ', ' ')
    result = re.findall(regex, bvffer)  # 正則查詢片語
    word_freq = {}
    for word in result:  # 將正則匹配的結果進行統計
        word_freq[word] = word_freq.get(word, 0) + 1
    return word_freq

 

 2.2、程式執行案例截圖

Task:基本任務

WordCount.py的執行結果:

 

Task2.1:支援停詞 

Task2.2:檢視常用的短語 

三、效能分析

Task2.2的執行時間的截圖和效能表:  

四、其他

  • 結對程式設計時間開銷:經過大概一個星期的研究、討論。

  • 結對程式設計照片

五、事後分析與總結

結對程式設計是一個相互學習、相互磨合的漸進過程,因為三人平時關係就很不錯,三人都很認真的完成本次任務,所以本次的結對程式設計是很愉快的。通過本次結對程式設計我們也充分的認識到了合作的重要性,一個人程式設計不免要犯這樣那樣的錯誤,結對程式設計就很好的避免了這樣的問題,三人相互學習,相互補充。而且結對程式設計能提供更好的設計質量和程式碼質量,兩人合作能有更強的解決問題的能力。還有就是,結對程式設計讓有些許枯燥的程式設計,變得有趣。