У меня есть два списка людей. В списке около 5000 имен, и каждый список находится в одном столбце Excel (поэтому я могу экспортировать его в CSV и т. Д.). Мне нужно сопоставить данные, чтобы я мог определить возможные совпадения, а также уровень достоверности для каждого совпадения.
В случае Списка А имена имеют согласованный формат - Фамилия, (запятая) Имя. В случае списка B формат имен не является согласованным. Иногда это Фамилия, (запятая) Имя. В других случаях это Фамилия - (тире) Имя. Иногда встречается несколько имен и т. Д. И т. Д.
Итак, я думаю, что мне нужно сделать токенизацию обоих списков, а затем перемещаться по каждому члену одного из списков (скажем, Список A). Для каждого члена списка я бы сравнил его токены с каждым членом второго списка (Список B). Я бы посчитал количество совпадений и выразил бы уверенность как пропорцию токенов в Участнике A, которые были сопоставлены с Участником B.
Это, очевидно, займет некоторое время. Токенизация не будет проблемой, но количество совпадающих операций равно количеству токенов в списке A, умноженному на число в списке B.
Мои основные навыки в PHP и MySQL. Я понимаю, что это не идеальная проблема для PHP, но я бы использовал команды и организацию очередей (которые поставляются вместе с Laravel), чтобы обойти такие вещи, как тайм-аут сеанса. У меня также есть разумные навыки работы с JS, поэтому я мог бы что-то там сделать (но я раньше не пробовал приложение для узла).
Другой альтернативой является то, что я мог бы использовать Neo4J, с которым у меня есть некоторый опыт.
Независимо от моих навыков, какой самый очевидный способ решить эту проблему? Например, я немного прочитал о Lucene, и мне интересно, стоит ли это исследовать.