HJYESORNO

导航

3124004092个人项目

论文查重系统个人项目

项目GitHub仓库:https://github.com/H434854542/3124004092-

1.项目简介

本项目使用Python实现简易论文查重程序,基于jieba分词对文本进行分词处理,采用余弦相似度算法计算两篇文档的重复率,输出相似度结果到目标文件。项目包含主程序、单元测试模块,完成功能测试、性能分析与测试覆盖率统计。

2.需求分析

2.1 功能需求

  1. 读取原文文本文件、待检测抄袭文本文件
  2. 使用jieba进行中文分词,去除停用词
  3. 计算两段文本的余弦相似度,得到重复率
  4. 将最终重复率写入输出答案文件

2.2 非功能需求

  1. 程序运行稳定,对常规长度文本可快速计算
  2. 代码可测试,编写单元测试验证核心计算逻辑
  3. 完成性能分析,定位程序耗时瓶颈
  4. 统计单元测试覆盖率,保证核心代码被覆盖

3.设计与实现

3.1 总体设计

程序分为三个核心模块:文本读取模块、分词预处理模块、余弦相似度计算模块。

  1. 文本读取:读取txt文件内容,捕获文件不存在异常。
  2. 分词预处理:调用jieba对文本分词,过滤停用词,生成词频向量。
  3. 相似度计算:基于词频向量计算余弦值,得到0~1之间的重复率。

3.2 核心代码

import jieba
import math

# 读取文本
def read_file(path):
    try:
        with open(path, 'r', encoding='utf-8') as f:
            return f.read()
    except FileNotFoundError:
        print("文件不存在")
        return ""

# 分词处理
def cut_words(text):
    words = jieba.lcut(text)
    stop = {",", "。", "、", "的", "了", "是"}
    res = [w for w in words if w not in stop and len(w.strip())>0]
    return res

# 构建词频字典
def get_word_freq(word_list):
    freq = {}
    for w in word_list:
        freq[w] = freq.get(w,0)+1
    return freq

# 余弦相似度计算
def calc_cosine(freq1, freq2):
    all_words = set(freq1.keys()) | set(freq2.keys())
    dot = 0
    mod1 = 0
    mod2 = 0
    for w in all_words:
        v1 = freq1.get(w,0)
        v2 = freq2.get(w,0)
        dot += v1*v2
        mod1 += v1**2
        mod2 += v2**2
    if mod1 ==0 or mod2 ==0:
        return 0.0
    return dot/(math.sqrt(mod1)*math.sqrt(mod2))

def main():
    import sys
    if len(sys.argv)!=4:
        print("用法: python main.py 原文.txt 抄袭版.txt 输出.txt")
        return
    f1,f2,fout = sys.argv[1],sys.argv[2],sys.argv[3]
    t1 = read_file(f1)
    t2 = read_file(f2)
    w1 = cut_words(t1)
    w2 = cut_words(t2)
    fr1 = get_word_freq(w1)
    fr2 = get_word_freq(w2)
    sim = calc_cosine(fr1,fr2)
    with open(fout,"w",encoding="utf-8") as f:
        f.write(f"重复率:{sim:.2f}")
    print(f"重复率:{sim:.2f}")

if __name__=="__main__":
    main()

posted on 2026-09-14 21:23  HJYESORNO  阅读(5)  评论(0)    收藏  举报