首页 > 解决方案 > 比较列表中的项目并找到相似性

问题描述

我想比较两个列表中的项目(请参见下文)。我正在寻找有关这些项目的相似性。例如,我有这个项目b_list

http://www.ilcorrieredellanotte.it

这类似于Corriere della Serafrom g_list。预期的输出是:

(ilcorrieredellanotte, corrieredellasera) = (score of similarity)

另外:https://www.ilmattoquotidiano.it, http://www.ilfattoquotidaino.it, 和https://ilquotidaino.wordpress.comfrom与fromb_list类似。输出的一个例子是:il fatto quotidianog_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]

标签: pythonsimilarityfuzzywuzzy

解决方案


这是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

笔记:


推荐阅读