Я пытаюсь использовать "stringdist" для нечеткого сопоставления названий компаний между двумя фреймами данных, но это не очень хорошо работает, что можно сделать?

У меня есть фрейм данных с 5 миллионами различных названий компаний, многие из них относятся к одной и той же компании, написанной по-разному или с ошибками. В качестве примера я использую название компании Amminex, а затем пытаюсь связать его с 5 миллионами названий компаний:

Companylist <- data.frame(Companies=c('AMMINEX'))

Это мой большой список названий компаний, которые я открываю:

Biglist <- data.frame(name=c(Biglist[,]))

Я поместил AMMINEX и 5 миллионов компаний в одну матрицу:

Matches <- expand.grid(Companylist$Companies,Biglist$name.Companiesnames)

Измените имена столбцов:

names(Matches) <- c("Companies","CompaniesList")

Я использую stringdist с методом косинус:

Matches$dist <- stringdist(Matches$Companies,Matches$CompaniesList, method="cosine")

Я удаляю все расстояния выше 0,2, чтобы избавиться от плохих совпадений:

Matches_trimmed <- Matches[!(Matches$dist>0.2),]

Я сортирую по столбцу расстояния, чтобы лучшие совпадения отображались сверху:

Matches_trimmed <- Matches_trimmed[with(Matches_trimmed, order(dist)), ]

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

Первый ряд хорош, но затем появляется куча плохих совпадений, прежде чем, наконец, внизу я получаю совпадения "AMMINEX AS", которые хороши.

Это действительно не работает для меня. Можно ли как-то улучшить это нечеткое сопоставление или использовать другой метод для достижения лучших результатов? Может быть, метод, который будет смотреть порядок, в котором буквы появляются в строках?

0 ответов

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