首页 > 其他分享 >个人项目

个人项目

时间:2024-09-14 18:24:42浏览次数:8  
标签:__ main 个人 similarity text 项目 1h 文本

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-12
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/13220
这个作业的目标 完整地做一次项目、掌握测试工具、掌握处理异常方法

1.Github仓库中新建学号为名的文件夹

2.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时 实际耗时
Planning 计划 1h 1h
Estimate 估计这个任务需要多少时间 48h 36h
Development 开发 20h 15h
Analysis 需求分析 (包括学习新技术) 5h 4h
Design Spec 生成设计文档 1h 1h
Design Review 设计复审 3h 4h
Coding Standard 代码规范 (为目前的开发制定合适的规范) 2h 3h
Design 具体设计 3h 3h
Coding 具体编码 4h 4h
Code Review 代码复审 2h 1h
Test 测试(自我测试,修改代码,提交修改) 2h 1h
Reporting 报告 2h 1h
Test Repor 测试报告 3h 2h
Size Measurement 计算工作量 3h 1h
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 1h 1h
合计 48h 36h

3. 计算模块接口的设计与实现过程

类和函数的设计

代码包含三个类:
TextProcessor类:负责文本的预处理工作。
SimilarityCalculator类:负责计算两个文本之间的相似度。
TextSimilarityAnalyzer类:使用 TextProcessor 和 SimilarityCalculator 来执行整个分析流程。
代码包含个函数:
preprocess_text:对输入的文本进行预处理,包括分词、去除停用词和非字母数字字符。
calculate_similarity:计算两个预处理后的文本之间的相似度。
analyze_similarity:执行整个文本相似度分析流程,包括读取文本文件、预处理文本、计算相似度,并将结果写入输出文件。
main:设置命令行参数解析,创建 TextSimilarityAnalyzer 实例,并调用 analyze_similarity 方法。

函数流程图

算法关键

(1)预处理文本:标准化格式、去除标点和特殊字符、分词、去除停用词和词干还原。
(2)向量化文本:采用词袋模型、TF-IDF和词嵌入。
(3)计算相似度:余弦相似度、Jaccard相似度和欧式距离。

4. 代码质量分析

采用Pylint进行检测代码质量,结果如图。

5. 计算模块接口部分的性能改进

采用cProfile进行性能分析,情况如下图所示,花费时间为2h,在性能上,为了提高程序的健壮性,在代码中耗时最多的函数为calculate_similarity,平均调用耗时为0.716s,函数展示如下:

def calculate_similarity(text1, text2):
    """
    计算两个文本之间的相似度。

    参数:
    text1 (str): 第一个要比较的文本。
    text2 (str): 第二个要比较的文本。

    返回:
    float: 两个文本之间的相似度,范围从0(完全不同)到1(完全相同)。
    """
    # 创建SequenceMatcher对象,用于比较两个文本
    # None表示不使用过滤函数,text1和text2是要比较的文本
    matcher = SequenceMatcher(None, text1, text2)
    # 调用ratio()方法计算相似度比率
    similarity = matcher.ratio()
    return similarity  # 返回计算出的相似度比率

PARSER.add_argument('--sample_text', type=str, required=True)添加了required=True,确保了用户必须提供这些参数,否则程序会报错并提示用户。




6.计算模块部分单元测试展示

单元测试代码

import unittest
from main import preprocess_text, calculate_similarity  # 替换your_module_name为你的模块名


class TestTextProcessing(unittest.TestCase):
    def test_preprocess_text(self):
        sample_text = "This is a sample text. It includes some stopwords, such as the, and."
        expected_output = "sample text includes stopwords"  # 更新期望输出
        self.assertEqual(preprocess_text(sample_text), expected_output)

    def test_calculate_similarity(self):
        # 测试计算相似度功能
        text1 = "This is a test text."
        text2 = "This is a test."
        similarity_score = calculate_similarity(text1, text2)
        # 相似度应该接近1,但不一定完全等于1,因为文本不完全相同
        self.assertGreater(similarity_score, 0.8)  # 调整期望值

        # 测试两个完全不同的文本
        text3 = "This is a completely different text."
        similarity_score = calculate_similarity(text1, text3)
        print("Preprocessed text1:", preprocess_text(text1))
        print("Preprocessed text3:", preprocess_text(text3))
        print("Similarity score:", similarity_score)
        # 相似度应该接近0
        self.assertLess(similarity_score, 0.7)  # 调整期望值


if __name__ == '__main__':
    unittest.main()

单元测试覆盖率如图所示。

7.计算模块部分异常处理说明

打开不存在的文件时的错误

单元测试样例

class TestFileNotFoundError(unittest.TestCase):
    def test_nonexistent_file(self):
        with self.assertRaises(FileNotFoundError):
            main(['--sample_text', 'nonexistent.txt', '--reference_text', 'reference.txt', '--test_outcome', 'result.txt'])

if __name__ == '__main__':
    unittest.main()

文件读写过程中发生的输入输出错误

单元测试样例

class TestIOError(unittest.TestCase):
    def test_permission_denied(self):
        with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
            filename = tmpfile.name
            os.chmod(filename, 0o000)  # 设置文件权限为不可读不可写
            with self.assertRaises(IOError):
                main(['--sample_text', filename, '--reference_text', 'reference.txt', '--test_outcome', 'result.txt'])
            os.chmod(filename, 0o644)  # 恢复文件权限
            os.remove(filename)

if __name__ == '__main__':
    unittest.main()

8.测试结果





9.github地址:https://github.com/9650X/3222004684

标签:__,main,个人,similarity,text,项目,1h,文本
From: https://www.cnblogs.com/9650X/p/18412244

相关文章

  • 前端项目通过 Nginx 发布至 Linux,并通过 rewrite 配置访问后端接口
    〇、前言本文通过将arco框架的前端项目,部署至CentOS7,并访问同服务器的WebAPI接口,来简单演示一下,如何将前端项目发布至Linux系统。关于ASP.NETWebAPI发布至Linux的步骤,可以参考博主过往文章:https://www.cnblogs.com/hnzhengfy/p/18384107/webapi_centos。一、简......
  • 记一次 公司.NET项目部署在Linux环境压测时 内存暴涨分析
    一:背景讲故事公司部署在某碟上的项目在9月份压测50并发时,发现某个容器线程、内存非正常的上涨,导致功能出现了异常无法使用。根据所学,自己分析了下线程和内存问题,分析时可以使用lldb或者windbg,但是个人比较倾向于界面化的windbg,所以最终使用windbg开干。二:WinDbg分析到底是......
  • Codes 开源研发项目管理平台——创新的敏捷测试解决方案
    前言Codes是国内首款重新定义SaaS模式的开源项目管理平台,支持云端认证、本地部署、全部功能开放,并且对30人以下团队免费。它通过整合迭代、看板、度量和自动化等功能,简化测试协同工作,使敏捷测试更易于实施。并提供低成本的敏捷测试解决方案,如同步在线离线测试用例、流程化管......
  • (29-1)通过回测、ARIMA 和 GRU 预测股票价格:项目介绍+准备环境
    在本项目中通过一系列数据处理和模型训练步骤,旨在预测股票价格。首先,通过时间序列分析方法ARIMA对股票数据进行建模,以便了解其基本趋势。然后,使用GRU(门控递归单元)这一深度学习模型进行更复杂的预测,考虑了数据的序列特性。整个项目包括数据预处理、模型构建与训练、预测结果......
  • [项目] - Calc计算器
    前言各位师傅大家好,我是qmx_07,今天来尝试模拟windows下的clac计算器绘制计算器拖动工具箱的EditControl输入框、Button按钮制作计算器界面需要将EditControl输入框拉长,将多行、只读设置为True整体计算机的控件ID:IDD_DIALOG_CALC_CALC按照数字分别是:IDC_BUTTON_......
  • OpenAI 的 GPT-o1(GPT5)详细评论 OpenAI 的 Strawberry 项目具有博士级智能
    简介OpenAI的GPT-5又名Strawberry项目,又名GPT-o1,又名博士级LLM现已推出。几个月来一直备受关注,从结果来看,它不负众望。OpenAI-o1是一系列模型,旨在增强科学、编码和数学等复杂领域的问题解决能力。推荐文章《AI交通管理系列之使用Python进行现代路线优化最......
  • (不用互三)人工智能时代开启个人潜能探索的全新视角
    ......
  • 项目内部调用的远程接口开发
    编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中,实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用,而不是直接暴露给外部用户或前端。项目内部的远程接口统一放在api工程首先进入api编写接口,注意使用@FeignClient注解进入......
  • SpringBoot+Vue3项目邮箱验证码注册详细教程
    引言该篇文章是以SpringBoot+Vue3技术栈搭建的项目的邮箱注册登录流程,注册用户使用邮箱校验,使用qq邮箱发送验证码,并且把验证码存入Redis以备校验使用的详细介绍干货部分1.在SpringBoot项目的application.yaml文件中配置qq邮箱spring:#mail邮箱mail:#SMTP......
  • Halo 开发者指南——项目运行、构建
    准备工作环境要求OpenJDK17LTSNode.js20LTSpnpm9IntelliJIDEAGitDocker(可选)名词解释工作目录指Halo所依赖的工作目录,在Halo运行的时候会在系统当前用户目录下产生一个halo-next的文件夹,绝对路径为~/halo-next。里面通常包含下列目录或文件:​db​:存放H......