Как определить, являются ли две строки идентичными (похожими), если строка 2 содержит часть информации из строки 1?

#python #pandas

Вопрос:

Надеюсь, у вас сегодня хороший день. В настоящее время я работаю с чрезвычайно грязным фреймом данных, содержащим Имя, Фамилию и Отчество. Одна из проблем, которую я пытаюсь решить, выглядит следующим образом:

имя фамилия
Джеймс Агню Связь
Джеймс Связь

Еще одна похожая проблема, которую я пытаюсь решить, выглядит следующим образом:

имя фамилия
Варенье Связь
Джеймс Связь

С нетерпением жду ваших идей.

Спасибо!

Редактировать: К вашему сведению, чтобы упростить жизнь, у меня уже есть данные, сгруппированные по уникальному адресу. Итак, две строки будут иметь один адрес, еще две или три строки будут иметь другой адрес и так далее.

Комментарии:

1. Используйте df.drop_duplicates('Address') , чтобы сохранить только один экземпляр (Имя, Фамилия)?

2. Не так-то просто. У меня есть другие строки с аналогичной проблемой (пожалуйста, см. Мой другой пост). Я мог бы отбросить строки, которые являются чистыми дубликатами, а затем отбросить строки, которые являются перекрестными дубликатами.

3. Я пытался найти решение, но это занимает слишком много времени, потому что вам нужно проверить комбинации NxN. Извините 🙁

Ответ №1:

Если мы просто хотим проверить, что оба элемента в строке 2 содержатся в соответствующих элементах строки 1, нам просто нужен один оператор if

 row1 = ["James", "Bond"]
row2 = ["Jam", "Bo"]

if row2[0] in row1[0] and row2[1] in row1[1]:   
    print("Similar!")
else:
    print("Not Similar!")
 

Если вы хотите проверить противоположный случай (что ro1 находится в строке 2), просто создайте второй оператор if, в котором термины «строка 1» и «строка 2» поменялись местами.

Комментарии:

1. Что, если мы хотим проверить наличие подобных случаев во всем фрейме данных?

2. @IsaacA Вам придется сравнивать каждую строку с каждой другой строкой. Вложенный цикл for, проходящий через каждую возможную комбинацию из 2 строк, будет работать.

Ответ №2:

Это не такая простая проблема. Чтобы проверить, являются ли 2 строки «похожими», вы должны ввести алгоритм неевклидова расстояния. Я имею в виду, что вы должны определить функцию подобия и «понять» расстояние между строками.

медуза-это библиотека, созданная для решения этих проблем

Другой подход состоит в том, чтобы собрать все имена и связать их с тезаурусом имен, подобных этому

Немного поискав, я нашел это

надежда может помочь