Я нашел варианты по этой проблеме, но не могу предложить предложенные решения, работающие в моей ситуации.Я довольно новичок в R без какого-либо опыта программирования, так что, возможно, я просто упускаю что-то простое.Спасибо за любую помощь !!
У меня есть таблица данных со столбцом названий организаций, назовите ее Orgs $ OrgName.Иногда в строках есть орфографические ошибки, составляющие названия организации.У меня есть справочная таблица (импортированная из csv с общими орфографическими ошибками в одном столбце (орфография $ misspelt) и их исправления в другом столбце (орфография $ правильное).
Я хочу найти любые части строк OrgName, которыесопоставьте написание $ misspelt и замените только эти части на правильное написание $ правильное.
Я пробовал различные решения на основе mgsub, stri_replace_all_fixed, str_replace_all ( замена слов в строках была моей основной ссылкой)Но ничего не помогло, и все примеры, похоже, основаны на векторах, созданных вручную, используя vect1 <- c ("item1", "item2", item3 "), а не на поисковой таблице. </p>
Примермои данные:
OrgName
1: WAIROA DISTRICT COUNCIL
2: MANUTAI MARAE COMMITTEE
3: C S AUTOTECH LTD
4: NEW ZEALAND INSTITUTE OF SPORT
5: BRAUHAUS FRINGS
6: CHRISTCHURCH YOUNG MENS CHRISTIAN ASSOCIATION
Таблица поиска:
mispelt correct
1 ABANDONNED ABANDONED
2 ABERATION ABERRATION
3 ABILITYES ABILITIES
4 ABILTIES ABILITIES
5 ABILTY ABILITY
6 ABONDON ABANDON
(В первых нескольких строках имен организаций нет орфографических ошибок, нов наборе данных еще 57000+)
ОБНОВЛЕНИЕ: Вот то, что я попробовал, основываясь на обновлении второго ответа (пробуя это сначала, поскольку это проще).d, но, надеюсь, кто-нибудь увидит, в чем дело?
library("stringi")
Orgs <- data.frame(OrgNameClean$OrgNameClean)
head(Orgs)
head(OrgNameClean)
write.csv(spelling$mispelt,file = "wrong.csv")
write.csv(spelling$correctspelling,file = "corrected.csv")
patterns <- readLines("wrong.csv")
replacements <- readLines("corrected.csv")
head(patterns)
head(replacements)
for(i in 1:nrow(Orgs)) {
row <- Orgs[i,]
print(as.character(row))
#print(stri_replace_all_fixed(row, patterns, replacements,
vectorize_all=FALSE))
row <- stri_replace_all_regex(as.character(row), "\\b" %s+% patterns %s+%
"\\b", replacements, vectorize_all=FALSE)
print(row)
Orgs[i,] <- row
}
head(Orgs)
Orgsdt <- data.table(Orgs)
head(Orgsdt)
chckspellchk <- Orgsdt[OrgNameClean.OrgNameClean %like% "ENVIORNMENT",,]
##should return no rows if spelling correction worked
head(chckspellchk)
#OrgNameClean.OrgNameClean
#1: SMART ENVIORNMENTAL LTD
ОБНОВЛЕНИЕ 2: больше информации - в поиске орфографии есть пробелы, если это имеет значение:
> head(spelling[mispelt %like% " ",,])
mispelt correctspelling
1: COCA COLA COCA
2: TORTISE TORTOISE
> head(spelling[correctspelling %like% " "])
mispelt correctspelling
1: ABOUTA ABOUT A
2: ABOUTIT ABOUT IT
3: ABOUTTHE ABOUT THE
4: ALOT A LOT
5: ANYOTHER ANY OTHER
6: ASFAR AS FAR