python - 比较列表中的项目并找到相似性
问题描述
我想比较两个列表中的项目(请参见下文)。我正在寻找有关这些项目的相似性。例如,我有这个项目b_list
:
http://www.ilcorrieredellanotte.it
这类似于Corriere della Sera
from g_list
。预期的输出是:
(ilcorrieredellanotte, corrieredellasera) = (score of similarity)
另外:https://www.ilmattoquotidiano.it, http://www.ilfattoquotidaino.it
, 和https://ilquotidaino.wordpress.com
from与fromb_list
类似。输出的一个例子是:il fatto quotidiano
g_list
(ilmattoquotidiano, ilfattoquotidiano) = 90
'c'
(
它们应该只(ilfattoquotidaino, ilfattoquotidiano) = 95
为
(ilquotidaino, ilfattoquotidiano) =60
(它缺少' fatto
')
(分数90、95、60仅作为示例)
我正在考虑使用
Ratios = [process.extract(x,g_list) for x in b_list]
result = list()
for ratio in Ratios:
for match in ratio:
if match[1] !=100:
result.append(match)
break
但输出给了我一些不同的东西(例如,它不包含"Il fatto quotidiano"
在列表中)。我认为这是因为我将 url 列表与以空格分隔的单词进行比较,并且区分大小写。任何建议将不胜感激。谢谢
列表:
b_list =["http://notiziepericolose.blogspot.com","http://www.ilcorrieredellanotte.it","https://www.ilmattoquotidiano.it","http://ioco.altervista.org/blog/","http://www.ilmessaggio.it","http://www.ilcorriere.cloud","http://www.ilfattoquotidaino.it","https://ilquotidaino.wordpress.com","http://www.liberogiornale.com", ]
b_list=[re.sub(r"https?://(www\.)?", r'', a) for a in black_list]
g_list=["Corriere della Sera","la Repubblica","La Gazzetta dello Sport","Corriere dello Sport-Stadio","Italia Oggi","il Giornale","Tuttosport","il Fatto Quotidiano","Il Mattino","Libero","Leggo"]
g_list =[x.lower() for x in g_list]
解决方案
这是Levenshtein
算法的工作,即:
from similarity.levenshtein import Levenshtein
levenshtein = Levenshtein()
print(levenshtein.distance('corrieredellasera', 'ilcorrieredellanotte'))
# 7
或者,如果您更喜欢使用不同的字符串相似度算法,则JaroWinkler
:
from similarity.jarowinkler import JaroWinkler
jarowinkler = JaroWinkler()
print(jarowinkler.similarity('corrieredellasera', 'ilcorrieredellanotte'))
# 0.7221288515406162
笔记:
- 像往常一样安装
pip install strsim
strsim
包含许多其他字符串相似性算法- 完整文档可在此处获得
推荐阅读
- npoi - NPOI - 确定段落前的标题
- python - 使用带有手动 bin 的 Python 绘制直方图
- image - 为什么带有结构化数据的 AMP 需要至少 1200 像素宽的图片?
- xpath - Xquery 递归
- windows - IE11 兼容性问题
- reactjs - 如何对使用继承而不是使用玩笑和酶的组合的反应组件进行单元测试?
- javascript - 如何在 Electron 中注册多个全局快捷方式?
- opencart - 在 Opencart 1.5.6.4 中上传图片时出现问题
- firebase - 为 Firebase 添加价值 (AngularFire)
- c++ - 为什么代码不能返回正确的值?