2016-04-29 12 views
-2

Ich habe einen Vektor mit Akronymen wie "USA"Entfernen von Punkten in Akronyme

Ich möchte die Punkte zwischen den Zeichen entfernen, aber ich möchte nicht alle Punkte im gesamten Dokument entfernen, also nur die in Abkürzungen.

Ich kann dies tun, indem Sie gsub:

text <- c("U.S.", "U.N.", "C.I.A") 
gsub("U.S.", "US", text) 

Aber wie kann ich R sagen alle Punkte in allen möglichen Abkürzungen zu entfernen (das heißt, auch in „UN“ Oder „C.I.A.“)?

+2

'gsub (" \\. "," ", Text)'? – mtoto

+1

https://regex101.com/r/nQ3jI8/1? –

Antwort

1

Sie können Wortgrenze hier

gsub('\\b\\.','',vec) 

oder einfachere Möglichkeit ist in den Kommentaren angegeben!

+2

Dies wird jedoch den letzten Punkt nicht entfernen. –

+0

Sie können die Zeichenfolge weiter verarbeiten. –

+0

Ich kann die letzten Punkte mit einem abschließenden gsub Ausdruck entfernen! damit diese Lösung funktioniert, danke! – feder80

1

Ihre Frage scheint ein wenig anders als der Code, den Sie bereitstellen: Sie möchten Akronyme in Text ersetzen, der enthält, die nicht Akronyme/Abkürzungen sind.

Dieser Code extrahiert und identifiziert Akronyme durch wiederholte Kapitalpunktkombinationen gesucht (die bis Mitte Workflow manuell überprüft werden können gefiltert sicherzustellen, dass es etwas seltsam Aufnehmen ist nicht), dann ersetzt sie von Replace multiple arguments with gsub den mgsub Code

text1 <- c("The U.S. and the C.I.A. are acronyms. They should be matched.") 
m <- gregexpr("([A-Z]\\.)+", text1) 
matches <- regmatches(text1, m)[[1]] 
matches_nodot <- sapply(matches, gsub, pattern = "\\.", replacement = "") 

mgsub <- function(pattern, replacement, x, ...) { 
    if (length(pattern)!=length(replacement)) { 
    stop("pattern and replacement do not have the same length.") 
    } 
    result <- x 
    for (i in 1:length(pattern)) { 
    result <- gsub(pattern[i], replacement[i], result, ...) 
    } 
    result 
} 


text2 <- mgsub(matches, matches_nodot, text1) 
text2 
# [1] "The US and the CIA are acronyms. They should be matched." 
Verwandte Themen