比较列表中的项目并找到相似之处

时间:2020-04-25 23:32:04

标签: python similarity fuzzywuzzy

我想比较两个列表中的项目(请参见下文)。我正在寻找有关物品的相似之处。例如,我有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.comb_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

2 个答案:

答案 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
  • 完整的文档可用here

答案 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']]]