Нечеткое совпадение строк с 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 "может оказаться полезным.

Другие вопросы по тегам