ich einen Text zBangegebene Wort aus einem Vektor Extrahieren von R mit
text<- "i am happy today :):)"
Ich möchte extrahieren :) aus Textvektor und melden ihre Frequenz
ich einen Text zBangegebene Wort aus einem Vektor Extrahieren von R mit
text<- "i am happy today :):)"
Ich möchte extrahieren :) aus Textvektor und melden ihre Frequenz
Hier ist eine Idee, die zu verallgemeinern wäre einfach:
text<- c("i was happy yesterday :):)",
"i am happy today :)",
"will i be happy tomorrow?")
(nchar(text) - nchar(gsub(":)", "", text)))/2
# [1] 2 1 0
Dies funktioniert der Trick, aber vielleicht nicht das Beste sein direkte Art und Weise:
mytext<- "i am happy today :):)"
# The following line inserts semicolons to split on
myTextSub<-gsub(":)", ";:);", mytext)
# Then split and unlist
myTextSplit <- unlist(strsplit(myTextSub, ";"))
# Then see how many times the smiley turns up
length(grep(":)", myTextSplit))
EDIT
Vektoren von Text behandeln mit einer Länge von> 1, nicht fehlendem oder:
mytext<- rep("i am happy today :):)",2)
myTextSub<-gsub(":\\)", ";:\\);", mytext)
myTextSplit <- strsplit(myTextSub, ";")
sapply(myTextSplit,function(x){
length(grep(":)", x))
})
Aber Ich mag die anderen Antworten besser.
Ich nehme an, Sie nur die Zählung, oder wollen Sie auch :)
aus dem String entfernen?
Für die Zählung können Sie tun:
length(gregexpr(":)",text)[[1]])
, die für einen Vektor von Strings ist 2. Eine allgemeinere Lösung gibt:
sapply(gregexpr(":)",text),length)
Josh O'Brien darauf hingewiesen, dass dies auch 1 zurück gibt es keine :)
seit gregexpr
gibt -1
in diesem Fall zurück. Um das zu beheben, können Sie verwenden:
sapply(gregexpr(":)",text),function(x)sum(x>0))
Das wird etwas weniger schön.
Dies ist eine großartige Idee, aber es braucht ein bisschen mehr Arbeit, da es für Strings fehlschlägt, die kein '" "enthalten Saiten überhaupt. (Probieren Sie Ihre Funktionen beispielsweise mit 'text <-" ABC "aus, um zu sehen, dass beide" behaupten ", dass sie ein Smiley-Gesicht enthält.) Das liegt daran, dass' gregexpr() '' -1' für eine solche Zeichenfolge zurückgibt , die eine Länge von 1 hat. Ich denke, dass eine feste Version Ihres Ansatzes eine sauberere Lösung wäre als die, die ich vorgeschlagen habe ... –
Edited, thanks. –
Kühl. Ich werde dies als ein gutes Beispiel für die Art von Problem ablegen, wo 'gregexpr()' sich auszeichnet. –
Sie könnten auch das Gegenteil für nur einen 'nchar() 'Aufruf verwenden:' nchar (gsub ("[^ :)]", "", Text))/2' –
@SachaEpskamp - Leider doesn nicht tue genau dasselbe, da es alles außer den Zeichen ':' und ')' ersetzt, wenn du wirklich alles ersetzen wolltest, außer der * string * ':)'. Versuchen Sie Ihre Idee mit 'text <-" A: "', um zu sehen, was ich meine. –
Richtig danke. Ich bin mit regulären Ausdrücken ziemlich neu. Ich denke, das funktioniert? 'nchar (gsub ("^((?!: \\)).) * "," ", text, perl = TRUE))/2' –