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,符合预期。!
四、单元测试与覆盖率测试
执行单元测试命令:
pytest test_main.py -v --cov=main
测试结果:共10组测试用例,8个通过,2个失败。
失败用例分析:
- test_2_diff:两段差异极大的文本,程序计算相似度0.56,预期相似度小于0.1,断言失败。
- test_8_all_punct:输入只有标点符号的文本,程序计算相似度0.88,预期值为0,断言失败。
原因分析:当前文本预处理逻辑没有过滤标点符号。当文本只有标点、或者两段文本内容完全无关但标点重合较多时,分词和哈希处理会出现偏差,说明本程序在极端文本场景下鲁棒性不足,后续可以增加过滤标点、空白字符的预处理步骤优化。
五、性能分析(cProfile)
使用Python内置cProfile工具,对核心函数calc_similarity进行性能剖析,统计函数调用次数与耗时,定位程序性能瓶颈。
执行命令:
python test_profile.py
从输出结果可以看到各个底层函数调用次数与时间开销。可以发现大部分耗时集中在jieba分词、字符串处理、哈希运算环节,文本越长,分词占用时间会明显增加。

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

浙公网安备 33010602011771号