Даны два списка, содержащие строки.
Один содержит названия организаций (в основном университетов) по всему миру, написанные не только по-английски, но и всегда с использованием латинского алфавита.
Другой список содержит в основном полные адреса, в которых могут встречаться строки (организации) из первого списка.
Пример:
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",
--> --
Я думал использовать какой-то «алгоритм расстояния» для вычисления сходства строк. Поскольку я не могу просто искать организацию в адресе, просто выполняя if address in organisation
, потому что в разных местах он может быть написан немного по-разному. Итак, мое первое предположение заключалось в использовании модуля difflib. Особенно функция difflib.get_close_matches()
для выбора для каждого адреса ближайшей строки из списка организаций. Но я не совсем уверен, что результаты будут достаточно точными. Хотя я не знаю, насколько высоко я должен установить соотношение, которое должно быть мерой сходства.
Прежде чем тратить слишком много времени на пробу модуля difflib, я подумал о том, чтобы спросить здесь более опытных людей, правильный ли это подход или есть ли более подходящий инструмент/способ решения моей проблемы. Спасибо!
PS: мне не нужно оптимальное решение.