Нечеткое совпадение строк с agrep()
Я сопоставляю список названий компаний против себя с помощью R и agrep(), потому что данные были неверно сохранены в устаревшей системе - нет 4-й нормальной формы, компании были записаны на том же уровне, что и клиенты, что означает новую запись компании для каждый новый клиент, что приводит к множеству разных названий компаний для одной компании - что прекрасно работает во многих случаях.
Иногда, особенно для коротких строк, я получаю - по крайней мере для меня - странные совпадения, например (ABC - первое название компании):
ABC ABAXIS Europe GmbH
ABC ABB Europe
ABC ABB Group
ABC ABB Stotz Kontakt GmbH
ABC ABM Financial News
ABC ABN AMRO Bank NV
ABC AC Klöser GmbH
ABC ACCBank
ABC ACEA S.p.A.
Я использую agrep()
со следующими параметрами:
agrep(vector1, vector2, value = TRUE, ignore.case = FALSE, max.distance = 0.01)
Есть ли другой способ, кроме максимального расстояния для настройки agrep()
или лучший способ сделать это?
заранее спасибо
1 ответ
Для аналогичной проблемы я использовал второй метод, описанный в этой статье: http://bigdata-doctor.com/fuzzy-string-matching-survival-skill-tackle-unstructured-information-r/
Он сопоставляет каждый регистр с наиболее похожим регистром, что, конечно же, не оптимально, если для вас проблема с ложными срабатываниями.
Кроме того, вам может пригодиться эта функция для удаления пробелов до и после имен:
trim <- function (x) gsub("^\\s+|\\s+$", "", x) #Defining function that returns string w/o leading or trailing whitespace
Я также использовал функцию removewords() из пакета "tm". В вашем случае удаление ABC "может оказаться полезным.