我想比较两个列表中的项目(请参见下文)。我正在寻找有关物品的相似之处。例如,我有b_list
中的此项:
http://www.ilcorrieredellanotte.it
与Corriere della Sera
中的g_list
类似。预期的输出将是:
(ilcorrieredellanotte, corrieredellasera) = (score of similarity)
此外:https://www.ilmattoquotidiano.it, http://www.ilfattoquotidaino.it
的{{1}}和https://ilquotidaino.wordpress.com
与b_list
的{{1}}相似。输出示例如下:
il fatto quotidiano
(它们仅应与g_list
不同)
(ilmattoquotidiano, ilfattoquotidiano) = 90
(它们仅在元音之间有所不同,元音已被另一个元音切换)
'c'
(缺少“ (ilfattoquotidaino, ilfattoquotidiano) = 95
”)
(仅以得分90、95、60为例)
我正在考虑使用
(ilquotidaino, ilfattoquotidiano) =60
,但是输出给了我一些不同的信息(例如,列表中未包含fatto
)。我认为这是因为我正在将网址列表与用空格分隔且区分大小写的单词进行比较。
任何建议将不胜感激。谢谢
列表:
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
答案 0 :(得分:0)
这是Levenshtein
算法的工作,即:
var img;
var angle = 0;
var x = 0;
var y = 0;
function setup() {
createCanvas(displayWidth, 725);
img = loadImage('fly2.png');
}
function rotate_and_draw_image(img_x, img_y, img_width, img_height, img_angle){
imageMode(CENTER);
translate(img_x+img_width/2, img_y+img_width/2);
rotate(PI/180*angle);
image(img, 0, 0, img_width, img_height);
rotate(-PI / 180 * img_angle);
translate(-(img_x+img_width/2), -(img_y+img_width/2));
imageMode(CORNER);
}
function draw() {
background(255);
// this image stays still in top left corner
image(img, 0, 0, 150, 150);
angle += 0.5;
x+=1;
if (x >width){
x = 0;
}
y -=1;
if (y < 0){
y = height;
}
// moves image to desired location (defining top left corner),
// rotates and draws image.
rotate_and_draw_image(x, y, 150, 150, angle);
// this image also stays constant in bottom right corner
image(img, width-150, height-150, 150, 150);
}
或者,如果您更喜欢使用其他字符串相似性算法,请JaroWinkler
:
from similarity.levenshtein import Levenshtein
levenshtein = Levenshtein()
print(levenshtein.distance('corrieredellasera', 'ilcorrieredellanotte'))
# 7
注意:
from similarity.jarowinkler import JaroWinkler
jarowinkler = JaroWinkler()
print(jarowinkler.similarity('corrieredellasera', 'ilcorrieredellanotte'))
# 0.7221288515406162
strsim
包含many other string similarity algorithms 答案 1 :(得分:0)
这是一个简单的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']]]