data cleaning with R language - r

I have to build an access database from a txt file (that I obtained from a raw pdf file).
This in order to feed some stuff to a free quiz making software (quizfaber.com)
This is my input file:
001. A norma del disposto di cui al co. 2, art. 36, Reg. Ord. Penit., negli istituti penitenziari come sono disciplinate le modalità relative allo svolgimento dei vari servizi predisposti per i detenuti e per gli internati?
A)Con singoli provvedimenti del direttore dell'istituto.
B)Con regolamento interno dell'istituto.
C)Con singoli atti del provveditore regionale competente.
002. A norma del disposto di cui al co. 7 , art. 47-quinquies, Ord. Penit., la detenzione domiciliare speciale può essere concessa anche al padre detenuto?
A)Sì, alle stesse condizioni previste per la madre, in alternativa alla madre.
B)Sì, alle stesse condizioni previste per la madre, ma solo se la madre è deceduta e non vi è modo di affidare la prolead altri che al padre.
C)Sì, alle stesse condizioni previste per la madre, se la madre è deceduta o impossibilitata e non vi è modo di affidarela prole ad altri che al padre.
003. A norma del disposto di cui al co. 8-bis, art. 656, c.p.p. (Esecuzione delle pene detentive), quando il pubblico ministero può disporre la rinnovazione della notifica dell'avviso dell'ordine di esecuzione e del decreto di sospensione?
A)Solo quando è sicuramente provato che il condannato non abbia avuto effettiva conoscenza dell'avviso.
B)In nessun caso.
C)Quando è provato o appare probabile che il condannato non abbia avuto effettiva conoscenza dell'avviso.
004. Quale sanzione disciplinare di cui all'art. 39, Ord. Penit., non può avere durata massima di quindici giorni?
A)Isolamento durante la permanenza all'area aperta.
B)Esclusione dalle attività in comune.
C)Esclusione dalle attività ricreative e sportive.
005. In materia di "alimentazione" l'art. 9, Ord. Penit. dispone, tra l'altro, che:
A)Il vitto è somministrato, di regola, in locali all'uopo destinati.
B)I prezzi di vendita devono essere almeno inferiori del 30% rispetto a quelli comunemente praticati nel luogo in cui èsito l'istituto.
C)Il servizio di vettovagliamento di regola non è gestito direttamente dall'amministrazione penitenziaria.
006. A norma del disposto di cui all'art. 76, Reg. Ord. Penit., quale ricompensa può essere concessa dal consiglio di disciplina, ai detenuti e agli internati, se ricorrano i presupposti?
A)Encomio.
B)Nessuna delle altre risposte è corretta; tutte le ricompense sono concesse dal direttore dell'istituto penitenziario o dalmagistrato di sorveglianza.
C)Proposta di licenza.
007. A norma del disposto di cui al co. 11, art. 11, Ord. Penit., nel caso di diagnosi anche sospetta di malattia contagiosa devono essere messi in atto tutti gli interventi di controllo per evitare insorgenza di casi secondari, compreso l'isolamento; chi deve essere immediatamente informato?
A)Il difensore della persona contagiata.B)Il famigliari della persona contagiata.C)Il direttore dell'istituto.
008. A norma del disposto di cui all'art. 40, Ord. Penit., quale tra le seguenti non è una sanzione disciplinare deliberata al consiglio di disciplina?
A)Isolamento durante la permanenza all'area aperta.
B)Esclusione da attività in comune.
C)Richiamo.
009. In materia di "alimentazione" l'art. 9, Ord. Penit. dispone, tra l'altro, che:
A)Una rappresentanza di soggetti non detenuti o internati controlla l'applicazione delle tabelle e la preparazione delvitto.
B)Tutti i detenuti hanno la stessa alimentazione; l'istituto non può tener conto di eventuali diverse richieste anche sepreviste dal credo religioso.
C)Il servizio di vettovagliamento è di regola gestito direttamente dall'amministrazione penitenziaria.
010. Al condannato ammesso al regime di semilibertà possono essere concesse a titolo di premio una o più licenze di durata non superiore nel complesso a 45 giorni l'anno. Chi provvede alla concessione?
A) Il tribunale di sorveglianza. B) Il direttore dell'istituto penitenziario. C) Il magistrato di sorveglianza.
Here are the two requested output txt files
FIRST
1; 1; 1; 001. A norma del disposto di cui al co. 2, art. 36, Reg. Ord. Penit., negli istituti penitenziari come sono disciplinate le modalità relative allo svolgimento dei vari servizi predisposti per i detenuti e per gli internati?; Y
2; 1; 1; 002. A norma del disposto di cui al co. 7 , art. 47-quinquies, Ord. Penit., la detenzione domiciliare speciale può essere concessa anche al padre detenuto?; Y
3; 1; 1; 003. A norma del disposto di cui al co. 8-bis, art. 656, c.p.p. (Esecuzione delle pene detentive), quando il pubblico ministero può disporre la rinnovazione della notifica dell'avviso dell'ordine di esecuzione e del decreto di sospensione?; Y
4; 1; 1; 004. Quale sanzione disciplinare di cui all'art. 39, Ord. Penit., non può avere durata massima di quindici giorni?; Y
5; 1; 1; 005. In materia di "alimentazione" l'art. 9, Ord. Penit. dispone, tra l'altro, che:; Y
6; 1; 1; 006. A norma del disposto di cui all'art. 76, Reg. Ord. Penit., quale ricompensa può essere concessa dal consiglio di disciplina, ai detenuti e agli internati, se ricorrano i presupposti?; Y
7; 1; 1; 007. A norma del disposto di cui al co. 11, art. 11, Ord. Penit., nel caso di diagnosi anche sospetta di malattia contagiosa devono essere messi in atto tutti gli interventi di controllo per evitare insorgenza di casi secondari, compreso l'isolamento; chi deve essere immediatamente informato?; Y
8; 1; 1; 008. A norma del disposto di cui all'art. 40, Ord. Penit., quale tra le seguenti non è una sanzione disciplinare deliberata al consiglio di disciplina?; Y
9; 1; 1; 009. In materia di "alimentazione" l'art. 9, Ord. Penit. dispone, tra l'altro, che:; Y
10; 1; 1; 010. Al condannato ammesso al regime di semilibertà possono essere concesse a titolo di premio una o più licenze di durata non superiore nel complesso a 45 giorni l'anno. Chi provvede alla concessione?; Y
AND SECOND
1;A)Con singoli provvedimenti del direttore dell'istituto.; N; 1
1;B)Con regolamento interno dell'istituto.; N; 2
1;C)Con singoli atti del provveditore regionale competente.; N; 3
2;A)Sì, alle stesse condizioni previste per la madre, in alternativa alla madre.; N; 4
2;B)Sì, alle stesse condizioni previste per la madre, ma solo se la madre è deceduta e non vi è modo di affidare la prolead altri che al padre.; N; 5
2;C)Sì, alle stesse condizioni previste per la madre, se la madre è deceduta o impossibilitata e non vi è modo di affidarela prole ad altri che al padre.; N; 6
3;A)Solo quando è sicuramente provato che il condannato non abbia avuto effettiva conoscenza dell'avviso.; N; 7
3;B)In nessun caso.; N; 8
3;C)Quando è provato o appare probabile che il condannato non abbia avuto effettiva conoscenza dell'avviso.; N; 9
4;A)Isolamento durante la permanenza all'area aperta.; N; 10
4;B)Esclusione dalle attività in comune.; N; 11
4;C)Esclusione dalle attività ricreative e sportive.; N; 12
5;A)Il vitto è somministrato, di regola, in locali all'uopo destinati.; N; 13
5;B)I prezzi di vendita devono essere almeno inferiori del 30% rispetto a quelli comunemente praticati nel luogo in cui èsito l'istituto.; N; 14
5;C)Il servizio di vettovagliamento di regola non è gestito direttamente dall'amministrazione penitenziaria.; N; 15
6;A)Encomio.; N; 16
6;B)Nessuna delle altre risposte è corretta; tutte le ricompense sono concesse dal direttore dell'istituto penitenziario o dalmagistrato di sorveglianza.; N; 17
6;C)Proposta di licenza.; N; 18
7;A)Il difensore della persona contagiata.; N; 19
7;B)Il famigliari della persona contagiata.; N; 20
7;C)Il direttore dell'istituto.; N; 21
8;A)Isolamento durante la permanenza all'area aperta.; N; 22
8;B)Esclusione da attività in comune.; N; 23
8;C)Richiamo.; N; 24
9;A)Una rappresentanza di soggetti non detenuti o internati controlla l'applicazione delle tabelle e la preparazione delvitto.; N; 25
9;B)Tutti i detenuti hanno la stessa alimentazione; l'istituto non può tener conto di eventuali diverse richieste anche sepreviste dal credo religioso.; N; 26
9;C)Il servizio di vettovagliamento è di regola gestito direttamente dall'amministrazione penitenziaria.; N; 27
10;A) Il tribunale di sorveglianza.; N; 28
10;B) Il direttore dell'istituto penitenziario.; N; 29
10;C) Il magistrato di sorveglianza.; N; 30
In fact I have to create this two access tables, questions and answers
And then I'll set the relations as this-:
I don't know well how to start in R language to perform this task.
Firstable I should check if the input file contains any semicolon and trasform to something else (_ for example)
Second I should add all the stuff in order to represent all the fields of the table. The field values are fixed except for the indexes that are progressive
Third I should deal with the case when the three answers are placed on the same line.
I beg Your pardon for the long post and all Your suggestions will be welcome.

Your first output file is the questions list. Your second output file is the answers list. Simply put, your main objective is to separate the questions from the answers from your input file, and then add aesthetics to meet the desired output formats.
In the solution below, output1 is the desired question information, and output2 is the desired answer information. I added your stated goals in the commented code to kind of help show how each part is done.
library(stringr) # used for string manipulations (required for `str_extract_all()` below)
# read input file
f <- readLines(file("input_file.txt", open = "r"))
# Firstable I should check if the input file contains any semicolon and trasform[sic] to something else (_ for example)
f <- gsub(";", "_", f)
# Second I should add all the stuff in order to represent all the fields of the table. The field values are fixed except for the indexes that are progressive
f_questions <- f[grepl("^[0-9]", f)] # selects lines that start with a digit (because they are questions)
output1 <- paste0(1:length(f_questions), "; 1; 1; ", f_questions, "; Y")
f_answers <- f[grepl("^[A-C]", f)] # selects lines that start with capital letters "A" through "C" (because they are answers)
# Third I should deal with the case when the three answers are placed on the same line.
f_answers <- unlist(str_extract_all(f_answers, ".\\)[^.]+.")) # makes one answer per string (assuming all answers contain and end with a period)
output2 <- paste0(rep(1:(length(f_answers)/3), each = 3), ";", f_answers, "; N; ", 1:length(f_answers))
> output1
[1] "1; 1; 1; 001. A norma del disposto di cui al co. 2, art. 36, Reg. Ord. Penit., negli istituti penitenziari come sono disciplinate le modalità relative allo svolgimento dei vari servizi predisposti per i detenuti e per gli internati? ; Y"
[2] "2; 1; 1; 002. A norma del disposto di cui al co. 7 , art. 47-quinquies, Ord. Penit., la detenzione domiciliare speciale può essere concessa anche al padre detenuto? ; Y"
[3] "3; 1; 1; 003. A norma del disposto di cui al co. 8-bis, art. 656, c.p.p. (Esecuzione delle pene detentive), quando il pubblico ministero può disporre la rinnovazione della notifica dell'avviso dell'ordine di esecuzione e del decreto di sospensione? ; Y"
[4] "4; 1; 1; 004. Quale sanzione disciplinare di cui all'art. 39, Ord. Penit., non può avere durata massima di quindici giorni? ; Y"
[5] "5; 1; 1; 005. In materia di \"alimentazione\" l'art. 9, Ord. Penit. dispone, tra l'altro, che: ; Y"
[6] "6; 1; 1; 006. A norma del disposto di cui all'art. 76, Reg. Ord. Penit., quale ricompensa può essere concessa dal consiglio di disciplina, ai detenuti e agli internati, se ricorrano i presupposti? ; Y"
[7] "7; 1; 1; 007. A norma del disposto di cui al co. 11, art. 11, Ord. Penit., nel caso di diagnosi anche sospetta di malattia contagiosa devono essere messi in atto tutti gli interventi di controllo per evitare insorgenza di casi secondari, compreso l'isolamento_ chi deve essere immediatamente informato? ; Y"
[8] "8; 1; 1; 008. A norma del disposto di cui all'art. 40, Ord. Penit., quale tra le seguenti non è una sanzione disciplinare deliberata al consiglio di disciplina? ; Y"
[9] "9; 1; 1; 009. In materia di \"alimentazione\" l'art. 9, Ord. Penit. dispone, tra l'altro, che: ; Y"
[10] "10; 1; 1; 010. Al condannato ammesso al regime di semilibertà possono essere concesse a titolo di premio una o più licenze di durata non superiore nel complesso a 45 giorni l'anno. Chi provvede alla concessione? ; Y"
> output2
[1] "1;A)Con singoli provvedimenti del direttore dell'istituto.; N; 1"
[2] "1;B)Con regolamento interno dell'istituto.; N; 2"
[3] "1;C)Con singoli atti del provveditore regionale competente.; N; 3"
[4] "2;A)Sì, alle stesse condizioni previste per la madre, in alternativa alla madre.; N; 4"
[5] "2;B)Sì, alle stesse condizioni previste per la madre, ma solo se la madre è deceduta e non vi è modo di affidare la prolead altri che al padre.; N; 5"
[6] "2;C)Sì, alle stesse condizioni previste per la madre, se la madre è deceduta o impossibilitata e non vi è modo di affidarela prole ad altri che al padre.; N; 6"
[7] "3;A)Solo quando è sicuramente provato che il condannato non abbia avuto effettiva conoscenza dell'avviso.; N; 7"
[8] "3;B)In nessun caso.; N; 8"
[9] "3;C)Quando è provato o appare probabile che il condannato non abbia avuto effettiva conoscenza dell'avviso.; N; 9"
[10] "4;A)Isolamento durante la permanenza all'area aperta.; N; 10"
[11] "4;B)Esclusione dalle attività in comune.; N; 11"
[12] "4;C)Esclusione dalle attività ricreative e sportive.; N; 12"
[13] "5;A)Il vitto è somministrato, di regola, in locali all'uopo destinati.; N; 13"
[14] "5;B)I prezzi di vendita devono essere almeno inferiori del 30% rispetto a quelli comunemente praticati nel luogo in cui èsito l'istituto.; N; 14"
[15] "5;C)Il servizio di vettovagliamento di regola non è gestito direttamente dall'amministrazione penitenziaria.; N; 15"
[16] "6;A)Encomio.; N; 16"
[17] "6;B)Nessuna delle altre risposte è corretta_ tutte le ricompense sono concesse dal direttore dell'istituto penitenziario o dalmagistrato di sorveglianza.; N; 17"
[18] "6;C)Proposta di licenza.; N; 18"
[19] "7;A)Il difensore della persona contagiata.; N; 19"
[20] "7;B)Il famigliari della persona contagiata.; N; 20"
[21] "7;C)Il direttore dell'istituto.; N; 21"
[22] "8;A)Isolamento durante la permanenza all'area aperta.; N; 22"
[23] "8;B)Esclusione da attività in comune.; N; 23"
[24] "8;C)Richiamo.; N; 24"
[25] "9;A)Una rappresentanza di soggetti non detenuti o internati controlla l'applicazione delle tabelle e la preparazione delvitto.; N; 25"
[26] "9;B)Tutti i detenuti hanno la stessa alimentazione_ l'istituto non può tener conto di eventuali diverse richieste anche sepreviste dal credo religioso.; N; 26"
[27] "9;C)Il servizio di vettovagliamento è di regola gestito direttamente dall'amministrazione penitenziaria.; N; 27"
[28] "10;A) Il tribunale di sorveglianza.; N; 28"
[29] "10;B) Il direttore dell'istituto penitenziario. N; 29"
[30] "10;C) Il magistrato di sorveglianza.; N; 30"
Diving into the code
Most of these functions are base functions that are worth becoming familiar with. They are likely covered in R introduction courses.
The more complicated part in the code is the regular expression used inside str_extract_all(), so I will explain that here.
str_extract_all(f_answers, ".\\)[^.]+.") extracts all occurrences of the regular expression pattern ".\\)[^.]+." from the input strings f_answers.
".\\)[^.]+." indicates that the pattern starts with a wild card character (expressed as .) followed by a closing parenthesis (expressed as \\)). The string can then match one or more of any character, except the period, until it reaches the period ([^.]+.). (FYI, the last part can also be coded as [^\\.]+\\. to prevent confusion of the period (\\.) with the wild card character.)

Related

Search in R list function

I made the following function in order to output only sentences containing ALL of the words in "keywords":
ricerca <- function(sentences,keywords){
for(i in 1:length(keywords)){
sentences <- lapply(sentences, function(x) grep(keywords[i], x, value = TRUE))
sentences <-unlist(sentences[lengths(sentences) > 0])
return (sentences)
}
}
I used unlist because the input sentences are in a get_sentences (sentimentr) list.
Here is a bit of the list:
> frasi_negative[4:5]
[[1]]
[1] "Per la musica non è male ma per le telefonate è completamente unutile."
[2] "L'altro interlocutore non mi sente."
[3] "Quindi mi costringe a disabilitare il bluetooth per rispondere."
[4] "Il problema ulteriore è che dopo pochi secondi il bluetooth si ricollega automaticamente alle cuffie."
[5] "Quindi bisogna disabilitarlo nuovamente e cosi via."
[6] "Da impazzire ..."
[7] "Altro problema è che a volte riponendo le cuffiette nella custodia non si spegnevano."
[8] "Insomma prodotto molto economico e scarsamente funzionale."
[9] "Lo sconsiglio."
[[2]]
[1] "L'auricolare sinistro non si è mai connesso all'altro."
[2] "Provando a seguire le istruzioni oppure le dritte trovate in risposta alle domande qui su amazon non ho risolto, inoltre il lampeggiare delle lucine non corrispondeva mai a quello che era indicato."
[3] "Le ho rimandate indietro."
[4] "Peccato perchè il suono della destra era ottimo e il prodotto molto carino"
When I try using my function
ricerca(frasi_negative, c("audio","pessimo"))
The output shows sentences containing even only one of the keywords.
> ricerca(frasi_negative, c("audio","pessimo"))
[1] "Audio basso, bassi praticamente inesistenti se non aumentandoli a dismisura dal audio manager del telefono."
[2] "Correndo, a seconda della posizione del telefono, l'audio scompare brevemente."
Can you tell me why this happens, and how to solve this issue?
Thank you very much.
UPDATE:
> dput(frasi_negative[4:5])
list(c("Per la musica non è male ma per le telefonate è completamente unutile.",
"L'altro interlocutore non mi sente.", "Quindi mi costringe a disabilitare il bluetooth per rispondere.",
"Il problema ulteriore è che dopo pochi secondi il bluetooth si ricollega automaticamente alle cuffie.",
"Quindi bisogna disabilitarlo nuovamente e cosi via.", "Da impazzire ...",
"Altro problema è che a volte riponendo le cuffiette nella custodia non si spegnevano.",
"Insomma prodotto molto economico e scarsamente funzionale.",
"Lo sconsiglio."), c("L'auricolare sinistro non si è mai connesso all'altro.",
"Provando a seguire le istruzioni oppure le dritte trovate in risposta alle domande qui su amazon non ho risolto, inoltre il lampeggiare delle lucine non corrispondeva mai a quello che era indicato.",
"Le ho rimandate indietro.", "Peccato perchè il suono della destra era ottimo e il prodotto molto carino"
))
You can achieve this in almost only 1 line of Base-R code
sentences <- unlist(frasi_negative)[lengths(frasi_negative) > 0]
sentences[which(apply(sapply(keywords,grepl,sentences),1,all))]
example with keywords <- c("il","della")
outpu [1] "Peccato perchè il suono della destra era ottimo e il prodotto molto carino"
Edit: The which function is not needed, we can simplify to:
sentences[apply(sapply(keywords,grepl,sentences),1,all)]
Data:
a <- c("Per la musica non è male ma per le telefonate è completamente unutile.","L'altro interlocutore non mi sente.","Quindi mi costringe a disabilitare il bluetooth per rispondere.","Il problema ulteriore è che dopo pochi secondi il bluetooth si ricollega automaticamente alle cuffie.","Quindi bisogna disabilitarlo nuovamente e cosi via.","Da impazzire ...","Altro problema è che a volte riponendo le cuffiette nella custodia non si spegnevano.","Insomma prodotto molto economico e scarsamente funzionale.","Lo sconsiglio.")
b<- c("L'auricolare sinistro non si è mai connesso all'altro.","Provando a seguire le istruzioni oppure le dritte trovate in risposta alle domande qui su amazon non ho risolto, inoltre il lampeggiare delle lucine non corrispondeva mai a quello che era indicato.","Le ho rimandate indietro.","Peccato perchè il suono della destra era ottimo e il prodotto molto carino")
frasi_negative <- list(a,b)
Base R solution:
# Function; ricera => function
ricera <- function(sentences, keywords){
keywords <- unique(keywords)
matches <- lapply(sentences, function(w){
matched <- lapply(keywords, function(x){grep(x, w, value = TRUE)})
Reduce(function(y, z){intersect(y, z)}, matched)
}
)
Filter(Negate(is.null), unlist(matches))
}
# Application: charater vector => stdout console
ricera(text_list, c("problema", "non"))
Data:
text_list <- list(c("Per la musica non è male ma per le telefonate è completamente unutile.",
"L'altro interlocutore non mi sente.",
"Quindi mi costringe a disabilitare il bluetooth per rispondere.",
"Il problema ulteriore è che dopo pochi secondi il bluetooth si ricollega automaticamente alle cuffie.",
"Quindi bisogna disabilitarlo nuovamente e cosi via.",
"Da impazzire ...",
"Altro problema è che a volte riponendo le cuffiette nella custodia non si spegnevano.",
"Insomma prodotto molto economico e scarsamente funzionale.",
"Lo sconsiglio."),
c("L'auricolare sinistro non si è mai connesso all'altro.",
"Provando a seguire le istruzioni oppure le dritte trovate in risposta alle domande qui su amazon non ho risolto, inoltre il lampeggiare delle lucine non corrispondeva mai a quello che era indicato.",
"Le ho rimandate indietro.",
"Peccato perchè il suono della destra era ottimo e il prodotto molto carino"))

Searching for sentences in get_sentences

I am analysing some amazon reviews. At the current step of my analysis, I'd like to take the sentences written in reviews that have less than two stars. I have done that, applied get sentences, and wrote this function in order to search for words inside the sentences and print out only those containing all of the words:
ricerca <- function(sentences,keyword){
found <- lapply(sentences, function(x) grep(keyword, x, value = TRUE))
found <-found[lengths(found) > 0]
return(found)
The sentences are made in the following way:
> class(frasi_negative)
[1] "get_sentences" "get_sentences_character" "list"
> frasi_negative[1:2]
[[1]]
[1] "Auricolari comodissimi."
[2] "Restano incollati alle orecchie e non cadono in nessuna situazione."
[3] "Suono limpido, pulito."
[4] "Bassi consistenti."
[5] "La durata della batteria è più che soddisfacente (io li ho usati anche per 4 ore di fila senza problemi)."
[6] "Decisamente soddisfatto."
[7] "Li ricomprerei."
[8] "Amazon perfetta come al solito."
[9] "AGGIORNAMENTO RECENSIONE!!!!!"
[10] "- Dopo un mese di utilizzo non è più possibile ricaricare le cuffie."
[11] "Non danno più segni di vita."
[12] "Delusissimo."
[13] "Non mi sarei mai aspettato una fine così."
[14] "Peccato perché il prodotto era praticamente perfetto."
[[2]]
[1] "Al mio cellulare (Xiaomi Redmi Note 5) si mostrano singolarmente, separate, quando cerco di connetterle."
[2] "O si connette alla destra, o alla sinistra, e in ogni caso il suono poi esce dalle casse del cellulare (nonostante aver dato alle cuffie tutti i permessi)."
[3] "Non capisco perché, data che la prima connessione era andata come si deve; spente e riaccese, hanno iniziato a comportarsi così."
[4] "Ho provato a riavviare sia loro che cellulare, a rimetterle nella scatoletta e ritoglierle, ma il problema persiste."
[5] "Non penso c'entri il mio cellulare (mai avuto problemi con prodotti simili), in ogni caso effettuo reso con rimborso."
When I try searching for a word, it seems to work (even if the output is really horrible):
> found<-ricerca(frasi_negative, "qualità")
> found[1:3]
[[1]]
[1] "Pessima qualità."
[2] "La qualità delle chiamate telefoniche è assolutamente pessima (il proprio interlocutore non riceve in modo chiaro la nostra voce, dunque, risultano inutilizzabili come aurocolari telefonici)."
[[2]]
[1] "imbarazzanti non so la gente qui come fanno a dargli 5 stelle, l'unica cosa che mi viene in mente e che non hanno mai provato un paio di cuffie decenti, qualità dell audio pessima si sente basso e male , l'unica cosa buona e che la batteria si comporta bene - a distanza di 20 cm ogni tanto si scollegano provato con piu dispositivi sicuramente richiedo il rimborso davvero pessime"
[[3]]
[1] "La qualità costruttiva è ottima, l'accoppiamento è avvenuto in maniera facile ed immediata, e la durata è ottima."
But when I try searching for a few words (as example c("quality","bad")), it only searches for the first word, and gets me lot of warnings.
I have no idea about how to adapt this function, so thanks to all of you in advance.
Library: sentimentr
UPDATE:
Thanks for the answers, but it seems that in both the function you guys published it outputs all sentences containing at least one of the two words. I just want to see those which contain both. Is there a way to do it?
The below function should iterate through an inputted vector of keywords:
ricerca <- function(sentences,keywords){
for(i in 1:length(keywords){
found <- lapply(sentences, function(x) grep(keywords[i], x, value = TRUE))
found <-found[lengths(found) > 0]
return(found)
}
}
I hope this helps!
Try combining the keyword using paste as one string.
ricerca <- function(sentences,keyword){
found <- lapply(sentences, function(x)
grep(paste0(keyword, collapse = "|"), x, value = TRUE))
found <-found[lengths(found) > 0]
return(found)
}

Extract sentences containing specific word(s)

I have a get_sentences (sentimentr) list, and need to extract only those sentences containing specific words.
This is how the data looks like:
> class(frasi_negative)
[1] "get_sentences" "get_sentences_character" "list"
> frasi_negative[2:3]
[[1]]
[1] "Al mio cellulare (Xiaomi Redmi Note 5) si mostrano singolarmente, separate, quando cerco di connetterle."
[2] "O si connette alla destra, o alla sinistra, e in ogni caso il suono poi esce dalle casse del cellulare (nonostante aver dato alle cuffie tutti i permessi)."
[3] "Non capisco perché, data che la prima connessione era andata come si deve; spente e riaccese, hanno iniziato a comportarsi così."
[4] "Ho provato a riavviare sia loro che cellulare, a rimetterle nella scatoletta e ritoglierle, ma il problema persiste."
[5] "Non penso c'entri il mio cellulare (mai avuto problemi con prodotti simili), in ogni caso effettuo reso con rimborso."
[[2]]
[1] "Comprate due mesi fa."
[2] "All'inizio funzionavano perfettamente, ma dopo qualche settimana hanno iniziato a disconnettersi tra loro di tanto in tanto."
[3] "qualche giorno fa estraendo la sinistra dall'astuccio magnetico è saltata la saldatura che la teneva chiusa e questo è il risultato."
[4] "Usandole in chiamata rendono un suono non limpido."
[5] "Il suono è accettabile ma nulla di speciale."
[6] "Ormai sono inutilizzabili."
[7] "Per il prezzo mi aspettavo un prodotto migliore e più duraturo (avendo già provato auricolari wireless della stessa fascia di prezzo di altri brand)"
As an example, if I search "wireless", only the [[2]][7] element should show up.
How can I achieve this?
Thank you in advance.
You can try to iterate over the list using lapply and return the sentence which matches a particular keyword using grep .
keyword <- 'wireless'
lapply(frasi_negative, function(x) grep(keyword, x, value = TRUE))
We can use str_detect
library(purrr)
library(stringr)
keyword <- 'wireless'
map(frasi_negative, ~ .x[str_detect(.x, keyword)])

R sweave don't print figure

I'm using R Sweave, but r does not generate the figure. There may be a conflict in the packages or not. Which is the error.See line 73, in section * {Exercise I}, notice that in the chunk I am using fig = TRUE. Attached my code.
\documentclass[10 pt]{article}
\usepackage[spanish,activeacute]{babel}
\usepackage[latin1]{inputenc}
\usepackage{amsmath, amssymb, amsthm, latexsym, graphics, graphpap, layout, multicol, enumerate}
\usepackage{graphicx,color}
\DeclareGraphicsExtensions{.eps}
\usepackage{geometry}
\usepackage{pstricks-add}
\geometry{verbose}
\usepackage{movie15}
\usepackage{hyperref}
\usepackage{fancyhdr}
\hypersetup{bookmarksopen,bookmarksnumbered,colorlinks,linkcolor=blue,legalpaper,pagebackref,pdftitle=Parcial 1 Varias Variables,pdfauthor=Wilmer Pineda,pdfsubject=álgebra,pdfkeywords=álgebra}
\parindent=0pt
\definecolor {este}{gray}{0.9}
\definecolor{otro}{rgb}{0.56,0.65,0.76}
\definecolor{light-gray}{gray}{0.93}
\renewcommand\tablename{Tabla}
\theoremstyle{plain}
\newtheorem{prop}{Proposición}[section]
\newtheorem{teo}[prop]{Teorema}
\newtheorem{cor}[prop]{Corolario}
\newtheorem{lem}[prop]{Lema}
\theoremstyle{definition}
\newtheorem{defi}{Definición}[section]
\newtheorem{ejem}{Ejemplo}[section]
\theoremstyle{remark}
\newtheorem*{nota}{Nota}
\newtheorem*{notac}{Notación}
\makeatletter
\newenvironment{tablaqui}
{\def\#captype{table}}
{}
\newenvironment{figuraqui}
{\def\#captype{figure}}
{}
\makeatother
\pagestyle{fancy}
\headheight=80pt %para cambiar el tamaño del encabezado
\fancyhead[L] %la "L" indica a la izquierda
{
\begin{minipage}{2cm}
%\includegraphics[width=\textwidth]{LogoEAN.eps}
\end{minipage}
}
\fancyhead[C] %la "C" indica al centro
{
\textbf
{Parcial 4}} %textsf es un tipo de letra
\fancyhead[R] %la "R" indica a la derecha
{\begin{minipage}{5cm}
\begin{flushright}
Wilmer Pineda\\
Fundamentos Sistemas Continuos Gr. 1\\
13 de Junio de 2017
\end{flushright}
\end{minipage}
}
%\title{\textbf{Parcial 2}}
%\author{Carlos Isaac Zainea\\ Álgebra Lineal \\ Universidad Francisco José de Caldas}
%\date{25 de Abril de 2013}
\begin{document}
\SweaveOpts{concordance=TRUE}
Este es un examen \textbf{individual}. No se permite el uso de libros, apuntes o cualquier medio electrónico. Los celulares deben estar \textbf{apagados} durante todo el examen. Las respuestas deben estar justificadas.
\section*{Ejercicio I}
Encuentre la longitud de la gráfica $x=\frac{1}{3}\sqrt{y}(y-3)$ en el intervalo [1,9].
\begin{figure}[h]
\caption{Gráfica ejercicio 1.}
<<fig=TRUE,echo=FALSE>>=
y=seq(1,9,0.01)
x=(1/3)*sqrt(y)*(y-3)
plot(x,y,type="l")
#
\end{figure}
\section*{Ejercicio II}
Encuentre el área de la superficie que se forma al girar la gráfica de $x=\frac{1}{3}(y^2+2)^{3/2}$ en el intervalo $1\leq y \leq 2$ alrededor del eje $x$.
\section*{Ejercicio III}
Calcular las coordenadas del centro de masa del área comprendida entre las parábolas $y^2=x$ y $x^2=-8y$.
\section*{Ejercicio IV}
Un tanque tiene la forma de un cono circular invertido con longitud $10m$ y radio de la base $4m$. Se llena de agua hasta una altura de $8m$. Encuentre el trabajo requerido para vaciar el tanque bombeando toda el agua a la parte superior del tanque. (La densidad del agua es $1000kg/m^3$)
\section*{Ejercicio V}
Encuentre el volumen del sólido obtenida al girar la región comprendida entre $y=1+\sec(x)$ y $y=3$ alrededor de la recta $y=1$.
\section*{Ejercicio VI}
Las curvas de las funciones seno y coseno se intersecan infinitas veces, dando lugar a regiones de igual área. Calcular el área de una de dichas regiones.
\end{document}
To be specific this is the line that generates the error
\begin{figure}[h]
\caption{Gráfica ejercicio 1.}
<<fig=TRUE,echo=FALSE>>=
y=seq(1,9,0.01)
x=(1/3)*sqrt(y)*(y-3)
plot(x,y,type="l")
#
\end{figure}
The problem is that you are using .eps extension, so you should use the following code.
\DeclareGraphicsExtensions{.eps}
\begin{figure}[h]
\caption{Gráfica ejercicio 1.}
<<fig=TRUE,echo=FALSE, pdf=FALSE, eps=TRUE, png=TRUE>>=
y=seq(1,9,0.01)
x=(1/3)*sqrt(y)*(y-3)
plot(x,y,type="l")
#
\end{figure}

R- delete accents in string

I have a library with html files and in files_dep I have the list of them. I need to convert the text stored in them to a table, but the issue is that they have accents and ñ. I wrote this to read it and works ok.
for (i in files_dep) {
text<-readLines(i,encoding="UTF-8")
aa<-paste(text, collapse=' ')
if (grepl(empieza,aa) & grepl(termina,aa)) {
nota=gsub(paste0("(^.*", empieza, ")(.*?)(", termina, ".*)$"), "\\2", aa)
#nota<-iconv(nota,to="ASCII//TRANSLIT")
df<-rbind(df, data.frame(fileName=i, nota=nota)) }}
I can read things like:
Este sábado enfrentarán a un equipo.
So I only need to delete the accents.
I tried uncommenting the
nota <- iconv(nota,to="ASCII//TRANSLIT")
but I get:
Este sA!bado se enfrentarA!n a un equipo.
So, I don't know what the problem is.
Also, I need to delete accents and all special characters. Thanks
Edition:
I took the last data stored in nota at the end of the loop. THis is what I see:
nota
[1] " <p>La inclusión del seleccionado argentino en el viejo Tres Naciones significó, hace tres años, la confirmación de que el nivel del rugby argentino estaba a la altura de los grandes equipos del planeta, aunque se preveía que esa transición entre ser un equipo <em>del montón</em> a formar parte de la<em> elite </em>no iba a ser sencilla<em>. </em>Hoy, luego de dos años de competencia en el Rugby Championship, Los Pumas están cada vez más cerca de dar el batacazo y conseguir su primer triunfo en la historia del torneo.</p><p>
If I do:
iconv(nota,to="ASCII//TRANSLIT")
I get:
iconv(nota,to="ASCII//TRANSLIT")
[1] " <p>La inclusiA3n del seleccionado argentino en el viejo Tres Naciones significA3, hace tres aA?os, la confirmaciA3n de que el nivel del rugby argentino estaba a la altura de los grandes equipos del planeta, aunque se preveA-a que esa transiciA3n entre ser un equipo <em>del montA3n</em> a formar parte de la<em> elite </em>no iba a ser sencilla<em>. </em>Hoy, luego de dos aA?os de competencia en el Rugby Championship, Los Pumas estA!n cada vez mA!s cerca de dar el batacazo y conseguir su primer triunfo en la historia del torneo.
When I faced a similar problem, I used the function stri_trans_general from the stringi package. For example you can try: stri_trans_general(nota,"Latin-ASCII")
I use this function
rm_accent <- function(str,pattern="all") {
if(!is.character(str))
str <- as.character(str)
pattern <- unique(pattern)
if(any(pattern=="Ç"))
pattern[pattern=="Ç"] <- "ç"
symbols <- c(
acute = "áéíóúÁÉÍÓÚýÝ",
grave = "àèìòùÀÈÌÒÙ",
circunflex = "âêîôûÂÊÎÔÛ",
tilde = "ãõÃÕñÑ",
umlaut = "äëïöüÄËÏÖÜÿ",
cedil = "çÇ"
)
nudeSymbols <- c(
acute = "aeiouAEIOUyY",
grave = "aeiouAEIOU",
circunflex = "aeiouAEIOU",
tilde = "aoAOnN",
umlaut = "aeiouAEIOUy",
cedil = "cC"
)
accentTypes <- c("´","`","^","~","¨","ç")
if(any(c("all","al","a","todos","t","to","tod","todo")%in%pattern)) # opcao retirar todos
return(chartr(paste(symbols, collapse=""), paste(nudeSymbols, collapse=""), str))
for(i in which(accentTypes%in%pattern))
str <- chartr(symbols[i],nudeSymbols[i], str)
return(str)
}

Resources