Как отобразить наиболее «похожие» строки из одного списка в другой в python?

Даны два списка, содержащие строки.

  1. Один содержит названия организаций (в основном университетов) по всему миру - не только написанные на английском языке, но и всегда с использованием латинского алфавита.

  2. Другой список содержит в основном полные адреса, в которых могут встречаться строки (организации) из первого списка.

Пример:

addresses = [
             "Department of Computer Science, Katholieke Universiteit Leuven, Leuven, Belgium",
             "Machine Learning and Computational Biology Research Group, Max Planck Institutes     Tübingen, Tübingen, Germany 72076",
             "Department of Computer Science and Engineering, University of Washington, Seattle, USA 98185",
             "Knowledge Discovery Department, Fraunhofer IAIS, Sankt Augustin, Germany 53754",    
             "Computer Science Department, University of California, Santa Barbara, USA 93106",
             "Fraunhofer IAIS, Sankt Augustin, Germany",
             "Department of Computer Science, Cornell University, Ithaca, NY",
             "University of Wisconsin-Madison"
            ]

organisations = [
                 "Catholic University of Leuven"
                 "Fraunhofer IAIS"
                 "Cornell University of Ithaca"
                 "Tübingener Max Plank Institut"
                ]

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

"Department of Computer Science, Katholieke Universiteit Leuven, Leuven, Belgium",
--> Catholic University of  Leuven
"Machine Learning and Computational Biology Research Group, Max Planck Institutes     Tübingen, Tübingen, Germany 72076",
--> Max Plank Institut Tübingen
"Department of Computer Science and Engineering, University of Washington, Seattle, USA 98185",
--> --
"Knowledge Discovery Department, Fraunhofer IAIS, Sankt Augustin, Germany 53754",
--> Fraunhofer IAIS 
"Computer Science Department, University of California, Santa Barbara, USA 93106",
"Fraunhofer IAIS, Sankt Augustin, Germany",
--> Fraunhofer IAIS
"Department of Computer Science, Cornell University, Ithaca, NY"
--> "Cornell University of Ithaca",
"University of Wisconsin-Madison",
--> --

Я подумал о том, чтобы использовать какой-то «алгоритм дисектанса» для вычисления сходства строк. Поскольку я не могу просто найти организацию по адресу, просто выполнив , если адрес в организации , потому что это может быть написано немного по-разному в разных местах. Итак, мое первое предположение было использование модуля difflib. В частности, функция difflib.get_close_matches () для выбора для каждого адреса ближайшей строки из списка организаций. Но я не совсем уверен, что результаты будут достаточно точными. Хотя я не знаю, насколько высоко я должен установить соотношение швов, которое будет мерой сходства.

Прежде чем потратить слишком много времени на опробование модуля diffflib, я подумал о том, чтобы спросить у более опытных людей, правильный ли это подход или есть ли более подходящий инструмент / способ решения моей проблемы. Спасибо!

PS: Оптимальное решение мне не нужно.

8
задан Aufwind 8 December 2011 в 14:48
поделиться