Conver Cómo Convertir un Titulo a Mayúsculas? (pero solo las palabras no las preposiciones)

Cómo puedo Convertir un Titulo del Tipo: «Сьюдад-де-Пикассо», о «Кастельон-де-ла-Плана», де-фактора правильного: «Сьюдад-де-Пикассо» о «Кастельон-де-ла-Плана».

NO funciona toTitleCase не работает в одиночку.

Идея Альгуны ...

si pruebo de estas 2 formas

 library(tools)
 unlist(lapply(v, FUN=toTitleCase))

Me convierte los "De" y los "La" que no quiero

library(tools)
toTitleCase("la ciudad de Picasso") 
2
задан 21.03.2019, 08:28
1 ответ

Правила capitalizaciГіn сложные, независимо от языка ( Правил espaГ±ol ), однако, твоя идея состоит в том, чтобы работать с одним toTitleCase(), алгоритм которого много mГЎs bГЎsico:

  • Капитализирует всегда ее первый слово
  • не капитализирует верные другие, что estГЎn в списке

Конечно, он делает другие важные вещи, но bГЎsicamente относительно нее capitalizaciГіn работа - тот, который ты comentГ©. А следовательно преобразовывать cГіdigo оригинал в одну versiГіn regionalizada - относительно просто:

toTitleCaseSpanish <- function (text) 
{
            # Cadenas y patrones que no se capitalizan -------------------------------
            # alone, para extensiones/nombres de archivo y textos que no nos interesa capitalizar
            alone <- c("2D", "3D", "AIC", "BayesX", "GoF", "HTML", "LaTeX", 
                       "MonetDB", "OpenBUGS", "TeX", "U.S.", "U.S.A.", "WinBUGS", 
                       "aka", "et", "al.", "ggplot2", "i.e.", "jar", "jars", 
                       "ncdf", "netCDF", "rgl", "rpart", "xls", "xlsx")


            # either, podemos definir lista de palabras a No capitalizar
            either <- c() # Podemos agregar listas de palabras que no queremos capitalizar
            # Preposiciones y articulos que no capitalizaremos como patrón regex
            lpat <- c('^(a|ante|bajo|cabe|con|contra|de|desde|durante|en|entre|hacia|hasta|le|mediante|para|por|según|sin|so|sobre|tras|versus|vía|el|la|los|las|un|uno|una|unos|unas|al|del))
            # ------------------------------------------------------------------------

            titleCase1 <- function(x) {
                do1 <- function(x) {
                    x1 <- substring(x, 1L, 1L)
                    if (nchar(x) >= 3L && x1 %in% c("'", "\"")) 
                        paste0(x1, toupper(substring(x, 2L, 2L)), tolower(substring(x, 
                                                                                    3L)))
                    else paste0(toupper(x1), tolower(substring(x, 2L)))
                }
                if (is.na(x)) 
                    return(NA_character_)
                xx <- .Call("splitString", x, " -/\"()\n")
                alone <- xx %in% c(alone, either)
                alone <- alone | grepl("^'.*'$", xx)
                havecaps <- grepl("^[[:alpha:]].*[[:upper:]]+", xx)
                l <- grepl(lpat, xx, ignore.case = TRUE)
                l[1L] <- FALSE
                ind <- grep("[-:]$", xx)
                ind <- ind[ind + 2L <= length(l)]
                ind <- ind[(xx[ind + 1L] == " ") & grepl("^['[:alnum:]]", 
                                                         xx[ind + 2L])]
                l[ind + 2L] <- FALSE
                ind <- which(xx == "\"")
                ind <- ind[ind + 1L <= length(l)]
                l[ind + 1L] <- FALSE
                xx[l] <- tolower(xx[l])
                keep <- havecaps | l | (nchar(xx) == 1L) | alone
                xx[!keep] <- sapply(xx[!keep], do1)
                paste(xx, collapse = "")
            }
            if (typeof(text) != "character") 
                stop("'text' debe ser un vector de caracteres")
            sapply(text, titleCase1, USE.NAMES = FALSE)
}        

toTitleCaseSpanish(c('la ciudad de Picasso', 'castellón de la Plana'))

[1] "La Ciudad de Picasso"  "Castellón de la Plana"
1
ответ дан 19.11.2019, 21:52
  • 1
    Вопрос requerí в достаточное количество работы, добра @PatricioMoracho, что мне понравилось funció n предложение, дело в том, что он позволяет помещать в mayú scula начальные ударные буквы toTitleCaseSpanish(c('él altísimo')) он печатается: [1] "Él Altísimo" cuá l está согласно RAE: Вычеркнул в mayú sculas – Hubert Ronald 21.03.2019, 15:06