Search in R list function - r

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

Related

Unicode in string is giving problems for replacement

I am working with strings in R. My issue rises with a special character that is not allowing to replace the strings properly. I do some replacement to extract a text between __ and _ but it is not working for last examples. The code is next:
#Extract
y$Extract <- gsub(".*[_]{2}([^_]+)[_].*", "\\1",gsub('\n\n','_',y$Var))
The data used is:
#Data
y <- structure(list(Var = c("\n\n\nEl sector turístico en Mexico: análisis de la incidencia de la pandemia de la Covid-19 en el margen bruto, y propuesta de mejora para los hoteles 5 estrellas ubicados en la provincia de Taco, cantón Taco, parroquia GX\n\n <U+FEFF> \n \n\n\n\nCabezas Vásquez, Dayanna Gabriela\n (UNAM - TEC, 2022-07-01)\n\nLa presencia del Coronavirus sin duda ha provocado desestabilización en uno de los sectores más perjudicados, que es el hotelero, ya que cuando hubo la pandemia, en Ecuador y en todo el mundo, se tomaron medidas de ...\n\n",
"\n\n\nAnálisis de costos y rentabilidad años 2018 al 2020 para industrias manufactureras de tamaño grande con mayores ingresos orientados a mercados regionales, subsector elaboración de productos alimenticios y bebidas en Mexico\n\n <U+FEFF> \n \n\n\n\nAlbarracín Cedeño, Madelaine Nicole\n (ITAM - CAS, 2022-06-01)\n\nEl presente trabajo de titulación se enfoca en analizar los costos y rentabilidad de los años 2018 al 2020 para industrias manufactureras de tamaño grande con mayores ingresos orientados a mercados regionales, ...\n\n",
"\n\n\nPlan de negocios para la implementación de una empresa de asesoría de bodas ubicada en el Distrito Mexicano\n\n <U+FEFF> \n \n\n\n\nAndrade Totoy, Gabriela Abigail\n (ITAM, 2022-06-01)\n\nEste trabajo tiene como objetivo la realización de un plan de negocios dentro del mundo de la planificación de bodas y el asesoramiento que se podría brindar dentro de la cuidad de Mexico. Dentro de este trabajo se ...\n\n",
"\n\n\nDiseño de un sistema de gestión de la calidad basado en la norma Iso 9001:2008 para los procesos relacionados con el cliente en la empresa la Competencia S.A.\n\n <U+FEFF> \n \n\n\nCadena Echeverría, Jaime Luis Hermel* (TEC, 2014)\n\nEn el presente trabajo se ha diseñado la documentación requerida para un sistema de\r\ngestión de la calidad basado en la Norma ISO 9001:2008 de los procesos relacionados con\r\nel cliente de la empresa La Competencia S.A., ...\n\n",
"\n\n\nDiseño e implementación de un modelo de marketing basado en estrategias para un crecimiento continuo, con innovación y financiamiento para la Empresa Jocotours Cia. Ltda., en el Distrito Mexicano para el año 2015\n\n <U+FEFF> \n \n\n\nSánchez García, Roberto Carlos* (TEC, 2015)\n\nLa empresa Jocotours fue creada en el año 2010 con el propósito de mejorar el turismo de su organización relacionada Fundación de Conservación Jocotoco, una entidad que se dedica a la conservación de las aves amenazadas ...\n\n",
"\n\n\nPlan de negocios para la explotación técnica, ecónomica y ecológica de una mina de agregados pétreos en la parroquia de Chilos\n\n <U+FEFF> \n \n\n\nAutor desconocido (TEC / 2011, 2011-03)\n\nEl presente trabajo de disertación de desenvuelve como un proyecto de gestión de riesgos y salud ocupacional de la TEC, el cual abarca la implementación, desarrollo, manteniemiento y control del sistema de gestión de ...\n\n"
)), row.names = c(NA, -6L), class = "data.frame")
But the output for final three rows is wrong (sorry for image, print is too large):
It should be similar to first rows with the names and year. I think the unicode is doing something to text and I do not know how to solve it.
Many thanks for your help.
Instead of using multiple gsub, we could extract if the pattern is similar across the elements - here the pattern matched is one or more characters (.*) till the unicode character (<U+..>) followed by one or more spaces (\\s+), newlines (\\n+) another set of space, newline (\\s+\\n+), then match the characters that are not a closing bracket ([^)]+) followed by a closing bracket (\\)) and capture those within (...)). In the replacement, specify the backreference (\\1) of the captured substring
sub(".*\\<U\\+[^>]+>\\s+\n+\\s+\\n+([^)]+\\))\n.*", "\\1", y$Var)
[1] "Cabezas Vásquez, Dayanna Gabriela\n (UNAM - TEC, 2022-07-01)"
[2] "Albarracín Cedeño, Madelaine Nicole\n (ITAM - CAS, 2022-06-01)"
[3] "Andrade Totoy, Gabriela Abigail\n (ITAM, 2022-06-01)"
[4] "Cadena Echeverría, Jaime Luis Hermel* (TEC, 2014)"
[5] "Sánchez García, Roberto Carlos* (TEC, 2015)"
[6] "Autor desconocido (TEC / 2011, 2011-03)"
Or can be also
sub(".*\n{2,}([^(]+[()][^)]+\\)).*", "\\1", y$Var)
[1] "Cabezas Vásquez, Dayanna Gabriela\n (UNAM - TEC, 2022-07-01)"
[2] "Albarracín Cedeño, Madelaine Nicole\n (ITAM - CAS, 2022-06-01)"
[3] "Andrade Totoy, Gabriela Abigail\n (ITAM, 2022-06-01)"
[4] "Cadena Echeverría, Jaime Luis Hermel* (TEC, 2014)"
[5] "Sánchez García, Roberto Carlos* (TEC, 2015)"
[6] "Autor desconocido (TEC / 2011, 2011-03)"

Get gtin from <script type="application/ld+json"> using regex and/or xpath | source code

I need to extract the gtin value (8806090325632)
I need to get the xpath expression to scrape the 13 digit gtin code only.
Here is the <script type="application/ld+json"> code :
<script type="application/ld+json"> {"#type":"Product","aggregateRating":{"#type":"AggregateRating","ratingValue":4.4946996466431095,"ratingCount":566,"bestRating":5.0,"worstRating":1.0},"brand":{"#type":"Organization","name":"SAMSUNG"},"description":"SAMSUNG 65TU7022 TV LED 4K - 65 \" (163cm) - HDR10 + - Dolby Digital Plus - Smart TV - 2xHDMI - 1xUSB - Classe énergétique G","gtin":"8806090325632","offers":{"#type":"Offer","availability":"InStock","itemCondition":"NewCondition","price":615.99,"priceCurrency":"EUR","priceValidUntil":"2022-04-06T14:57:01.7797852+02:00","url":"https://www.cdiscount.com/high-tech/televiseurs/samsung-65tu7022-tv-led-4k-uhd-65-163-cm-h/f-1062613-samue65tu7022.html?idOffre=639618765"},"productID":"SAMUE65TU7022","category":"Téléviseur LED","sku":"samue65tu7022","review":[{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"5","worstRating":"1"},"author":"Soso","datePublished":"2022-04-03T03:54:10","description":"Je recommande cet achat tout est parfait","name":"Parfait"},{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"4","worstRating":"1"},"author":"SmashingQuasar","datePublished":"2022-04-02T14:13:11","description":"Cette télévision est grande et offre une résolution 4K pour un prix abordable. La qualité d'image est correcte sans être exceptionnelle. Le HDR est anecdotique sur ce modèle, on ne le discerne presque pas. 4 étoiles pour ce modèle simplement car la profondeur de noir est insatisfaisante. En dehors de ça, une assez bonne affaire pour ceux qui souhaitent passer à la 4K.","name":"Une grande TV 4K peu chère"},{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"5","worstRating":"1"},"author":"luna","datePublished":"2022-04-01T07:40:28","description":"Sa taille et les options sont au top…","name":"TRES BON CHOIX"},{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"4","worstRating":"1"},"author":"Sylva","datePublished":"2022-03-28T13:27:19","description":"Je viens d'acheter ce téléviseur mais malheureusement pas de connection Bluetooth possible. S'il faille le contacter avec avec une barre de son Bluetooth n'y rêvez même pas. A part ça tout est parfait pour l'instant","name":"Pas de connexion Bluetooth possible"},{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"4","worstRating":"1"},"author":"Mortimer","datePublished":"2022-03-27T20:07:23Z","description":"L'image est superbe, quant à ses fonctionnalités, elles sont tellement nombreuses que je n'ai encore pas eu le temps de toutes les tester...","name":"Une belle bête !"}],"#context":"https://schema.org","name":"SAMSUNG 65TU7022 TV LED 4K UHD - 65 \" (163 cm) - HDR10 + - Dolby Digital Plus - Smart TV - 2xHDMI - 1xUSB","image":"https://www.cdiscount.com/pdt2/0/2/2/4/550x550/samue65tu7022/rw/samsung-65tu7022-tv-led-4k-uhd-65-163-cm-h.jpg","url":"https://www.cdiscount.com/high-tech/televiseurs/samsung-65tu7022-tv-led-4k-uhd-65-163-cm-h/f-1062613-samue65tu7022.html"}</script>
While there is no explicit language tag mentioned this answer point out approach with python.
Select the <script> from HTML and load extracted text with json.loads():
data = json.loads(soup.select_one('script[type="application/ld+json"]').text)
Now you could pick the gtin by key:
data['gtin']
Example
html = r'''<script type="application/ld+json">{"#type":"Product","aggregateRating":{"#type":"AggregateRating","ratingValue":4.4946996466431095,"ratingCount":566,"bestRating":5.0,"worstRating":1.0},"brand":{"#type":"Organization","name":"SAMSUNG"},"description":"SAMSUNG 65TU7022 TV LED 4K - 65 \" (163cm) - HDR10 + - Dolby Digital Plus - Smart TV - 2xHDMI - 1xUSB - Classe énergétique G","gtin":"8806090325632","offers":{"#type":"Offer","availability":"InStock","itemCondition":"NewCondition","price":615.99,"priceCurrency":"EUR","priceValidUntil":"2022-04-06T14:57:01.7797852+02:00","url":"https://www.cdiscount.com/high-tech/televiseurs/samsung-65tu7022-tv-led-4k-uhd-65-163-cm-h/f-1062613-samue65tu7022.html?idOffre=639618765"},"productID":"SAMUE65TU7022","category":"Téléviseur LED","sku":"samue65tu7022","review":[{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"5","worstRating":"1"},"author":"Soso","datePublished":"2022-04-03T03:54:10","description":"Je recommande cet achat tout est parfait","name":"Parfait"},{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"4","worstRating":"1"},"author":"SmashingQuasar","datePublished":"2022-04-02T14:13:11","description":"Cette télévision est grande et offre une résolution 4K pour un prix abordable. La qualité d'image est correcte sans être exceptionnelle. Le HDR est anecdotique sur ce modèle, on ne le discerne presque pas. 4 étoiles pour ce modèle simplement car la profondeur de noir est insatisfaisante. En dehors de ça, une assez bonne affaire pour ceux qui souhaitent passer à la 4K.","name":"Une grande TV 4K peu chère"},{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"5","worstRating":"1"},"author":"luna","datePublished":"2022-04-01T07:40:28","description":"Sa taille et les options sont au top…","name":"TRES BON CHOIX"},{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"4","worstRating":"1"},"author":"Sylva","datePublished":"2022-03-28T13:27:19","description":"Je viens d'acheter ce téléviseur mais malheureusement pas de connection Bluetooth possible. S'il faille le contacter avec avec une barre de son Bluetooth n'y rêvez même pas. A part ça tout est parfait pour l'instant","name":"Pas de connexion Bluetooth possible"},{"#type":"Review","reviewRating":{"#type":"Rating","bestRating":"5","ratingValue":"4","worstRating":"1"},"author":"Mortimer","datePublished":"2022-03-27T20:07:23Z","description":"L'image est superbe, quant à ses fonctionnalités, elles sont tellement nombreuses que je n'ai encore pas eu le temps de toutes les tester...","name":"Une belle bête !"}],"#context":"https://schema.org","name":"SAMSUNG 65TU7022 TV LED 4K UHD - 65 \" (163 cm) - HDR10 + - Dolby Digital Plus - Smart TV - 2xHDMI - 1xUSB","image":"https://www.cdiscount.com/pdt2/0/2/2/4/550x550/samue65tu7022/rw/samsung-65tu7022-tv-led-4k-uhd-65-163-cm-h.jpg","url":"https://www.cdiscount.com/high-tech/televiseurs/samsung-65tu7022-tv-led-4k-uhd-65-163-cm-h/f-1062613-samue65tu7022.html"}</script>'''
soup = BeautifulSoup(html)
data = json.loads(soup.select_one('script[type="application/ld+json"]').text)
data['gtin']

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

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

Resources