基于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 提供了丰富多样的文本比较算法和距离度量方法,可以满足各种不同的文本比较需求。

相关链接

源码

相关推荐
Cigaretter71 天前
Day 38 早停策略和模型权重的保存
python·深度学习·机器学习
sunywz1 天前
【JVM】(2)java类加载机制
java·jvm·python
Silence_Jy1 天前
GPU架构
python
kwg1261 天前
本地搭建 OPC UA MCP 服务
python·agent·mcp
belldeep1 天前
python:mnist 数据集下载,parse
python·numpy·mnist
柠檬叶子C1 天前
【Python】解决 No module named ‘imp‘ 问题 | Python3 中废弃的 imp 模块
开发语言·python
我想吃烤肉肉1 天前
wait_until=“domcontentloaded“ 解释
开发语言·前端·javascript·爬虫·python
weixin199701080161 天前
废旧物资 item_search - 按关键字搜索商品列表接口对接全攻略:从入门到精通
数据库·python
海棠AI实验室1 天前
第二章 从脚本到工程:进阶学习的 5 个方法论(可维护性/可复现/可评估/可扩展/可交付)
python·数据
学习3人组1 天前
CentOS 系统下 ModelScope 模型下载的默认目录
linux·python·centos