Replacing text with words from another file

Asked

Viewed 68 times

2

it should be easy, but I’m not finding a solution! Here’s the thing:

Arquivo1 - with texts:

Doc    Texto
doc1   Isto é um teste para substituições de palavras.
doc2   As casas são parecidas.

Arquivo2 - Reference:

Termo          Termo_pai
é              ser
substituições  substituição
palavras       palavra
as             a
casas          casa
são            ser
parecidas      parecida

How do I replace the words in Archive1 with the words found in Archive2 in the "Term" column by the "Thermo_parent" column"?

The result would be:

Archiv11:

Doc Texto

doc1 This was a test for substituting of word.

doc2 To home was similar.

That is, the words in bold, Arquivo1, were found in Arquivo2 in the column "Term" and replaced by the words that are in the column "Termo_pai".

Could someone help?

2 answers

2

Only with R base can it be done as follows.

pat <- paste0("\\b", Arquivo2$Termo, "\\b")
for(i in seq_along(pat))
  Arquivo1$Texto <- gsub(pat[i], Arquivo2$Termo_pai[i], Arquivo1$Texto)

Arquivo1
#   Doc                                           Texto
#1 doc1 Isto ser um teste para substituição de palavra.
#2 doc2                           As casa ser parecida.

DICE.

Arquivo1 <- read.table(text = "
Doc    'Texto'
doc1   'Isto é um teste para substituições de palavras.'
doc2   'As casas são parecidas.'
", header = TRUE, stringsAsFactors = FALSE)

Arquivo2 <- read.table(text = "
Termo          Termo_pai
é              ser
substituições  substituição
palavras       palavra
as             a
casas          casa
são            ser
parecidas      parecida
", header = TRUE, stringsAsFactors = FALSE)
  • Thank you @Rui Barradas! I did the test with the example and it works, but when I apply my "Archive2" with 88,000 records, it takes a long time and I don’t see the changes. The file is a dataframe. I wonder what it might be?

2

Another solution would be to use the package stringr

options(stringsAsFactors = FALSE)

Arquivo1 <- read.table(text = "
                       Doc    'Texto'
                       doc1   'Isto é um teste para substituições de palavras.'
                       doc2   'As casas são parecidas.'
                       ", header = TRUE)

Arquivo2 <- read.table(text = "
                       Termo          Termo_pai
                       é              ser
                       substituições  substituição
                       palavras       palavra
                       as             a
                       casas          casa
                       são            ser
                       parecidas      parecida
                       ", header = TRUE)


library(stringr)

for (i in 1:nrow(Arquivo1)){
  for (j in 1:nrow(Arquivo2)){
   x = str_replace_all(string = str_extract_all(Arquivo1$Texto[i], "\\w+")[[1]],
                    pattern = paste0("\\b", Arquivo2$Termo[j], "\\b"),
                    replacement = Arquivo2$Termo_pai[j])
   Arquivo1$Texto[i] = paste(x, collapse=" ")
  }
}

Arquivo1
#   Doc                                           Texto
#1 doc1 Isto ser um teste para substituição de palavra.
#2 doc2                           As casa ser parecida.
  • Thank you @Fernandes! I did the test with the example and it works, but when I apply my "Archive2" with 88,000 records, it takes a long time and I don’t see the changes. The file is a dataframe. I wonder what it might be?

  • Unfortunately I do not have this answer, only having its database in hand to assess what is going on. Do a dput of your dataframe, and post the output, maybe we can help.

  • How to do a dput?

  • Use this command: dput(Archive2)

  • I don’t think you can post here, because the file has 800,000 notes. I can share on a Dropbox, it can be?

  • I don’t know the rules of the site on this.

Show 1 more comment

Browser other questions tagged

You are not signed in. Login or sign up in order to post.