Ich denke, das ist ein häufiges Problem, und ich fand ziemlich viele Webseiten, darunter einige von SO, aber ich habe nicht verstanden, wie man es implementiert.REGEX in R: Extrahieren von Wörtern aus einer Zeichenfolge
Ich bin neu in REGEX, und ich möchte es in R verwenden, um die ersten paar Wörter aus einem Satz zu extrahieren.
zum Beispiel, wenn mein Satz ist
z = "I love stack overflow it is such a cool site"
id mag meine Ausgabe haben, als (wenn ich die ersten vier Worte brauchen)
[1] "I love stack overflow"
oder (wenn ich die letzten vier brauchen Wörter)
[1] "such a cool site"
natürlich die folgenden Werke
paste(strsplit(z," ")[[1]][1:4],collapse=" ")
paste(strsplit(z," ")[[1]][7:10],collapse=" ")
, aber ich möchte eine Regex-Lösung für Performance-Probleme versuchen, wie ich mit sehr großen Dateien umgehen müssen (und auch für den Willen es zu wissen)
ich mehrere Links sah, einschließlich Regex to extract first 3 words from a string und http://osherove.com/blog/2005/1/7/using-regex-to-return-the-first-n-words-in-a-string.html
so habe ich versucht, Dinge wie
gsub("^((?:\S+\s+){2}\S+).*",z,perl=TRUE)
Error: '\S' is an unrecognized escape in character string starting ""^((?:\S"
ich andere Sachen versucht, aber es kehrte mich in der Regel entweder die gesamte Zeichenfolge oder die leere Zeichenfolge.
ein weiteres Problem mit substr ist, dass es eine Liste zurückgibt. vielleicht sieht es so aus, als würde der [[]]
-Operator die Dinge etwas verlangsamen (??), wenn es um große Dateien geht und Dinge angewendet werden.
sieht es so aus, als ob die in R verwendete Syntax etwas anders ist? danke!
Sie müssen Doppel-Escapes in R Regex verwenden. '\ S' ->' \\ S' –
Sie könnten auch 'stringi :: stri_extract_all_words (z) [[1]] [1: 4]' versuchen, was einfacher zu benutzen ist und keine Regex erfordert. Obwohl Sie die Wörter eine getrennte Werte erhalten werden. –
Könnten Sie nicht einfach die gleiche Idee verwenden, die ich [in Ihrer früheren Frage] geteilt hatte (http://stackoverflow.com/questions/33785594/manipulate-char-vectors-inside-a-data-table-object-in) -r)? Sie müssen nur Ihre Backslashes in R verdoppeln, wie bereits von @stribizhev gezeigt. – A5C1D2H2I1M1N2O1R2T1