基于textdistance计算文本相似度

textdistance是Python的第三方库,用于计算文本之间的相似度或距离。它提供了30+个算法,简单易用。

安装

bash 复制代码
pip install textdistance

# 使用扩展库,提高性能
pip install "textdistance[extras]"

使用

python 复制代码
import textdistance

# 计算编辑距离
distance = textdistance.levenshtein.distance("如何更换花呗绑定银行卡", "花呗更改绑定银行卡")
print("编辑距离:", distance)

# 计算余弦相似度
similarity = textdistance.cosine.similarity("如何更换花呗绑定银行卡", "花呗更改绑定银行卡")
print("余弦相似度:", similarity)

# 计算 Jaccard 系数
coefficient = textdistance.jaccard("如何更换花呗绑定银行卡", "花呗更改绑定银行卡")
print("Jaccard 系数:", coefficient)

# 计算 Hamming 距离
distance = textdistance.hamming.distance("如何更换花呗绑定银行卡", "花呗更改绑定银行卡")
print("Hamming 距离:", distance)

结果:

复制代码
编辑距离: 5
余弦相似度: 0.8040302522073697
Jaccard 系数: 0.6666666666666666
Hamming 距离: 10

应用场景

拼写检查

在拼写检查中,可以使用编辑距离等算法来比较单词之间的相似度,从而找出可能的正确拼写。

python 复制代码
import textdistance

# 拼写检查
word = "发愤图强"
possible_spellings = ["发奋图强", "发奋图", "发愤图"]

for spelling in possible_spellings:
    distance = textdistance.levenshtein.distance(word, spelling)
    if distance <= 1:
        print("可能的正确拼写:", spelling)

结果

复制代码
可能的正确拼写: 发奋图强
可能的正确拼写: 发愤图

文档相似度计算

在信息检索和推荐系统中,经常需要计算文档之间的相似度,以便为用户提供相关的信息或推荐内容。

python 复制代码
import textdistance

# 文档相似度计算
doc1 = "Python is a programming language"
doc2 = "Python is used for web development"
doc3 = "Java is a programming language"

similarity1 = textdistance.cosine.similarity(doc1, doc2)
similarity2 = textdistance.cosine.similarity(doc1, doc3)

print("文档1和文档2的余弦相似度:", similarity1)
print("文档1和文档3的余弦相似度:", similarity2)
复制代码
文档1和文档2的余弦相似度: 0.6063390625908325
文档1和文档3的余弦相似度: 0.8391463916782737

数据清洗

在数据清洗过程中,可以使用 Hamming 距离等算法来比较数据条目之间的相似度,从而找出相似但不完全相同的数据。

python 复制代码
import textdistance

# 数据清洗
data = ["配偶", "原配", "元配", "老婆", "夫人", "爱人"]

for i in range(len(data)):
    for j in range(i+1, len(data)):
        distance = textdistance.hamming.distance(data[i], data[j])
        if distance <= 1:
            print("相似但不完全相同的数据:", data[i], data[j])

结果:

复制代码
相似但不完全相同的数据: 原配 元配
相似但不完全相同的数据: 夫人 爱人
python 复制代码
import textdistance

# 姓名匹配
name1 = "李建国"
name2 = "张建国"
name3 = "王爱国"

coefficient1 = textdistance.jaccard.normalized_similarity(name1, name2)
coefficient2 = textdistance.jaccard.normalized_similarity(name1, name3)

print("姓名1和姓名2的Jaccard系数:", coefficient1)
print("姓名1和姓名3的Jaccard系数:", coefficient2)

结果

python 复制代码
姓名1和姓名2的Jaccard系数: 0.5
姓名1和姓名3的Jaccard系数: 0.19999999999999996

textdistance 提供了丰富多样的文本比较算法和距离度量方法,可以满足各种不同的文本比较需求。

相关链接

源码

相关推荐
TechWayfarer4 小时前
查询IP所在地的3种方案:从API到离线库,风控场景怎么选?
开发语言·网络·python·网络协议·tcp/ip
程序员榴莲4 小时前
Python 单例模式
开发语言·python·单例模式
hh.h.5 小时前
昇腾CANN ops-transformer 仓的 MC2 算子:MoE 模型的全到全通信
python·深度学习·transformer·cann
NiceCloud喜云6 小时前
Claude Files API 深入:从上传、复用到配额管理的工程化指南
android·java·数据库·人工智能·python·json·飞书
专注VB编程开发20年6 小时前
windows下python自带标准库 ≈ 70% 纯.py 源码,30% .pyd(DLL)
python
萌新小码农‍6 小时前
人工智能数学基础+python实例(人工智能学习day3)
开发语言·人工智能·python
毋语天8 小时前
FastAPI 进阶实战:请求体、文件上传、响应模型与数据校验
python·fastapi·api开发·数据校验·pydantic
ZhengEnCi9 小时前
09a-斯坦福 CS336 作业一:BPE 分词器
python·神经网络
测试员周周9 小时前
【Appium 系列】第18节-重试与容错 — 移动端测试的稳定性保障
人工智能·python·功能测试·ui·单元测试·appium·测试用例