Extract sentences containing specific word(s) - r

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)])

Related

Revtools: Load spanish characters in bibliographic data

I already have my locale to: Spanish_Mexico.1252 and my encoding to UTF-16LE yet my data frame with the function read_bibliography ignores the characters in Spanish from Web of Science. There are no extra options for this function. Anyone has any experience in this package?
sample data:https://privfile.com/download.php?fid=62e01e7e95b08-MTQwMTc=
mydata <- revtools::read_bibliography("H:/Bibliométrico/Datos Bibliográficos/SCIELO/SCIQN220722.txt")
head(mydata$title)
[1] "Metodologa de auditoria de marketing para servicios cientfico-tcnicos con enfoque de responsabilidad social empresarial"
[2] "Contribucin a la competitividad de una empresa con herramientas estratgicas: Mtodo ABC y el personal de la organizacin"
[3] "Quality tools and techniques, EFQM experience and strategy formation. Is there any relationship?: The particular case of Spanish service firms"
[4] "Determinantes de las patentes y otras formas de propiedad intelectual de los estados mexicanos"
[5] "Modelos de clculo de las betas a aplicar en el Capital Asset Pricing Model: el caso de Argentina"
[6] "Mapas cognitivos difusos para la seleccin de proyectos de tecnologas de la informacin"
See how it ommits the latin charactes such as the í in Metodología, Contribucn instead of Contribución, etc.

data cleaning with R language

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.)

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)
}

How to convert a rtf string to plain text using R?

I have lots of rtf strings (Base64) and I want to use R to obtain a plain text. Is it possible? There is one example bellow.
There are lots of ways using other languages, but it will be very useful if I found a "R way" to do the job.
rtfString <- "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcZGVmbGFuZzEwNDZcZGVmbGFuZ2ZlMTA0NlxkZWZ0YWI3MDl7XGZvbnR0Ymx7XGYwXGZzd2lzc1xmcHJxMlxmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcc2w0ODBcc2xtdWx0MVxxalxmMFxmczI0XHRhYlxiIE8gU1IuIERVRElNQVIgUEFYSVVCQSBcYjAgKFBTREItUEEuIFNlbSByZXZpc1wnZTNvIGRvIG9yYWRvci4pIC0gU3IuIFByZXNpZGVudGUsIFNyYXMuIGUgU3JzLiBQYXJsYW1lbnRhcmVzLCBvY3VwbyBlc3RhIHRyaWJ1bmEgcGFyYSBwYXJhYmVuaXphciBhIHRvcmNpZGEgcGFyYWVuc2UuIE8gZnV0ZWJvbCBwYXJhZW5zZSBkZXUgdW0gXGkgc2hvd1xpMCAgZGUgY2l2aWxpZGFkZSBuZXN0ZSBmaW5hbCBkZSBzZW1hbmEsIGUgYSB0b3JjaWRhIGJpY29sb3IgZG8gUGFwXCdlM28gZGEgQ3VydXp1LCBvIFBheXNhbmR1LCBlc3RcJ2UxIGRlIHBhcmFiXCdlOW5zLCBwb2lzIHNhZ3JvdS1zZSBjYW1wZVwnZTNvIGRvIHByaW1laXJvIHR1cm5vIGVtIGNpbWEgZG8gc2V1IG1haW9yIHJpdmFsLCB2ZW5jZW5kbyBvIHZhbG9yb3NvIENsdWJlIGRvIFJlbW8uDQpccGFyIFx0YWIgRXN0XCdlM28gZGUgcGFyYWJcJ2U5bnMgbyBQYXlzYW5kdSwgbyBHb3Zlcm5vIGRvIEVzdGFkbywgcXVlIGRldSB1bSBcaSBzaG93IFxpMCBkZSBvcmdhbml6YVwnZTdcJ2UzbywgYSBKdXN0aVwnZTdhIHBhcmFlbnNlLCBhIHBvbFwnZWRjaWEsIG9zIFwnZjNyZ1wnZTNvcyBkZSBzZWd1cmFuXCdlN2EgZG8gRXN0YWRvLiBFbmZpbSwgbWFpcyB1bWEgdmV6LCBwYXJhYlwnZTlucyBcJ2UwIHRvcmNpZGEgYmljb2xvci4NClxwYXIgXHRhYiBQYXlzYW5kdSwgbXVpdGFzIGUgbXVpdGFzIGdsXCdmM3JpYXMgdm9jXCdlYSBhaW5kYSBkYXJcJ2UxIHBhcmEgZXNzYSBzdWEgYnJpbGhhbnRlIHRvcmNpZGEsIHF1ZSBcJ2U5IGEgdG9yY2lkYSBiaWNvbG9yIGRlIEJlbFwnZTltIGRvIFBhclwnZTEuDQpccGFyIFx0YWIgTXVpdG8gb2JyaWdhZG8sIFNyLiBQcmVzaWRlbnRlLg0KXHBhciANClxwYXIgXHBhcmRcc2EyMDBcc2wyNzZcc2xtdWx0MSANClxwYXIgDQpccGFyIFxwYXJkXHNsNDgwXHNsbXVsdDFccWogDQpccGFyIH0NCgA="
plainText <- function(rtfString)
# The result will be something similar to this:
plainText
[1] "Sr. Presidente, Sras. e Srs. Parlamentares, ocupo esta tribuna para parabenizar a torcida paraense. O futebol paraense deu um show de civilidade neste final de semana, e a torcida bicolor do Papão da Curuzu, o Paysandu, está de parabéns, pois sagrou-se campeão do primeiro turno em cima do seu maior rival, vencendo o valoroso Clube do Remo.\nEstão de parabéns o Paysandu, o Governo do Estado, que deu um show de organização, a Justiça paraense, a polícia, os órgãos de segurança do Estado. Enfim, mais uma vez, parabéns à torcida bicolor.\nPaysandu, muitas e muitas glórias você ainda dará para essa sua brilhante torcida, que é a torcida bicolor de Belém do Pará.\nMuito obrigado, Sr. Presidente."
A combination of a few packages and some regex can accomplish this:
library(RCurl)
library(stringr)
library(magrittr)
decode_rtf <- function(txt) {
txt %>%
base64Decode %>%
str_replace_all("\\\\'e3", "ã") %>%
str_replace_all("\\\\'e1", "á") %>%
str_replace_all("\\\\'e9", "é") %>%
str_replace_all("\\\\'e7", "ç") %>%
str_replace_all("\\\\'ed", "í") %>%
str_replace_all("\\\\'f3", "ó") %>%
str_replace_all("\\\\'ea", "ê") %>%
str_replace_all("\\\\'e0", "à") %>%
str_replace_all("(\\\\[[:alnum:]']+|[\\r\\n]|^\\{|\\}$)", "") %>%
str_replace_all("\\{\\{[[:alnum:]; ]+\\}\\}", "") %>%
str_trim
}
rtfString <- "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcZGVmbGFuZzEwNDZcZGVmbGFuZ2ZlMTA0NlxkZWZ0YWI3MDl7XGZvbnR0Ymx7XGYwXGZzd2lzc1xmcHJxMlxmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcc2w0ODBcc2xtdWx0MVxxalxmMFxmczI0XHRhYlxiIE8gU1IuIERVRElNQVIgUEFYSVVCQSBcYjAgKFBTREItUEEuIFNlbSByZXZpc1wnZTNvIGRvIG9yYWRvci4pIC0gU3IuIFByZXNpZGVudGUsIFNyYXMuIGUgU3JzLiBQYXJsYW1lbnRhcmVzLCBvY3VwbyBlc3RhIHRyaWJ1bmEgcGFyYSBwYXJhYmVuaXphciBhIHRvcmNpZGEgcGFyYWVuc2UuIE8gZnV0ZWJvbCBwYXJhZW5zZSBkZXUgdW0gXGkgc2hvd1xpMCAgZGUgY2l2aWxpZGFkZSBuZXN0ZSBmaW5hbCBkZSBzZW1hbmEsIGUgYSB0b3JjaWRhIGJpY29sb3IgZG8gUGFwXCdlM28gZGEgQ3VydXp1LCBvIFBheXNhbmR1LCBlc3RcJ2UxIGRlIHBhcmFiXCdlOW5zLCBwb2lzIHNhZ3JvdS1zZSBjYW1wZVwnZTNvIGRvIHByaW1laXJvIHR1cm5vIGVtIGNpbWEgZG8gc2V1IG1haW9yIHJpdmFsLCB2ZW5jZW5kbyBvIHZhbG9yb3NvIENsdWJlIGRvIFJlbW8uDQpccGFyIFx0YWIgRXN0XCdlM28gZGUgcGFyYWJcJ2U5bnMgbyBQYXlzYW5kdSwgbyBHb3Zlcm5vIGRvIEVzdGFkbywgcXVlIGRldSB1bSBcaSBzaG93IFxpMCBkZSBvcmdhbml6YVwnZTdcJ2UzbywgYSBKdXN0aVwnZTdhIHBhcmFlbnNlLCBhIHBvbFwnZWRjaWEsIG9zIFwnZjNyZ1wnZTNvcyBkZSBzZWd1cmFuXCdlN2EgZG8gRXN0YWRvLiBFbmZpbSwgbWFpcyB1bWEgdmV6LCBwYXJhYlwnZTlucyBcJ2UwIHRvcmNpZGEgYmljb2xvci4NClxwYXIgXHRhYiBQYXlzYW5kdSwgbXVpdGFzIGUgbXVpdGFzIGdsXCdmM3JpYXMgdm9jXCdlYSBhaW5kYSBkYXJcJ2UxIHBhcmEgZXNzYSBzdWEgYnJpbGhhbnRlIHRvcmNpZGEsIHF1ZSBcJ2U5IGEgdG9yY2lkYSBiaWNvbG9yIGRlIEJlbFwnZTltIGRvIFBhclwnZTEuDQpccGFyIFx0YWIgTXVpdG8gb2JyaWdhZG8sIFNyLiBQcmVzaWRlbnRlLg0KXHBhciANClxwYXIgXHBhcmRcc2EyMDBcc2wyNzZcc2xtdWx0MSANClxwYXIgDQpccGFyIFxwYXJkXHNsNDgwXHNsbXVsdDFccWogDQpccGFyIH0NCgA="
decode_rtf(rtfString)
## [1] "O SR. DUDIMAR PAXIUBA (PSDB-PA. Sem revisão do orador.) - Sr. Presidente, Sras. e Srs. Parlamentares, ocupo esta tribuna para parabenizar a torcida paraense. O futebol paraense deu um show de civilidade neste final de semana, e a torcida bicolor do Papão da Curuzu, o Paysandu, está de parabéns, pois sagrou-se campeão do primeiro turno em cima do seu maior rival, vencendo o valoroso Clube do Remo. Estão de parabéns o Paysandu, o Governo do Estado, que deu um show de organização, a Justiça paraense, a polícia, os órgãos de segurança do Estado. Enfim, mais uma vez, parabéns à torcida bicolor. Paysandu, muitas e muitas glórias você ainda dará para essa sua brilhante torcida, que é a torcida bicolor de Belém do Pará. Muito obrigado, Sr. Presidente."
I'm sure there are some edge cases this might bork on but it's definitely a start for you.

Resources