比较列表中的项目并找到相似性
Compare items from lists and find similarity
我想比较两个列表中的项目(请参见下文)。我正在寻找物品的相似性。例如,我有来自 b_list
的这个项目:
http://www.ilcorrieredellanotte.it
类似于 g_list
中的 Corriere della Sera
。预期输出为:
(ilcorrieredellanotte, corrieredellasera) = (score of similarity)
此外:https://www.ilmattoquotidiano.it, http://www.ilfattoquotidaino.it
和 b_list
中的 https://ilquotidaino.wordpress.com
类似于 g_list
中的 il fatto quotidiano
。输出示例为:
(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
contains many other string similarity algorithms
- 完整文档可用here
这是一个简单的 difflib 示例。可以根据需要轻松调整截止参数以获得或多或少的灵敏度。
import difflib
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", ]
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"]
save_dict = {}
save_list = []
for g in g_list:
matches_list = difflib.get_close_matches(g, possibilities=b_list, cutoff=0.35)
print(g, (matches_list))
if len(matches_list) > 0:
save_dict[g] = matches_list
save_list.append([g, matches_list])
print(save_dict)
{'Corriere della Sera': ['http://www.ilcorrieredellanotte.it'],
'Corriere dello Sport-Stadio': ['http://www.ilcorrieredellanotte.it',
'http://www.ilcorriere.cloud'],
'il Giornale': ['http://www.liberogiornale.com'],
'il Fatto Quotidiano': ['https://www.ilmattoquotidiano.it',
'http://www.ilfattoquotidaino.it',
'https://ilquotidaino.wordpress.com']}
print(save_list)
[['Corriere della Sera', ['http://www.ilcorrieredellanotte.it']],
['Corriere dello Sport-Stadio',
['http://www.ilcorrieredellanotte.it', 'http://www.ilcorriere.cloud']],
['il Giornale', ['http://www.liberogiornale.com']],
['il Fatto Quotidiano',
['https://www.ilmattoquotidiano.it',
'http://www.ilfattoquotidaino.it',
'https://ilquotidaino.wordpress.com']]]
我想比较两个列表中的项目(请参见下文)。我正在寻找物品的相似性。例如,我有来自 b_list
的这个项目:
http://www.ilcorrieredellanotte.it
类似于 g_list
中的 Corriere della Sera
。预期输出为:
(ilcorrieredellanotte, corrieredellasera) = (score of similarity)
此外:https://www.ilmattoquotidiano.it, http://www.ilfattoquotidaino.it
和 b_list
中的 https://ilquotidaino.wordpress.com
类似于 g_list
中的 il fatto quotidiano
。输出示例为:
(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
contains many other string similarity algorithms- 完整文档可用here
这是一个简单的 difflib 示例。可以根据需要轻松调整截止参数以获得或多或少的灵敏度。
import difflib
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", ]
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"]
save_dict = {}
save_list = []
for g in g_list:
matches_list = difflib.get_close_matches(g, possibilities=b_list, cutoff=0.35)
print(g, (matches_list))
if len(matches_list) > 0:
save_dict[g] = matches_list
save_list.append([g, matches_list])
print(save_dict)
{'Corriere della Sera': ['http://www.ilcorrieredellanotte.it'],
'Corriere dello Sport-Stadio': ['http://www.ilcorrieredellanotte.it',
'http://www.ilcorriere.cloud'],
'il Giornale': ['http://www.liberogiornale.com'],
'il Fatto Quotidiano': ['https://www.ilmattoquotidiano.it',
'http://www.ilfattoquotidaino.it',
'https://ilquotidaino.wordpress.com']}
print(save_list)
[['Corriere della Sera', ['http://www.ilcorrieredellanotte.it']],
['Corriere dello Sport-Stadio',
['http://www.ilcorrieredellanotte.it', 'http://www.ilcorriere.cloud']],
['il Giornale', ['http://www.liberogiornale.com']],
['il Fatto Quotidiano',
['https://www.ilmattoquotidiano.it',
'http://www.ilfattoquotidaino.it',
'https://ilquotidaino.wordpress.com']]]