#' Translate user search input to regex
#'
#' These functions convert CQL search to regex.
#'
#' @name translate_cql
#' @param x Gram/lexical pattern to be searched for
#' @return A list of character strings
#' @export
#' @rdname translate_cql
clr_build_search <- function(x){
default <- '<\\\\S+~\\\\S+~\\\\S+>'
#Simple wildcard:
if (x=="*") default else {
pos <- "\\\\S+"; form <- "\\\\S+"; lemma <- "\\\\S+"
#Prefixes, suffixes, 'infixes' -- kill non-regex *:
x <- gsub ('\\*([A-Za-z_-])', 'XWILD\\1',x) #NO!
x <- gsub ('([A-Za-z_-])\\*', '\\1XWILD',x)
#Bracket off search from potential regex:
framed <- gsub("([A-Za-z~_$-]+)","<\\1>",x)
#Strip potential regex:
stp <- gsub("([^A-Za-z~_$-]+)","",x)
#Swap out search syntax with regex:
if (stp %in% clr_ref_pos_codes$pos) {
pos <- clr_ref_pos_codes$regex[match(stp,clr_ref_pos_codes$pos)]}
#LEMMA~POS
if (length(grep("~", x)==1)) {
pos <- clr_ref_pos_codes$regex[match(sub(".*~","",stp),clr_ref_pos_codes$pos)]
stp <- gsub("~.*$","",stp)}
#Assign ALLCAPS/NON-POS to lemma
if (stp == toupper(stp) & !stp %in% clr_ref_pos_codes$pos) {lemma <- stp}
#Assign noncaps/non-pos to form
if (stp != toupper(stp) & !stp %in% clr_ref_pos_codes$pos) {form <- stp}
#Add regex to prefix/suffix/infix
form <- gsub("XWILD","[a-z_-]*",form)
lemma <- gsub("XWILD","[a-z_-]*",lemma)
#Negation.
if (stp == 'NEG') {
lemma <- 'not'
pos <- "\\\\S+"}
#Wildcards with proper regex:
if (length(grep("\\(\\*|\\*\\{",x))==1) {sub("\\*", default,x)
} else{
#Add search terms as regex to frame
sub('(?<=<).*(?=>)', paste(form,lemma,pos,sep="~"), framed, perl=TRUE)
}
}
}
#' @export
#' @rdname translate_cql
clr_ref_nounphrase <- "(?:(?:DET )?(?:ADJ )*)?(?:((NOUNX )+|PRON ))"
#' @export
#' @rdname translate_cql
clr_ref_keyphrase <- "(ADJ )*(NOUNX )+((PREP )(ADJ )*(NOUNX )+)?"
#' @export
#' @rdname translate_cql
clr_cql_regex <- function(x) {
if (length(x) > 1) {x <- paste(x,collapse=" |")}
x <- gsub("NPHR",clr_ref_nounphrase,x)
x <- gsub("KPHR",clr_ref_keyphrase,x)
y <- unlist(strsplit(x," "))
y <- lapply(y,clr_build_search)
y <- paste(y, collapse="")
gsub(">","> ",y)}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.