XQuery - replace empty element with a text value (on output to HTML) - xquery

I have nodes like these across a collection of xml:tei documents:
[...]
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" ana="#pAdo #pAud" role="par">Willelmum de Canast-Brus</persName>
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" ana="#pAdo #pAud #pPax" role="par">Willelmum de Canast-Brus</persName>
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" role="own">Willelmi de Canast-Brus</persName>
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" ana="#pAdo" role="par">W<supplied reason="expname">illelmum</supplied> de Canast</persName>
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" role="own">Willelmi<lb break="y" n="20"/>de Canast Brus</persName>
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" ana="#pAdo #pAud #pPax" role="par">Willelmum de<lb break="y" n="22"/>Canast</persName>
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" ana="#pAdo" role="par">Willelmum de Canast Brus</persName>
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" role="own">Willelmi de Canast-Brus</persName>
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" ana="#pAud #pAdo" role="par">W<supplied reason="expname">illelmum</supplied> de Canast</persName>
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" ana="#nAdo" role="par">W<supplied reason="expname">illelmum</supplied> de Canast Bru</persName>
[...]
The following query in XQuery 3.1:
let $a :=
<div>
{let $x := functx:remove-elements-deep(collection($coll)//tei:persName[#nymRef="#Guilhem_Canast-Brus_MSP-AU"][text()],("supplied","corr","del"))
for $y in $x
let $z := normalize-space(string-join(replace($y,",","")))
group by $z
order by $z ascending
return <span>
{$z}
</span>
}</div>
return $a
Returns the following HTML with a number of descendant nodes (ie. supplied, corr) removed using functx:remove-elements-deep:
<div>
<span>R de Canast</span>
<span>W</span>
<span>W Bru</span>
<span>W Bru de Canast</span>
<span>W Canast Bru</span>
<span>W de Canast</span>
<span>W de Canast Bru</span>
<span>W de Canast Brus</span>
<span>W de Canast qui dicitur Lo Brus</span>
<span>W de Canast- Bru</span>
<span>W de Canast-Bru</span>
<span>W de Canast-Brus</span>
<span>W de CanastBru</span>
<span>W de CanastBrus</span>
<span>Willelmi</span>
<span>Willelmi Canast-Bru</span>
<span>Willelmi de Canast</span>
<span>Willelmi de Canast Bru</span>
<span>Willelmi de Canast Brus</span>
<span>Willelmi de Canast iunioris</span>
<span>Willelmi de Canast qui dicitur Brus</span>
<span>Willelmi de Canast-Brus</span>
<span>Willelmi de CanastBru</span>
<span>Willelmi de Canastle Bru</span>
<span>Willelmide Canast Brus</span>
<span>Willelmide Canast-Brus</span>
<span>Willelmo de Canast</span>
<span>Willelmum de Canast</span>
<span>Willelmum de Canast Brus</span>
<span>Willelmum de Canast-Brus</span>
<span>Willelmum deCanast</span>
<span>Willelmus de Canast</span>
</div>
However, there are several (empty) elements that I would like to replace with string. For example replace lb[#break="y"] with a " ", and gap with "[ ]", like in this example:
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" role="own">Willelmi<lb break="y" n="20"/>de Canast Brus</persName>
I was looking at functx:replace-element-values but I could not identify how to integrate it.
Many thanks for any assistance.

Using replace value of element by xquery, I managed to come up with a hack.
declare namespace local = "http://example.org";
declare function local:copy-replace($element as element()) {
if ($element/self::lb[#break eq "y"])
then " "
else if ($element/self::gap)
then "[ ]"
else element {node-name($element)}
{$element/#*,
for $child in $element/node()
return if ($child instance of element())
then local:copy-replace($child)
else $child
}
};
local:copy-replace(<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" role="own">Willelmi<lb break="y" n="20"/>de Can<gap/>t Brus</persName>)
Returns:
<persName nymRef="#Guilhem_Canast-Brus_MSP-AU" role="own">Willelmi de Can[ ]t Brus</persName>
Which I can then continue processing as above.

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.

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

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

Transform web text in Spanish to ASCII

I'm using R to do text mining. I have downloaded html files. I have issues trying to convert to text because the language is Spanish.
I used:
text<-readLines(i,encoding="UTF-8")
But still, I could have text like:
prueba= "hizo la diagonal desde la izquierda hacia el centro y
combinó con Ãngel Di María, quien despachó el centro desd e la
derecha con el revés de la zurda para que Sergio Agüero empujara en
la entrada del área chica."
Where combinó=combinó, área=área, etc. I need to keep only the original alphabetic characters.
I could have another text like the following:
prueba2="El club Atlas, de la Primera D, está en la
constante búsqueda de crecimiento. Y en esa
búsqueda, consiguió un aliado de lujo. El
presidente Maxi Ambrosio viajó al Vaticano y tras
entregarle una camiseta al Papa, le pidió al propio
Francisco que adopte a los de General Rodríguez como su
segundo equipo, después de San Lorenzo. La
reacción fue positiva"
where, for example, "después" means "después"
I tried:
iconv(prueba,to="ASCII//TRANSLIT")
But I get the same text.
How can I transform the text to ASCII?

sort negative value in Unix

I have a problem when i want to sort a file like this
ce point de l ordre du jour -0.000000004070935
au sein de la commission des libertés 0.000000004017626
du conseil de sécurité de l onu -0.000000003909216
I try with this command
sort -ngk8r file1 > file2
but i get this
ce point de l ordre du jour -0.000000004070935
au sein de la commission des libertés 0.000000004017626
du conseil de sécurité de l onu -0.000000003909216
As you see the file is not sorted
I found joy by dropping the -g
$ sort -gnrk8 file1
sort: options `-gn' are incompatible
Example
$ sort -nrk8 file1
au sein de la commission des libertés 0.000000004017626
du conseil de sécurité de l onu -0.000000003909216
ce point de l ordre du jour -0.000000004070935

Resources