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

相关链接

源码

相关推荐
流云一号14 分钟前
Python实现贪吃蛇二
开发语言·python
听风吹等浪起37 分钟前
NLP实战(3):RNN英文名国家分类
人工智能·python·rnn·深度学习
啊阿狸不会拉杆1 小时前
数据结构-限定性线性表 - 栈与队列
java·c语言·数据结构·c++·python·算法
杂学者1 小时前
python办公自动化------word文件的操作
python·word
资深设备全生命周期管理1 小时前
火影 遇上 python Baby_Brother_GGY
开发语言·python·pygame
开开心心就好2 小时前
功能丰富的PDF处理免费软件推荐
java·windows·python·pdf·电脑·生活·软件需求
不想学密码的程序员不是好的攻城狮2 小时前
TGCTF web
python·网络安全·web·ctf
mahuifa2 小时前
pyqt环境配置
python·qt·pycharm·pyqt·环境配置
小白学大数据2 小时前
Python自动化爬虫:Scrapy+APScheduler定时任务
开发语言·爬虫·python·自动化
水深00安东尼2 小时前
GAT-GRAPH ATTENTION NETWORKS(论文笔记)
论文阅读·python