SimHash文本相似度计算

Github 仓库链接:https://github.com/Beauty-LilY/-

一、项目简介

本次作业基于SimHash算法实现文本相似度计算。程序接收两个文本文件路径作为输入,对文本做分词、哈希、降维处理,计算两段文本的海明距离并转化为相似度,最终将结果写入输出文本文件ans.txt。

二、运行环境

在线运行平台:GitHub Codespaces
Python版本:Python3.14
依赖库:jieba(中文分词)、pytest、pytest-cov(单元测试与覆盖率统计)
安装依赖命令:

pip install jieba pytest pytest-cov -i [https://pypi.tuna.tsinghua.edu.cn/simple](https://pypi.tuna.tsinghua.edu.cn/simple)

三、主程序运行

测试文本

orig.txt:今天是星期天,天气晴,今天晚上我要去看电影。
orig_add.txt:今天是周天,天气晴朗,我晚上要去看电影。

执行命令:

python main.py orig.txt orig_add.txt ans.txt

运行结果:输出文件ans.txt中得到相似度 0.77。
两段文本语义高度相近,SimHash计算得到相似度0.77,符合预期。!73b24bc8afcd98c8a258267583e34ffe

四、单元测试与覆盖率测试

执行单元测试命令:

pytest test_main.py -v --cov=main

测试结果:共10组测试用例,8个通过,2个失败。
失败用例分析:

  1. test_2_diff:两段差异极大的文本,程序计算相似度0.56,预期相似度小于0.1,断言失败。
  2. test_8_all_punct:输入只有标点符号的文本,程序计算相似度0.88,预期值为0,断言失败。

原因分析:当前文本预处理逻辑没有过滤标点符号。当文本只有标点、或者两段文本内容完全无关但标点重合较多时,分词和哈希处理会出现偏差,说明本程序在极端文本场景下鲁棒性不足,后续可以增加过滤标点、空白字符的预处理步骤优化。73b24bc8afcd98c8a258267583e34ffe

五、性能分析(cProfile)

使用Python内置cProfile工具,对核心函数calc_similarity进行性能剖析,统计函数调用次数与耗时,定位程序性能瓶颈。

执行命令:

python test_profile.py

从输出结果可以看到各个底层函数调用次数与时间开销。可以发现大部分耗时集中在jieba分词、字符串处理、哈希运算环节,文本越长,分词占用时间会明显增加。

a57d44f8a11708df6cac42ead644d35f

六、总结

本次项目完成SimHash文本相似度程序开发,利用jieba完成中文分词,实现文本哈希编码、海明距离换算相似度。单元测试验证了大部分常规文本场景下程序可以正常工作,但在纯标点、完全无关文本这类极端用例中存在缺陷,需要完善文本清洗逻辑。
借助cProfile性能分析工具,可以直观看到代码各部分开销,帮助后续对程序进行性能优化。

posted @ 2026-09-13 12:46  刘心怡  阅读(15)  评论(0)    收藏  举报