2

The accents of a spanish text dataframe are not properly encoded. I need to change all the à for the proper Spanish accent.

Here is my code

#dataframe that consists of two variables

 > discursos$text
[1] "Colombianos:Desde que llegamos a la Presidencia hace 15 meses, con decisión enfrentamos retos para construir juntos un país de oportunidades para todos.Esto lo lograremos convencidos de queomos más fuertes cuando ponemos al país primero. Cuando nos encontramos en la calle para conocernos y no para dividirnos.Son muchos los ejemplos en los que, dialogando, hemos llegado a puntos de encuentro.Este es un Gobierno que escucha. Y es necesario que, comoociedad, realicemos todos los esfuerzos para alcanzar lo que queremos como nación. Que todos, absolutamente todos, asumamos nuestro papel en la historia.Mañana Colombia tendrá una jornada de protestas convocada por diferentesectoresociales.Sabemos queon muchos los desafíos que como país tenemos queuperar. Queon válidas muchas de las aspiracionesociales y que tenemos problemas que a lo largo de la historia han envejecido mal.Por eso, trabajamos de día y de noche para encontrar alternativas yuperar los obstáculos, como lo hemos hecho como nación a lo largo de nuestra historia.Sin embargo, hay unos pocos que ven en este derecho a la protesta una oportunidad de agitación basada en mentiras, que lo único que buscan es generar división entre los colombianos.Ellose equivocan. Nuestro país no quiere volver al pasado y este Gobierno no va a permitir que algunos nos devuelvan a viejas confrontaciones que ya no tienen ningúnentido.Hoy comoiempre, todas las instituciones del Estado están alervicio de los ciudadanos.Estamos trabajando con los alcaldes, gobernadores y todas las autoridades del país, tomando las medidas necesarias para garantizar el orden público en todo el territorio nacional.Por eso, todos deben tener esta certeza: Al tiempo que reconocemos el valor de la protesta pacífica, también garantizaremos el orden.Y defenderemos con todas las herramientas que nos da nuestra Constitución el derecho de los colombianos a vivir con tranquilidad.Para eso está nuestra fuerza pública, la queiempre ha estado lista para proteger la vida, los bienes y la honra de todos los colombianos,in excepción alguna.Mañana confiamos en tener una jornada tranquila, en la que triunfe nuestra convicción de que podemos tener diferencias y expresarlas, peroobre todo convivir pacíficamente.Colombianos:Yo creo, como ustedes, que podemoser más como país, porque más Colombia es menos injusticia. Más Colombia es menos pobreza. Más Colombia es menos rencor.Pero paraer más, tenemos que construir con la verdad, con lealtad,obre cimientosólidos.Por eso nuestra invitación es a trabajar juntos, aer más juntos. Y a llevar a Colombia más lejos, juntos como nación.Yo los invito a que construyamos este país. Este país que anhelamos.Que entendamos que en democracia hay diferencias. Pero queon más importanteslas cosas que nos unen.Muchísimas gracias"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
[2] "Como Presidente de todos los colombianos, quiero hablarlesobre losucesos de este día.Hoy, a pesar de los actos de violencia, atribuibles a vándalos que no representan el espíritu de los marchantes colombianos, demostramos que este país puede ejercer las libertades individualesin vulnerar las libertades de los demás,Los hechosucedidos con posterioridad a la marchaon vandalismo puro y no obedecen a una expresión de la voluntad popular, nierán legitimados por el derecho a la protesta.No permitiremosaqueos y atentados contra la propiedad privada. Y vamos a aplicarles todo el peso de la ley.Quiero reconocer el trabajo conjunto de nuestra Fuerza Pública con los alcaldes y gobernadores y también con todas las autoridades, a lo largo y ancho del país, para garantizar el orden público.Con el concurso de todas las instituciones del Estado hemos actuado en todos los rincones del país.Como consecuencia del accionar coordinado las autoridades hanido capturados decenas de criminales.Rechazamos los daños que el vandalismo y el pillaje arrojaron el día de hoy. Estos delincuentes perjudicaron a personas ajenas a los odios que los inspiran.Desde el primer día ni gobierno heido claro. Ni el crimen ni la violencia tienen espacio en nuestraociedad.El crimen y la violenciaólo generan dolor, producen pobreza y Colombia entera lo repudia.Por eso quiero resaltar la actitud de la ciudadanía, que rechazó a los vándalos y dejó claro que para expresarse noe necesita acudir a la violencia.Los estudiantes, los trabajadores, los artistas y la gran mayoría de personas quee movilizaron lo hicieron con intención legítima de hacerentiru voz. Y los escuchamos.Colombianos:Hemos trabajadoin descanso en estos 15 meses y loeguiremos haciendo con más convicción que nunca.No me cansaré de decirlo:omos un Gobierno que escucha y que construye. Entendemos que la protesta pacífica es legítima en una democracia. Y que a lo largo de la historia hanurgido frustraciones que debemos resolver y que hemos venido atendiendo.Hoy hablaron los colombianos. Los estamos escuchando.El diálogoocial haido la bandera principal de este Gobierno. Debemos profundizarlo con todos losectores de nuestraociedad y acelerar nuestra agendaocial y de lucha contra la corrupción.En esta democracia fuerte yólida que todos atesoramos, estamos todos juntos.Nosotros estamos convencidos de que lo que hace una madre y un padre de familia enu hogar cuenta. Que lo que hacen los estudiantes y un docente en una institución educativa cuenta. Que lo que hacen un trabajador y un empresario cuenta.Y lo que damos todos, los que trabajamos de manera abnegada, comoomos todos los colombianos, lo que debemos hacer todos los días eseguir trabajando para que, unidos, transformemos nuestro país.He dado unas instrucciones muy precisas para que la Fuerza Pública garantice laeguridad, que estáiendo afectada por vándalos y criminales que quieren aterrorizar a nuestros ciudadanos.El día de hoy garantizamos y garantizaremos laeguridad para los que marcharon. Garantizamos laeguridad para quienes no lo hicieron.Y el pueblo colombiano puede tener laeguridad y tranquilidad de que no permitiremos que ningún vándalo, que ningún violento amedrente a laociedad. Yobre todo, que pretenda limitar nuestra capacidad de expresión.Somos un país fuerte y nunca dejaremos deerlo.Por eso, hoy más que nunca, vamos a trabajar todos unidos paraacar nuestro país adelante.Muchísimas gracias."

 #Creating the corpus based on dataframe
discursos_corpus <- Corpus(VectorSource(as.vector(discursos$text))) 
discursos_corpus <- tm_map(discursos_corpus, content_transformer(tolower))
discursos_corpus <- tm_map(discursos_corpus, removeWords, stopwords("spanish"))
discursos_corpus <- tm_map(discursos_corpus, content_transformer(removeNumbers))

#Creating the term matrix
dtm <- TermDocumentMatrix(discursos_corpus)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)

When I inspect the Terms of the matrix, I can see that the accents are not properly encoded. agitacià should be agitación

> dtm$dimnames$Terms[1:3]
[1] "absolutamente" "agitaciÃ"      "alcaldes" 

Trying to set up the encode to UTF-8

Using as_utf8 to select UTF-8 should help changing all the accents. However, it is not working. Here is the code

dtm$dimnames$Terms <- as_utf8(dtm$dimnames$Terms)

What should I do? Is there any chance I can use gsub to change all the "Ã" for the proper accent?

SecretAgentMan
  • 2,856
  • 7
  • 21
  • 41
Jose David
  • 139
  • 9
  • This looks like a known issue with the `tm` package. Perhaps this ([Character encoding with term document matrix](https://stackoverflow.com/questions/43456177/utf-8-character-encoding-with-termdocumentmatrix) will help? – ravic_ Nov 22 '19 at 15:09
  • Please try `Encoding(discursos$text) <- "UTF-8"` – phiver Nov 22 '19 at 15:46
  • @phiver I got `Error in `Encoding<-`(`*tmp*`, value = "UTF-8") : a character vector argument expected` as a result. Moreover, I think the encoding fails when I use the function `TermDocumentMatrix`; if I inspect `discursos_corpus$content`, all words are encoded alright. – Jose David Nov 22 '19 at 15:54
  • If the coding is correct in discursos_corpus$text before using tm and TermDocumentMatrix, I suggest using the package quanteda. That's the one I always use when dealing with Spanish and French text. Never lets me down. The only problem I sometimes encounter is making sure the original text is encoded correctly as utf-8 when reading it into R as I'm on a windows machine. But then setting the encoding correctly fixes that issue. – phiver Nov 22 '19 at 16:00
  • @phiver How can I make sure that the original text is encoded correctly as utf-8 when reading to R? I tried `quanteda` in another dataframe and it worked fine. However, I used it to this example and I am still having the same issue as with `tm` – Jose David Nov 22 '19 at 17:38
  • Unfortunately the answer is, it depends. Some functions like `readLines`, `read.table` (and most base R functions) have the option to set the encoding. `data.table::fread` as well. These help in ensuring that the data is read in correctly. Some other functions don't have this option and require extra steps by using the `Encoding` or `iconv` function. Functions from the readr package tend to work correctly. The package readtext also has the encoding option that needs to be set. Best practice, check the function you are using and always set the encoding. – phiver Nov 23 '19 at 15:21

0 Answers0