Domyślam się, że jest to powszechny problem i znalazłem sporo stron internetowych, w tym niektóre z SO, ale nie udało mi się zrozumieć, jak je wdrożyć.REGEX w R: wyodrębnianie słów z łańcucha
Jestem nowy dla REGEX i chciałbym użyć go w R, aby wyodrębnić kilka pierwszych słów ze zdania.
na przykład, jeśli moje zdanie jest
z = "I love stack overflow it is such a cool site"
id lubią mieć moje wyjście jako (jeśli muszę pierwszych czterech słów)
[1] "I love stack overflow"
lub (jeśli muszę ostatnie cztery słów)
[1] "such a cool site"
oczywiście, następujące prace
paste(strsplit(z," ")[[1]][1:4],collapse=" ")
paste(strsplit(z," ")[[1]][7:10],collapse=" ")
ale chciałbym spróbować regex rozwiązanie problemów z wydajnością, jak trzeba do czynienia z bardzo dużych plików (a także przez wzgląd na wiedząc o tym)
Spojrzałem na kilka linków, w tym Regex to extract first 3 words from a string i http://osherove.com/blog/2005/1/7/using-regex-to-return-the-first-n-words-in-a-string.html
więc spróbowałem rzeczy jak
gsub("^((?:\S+\s+){2}\S+).*",z,perl=TRUE)
Error: '\S' is an unrecognized escape in character string starting ""^((?:\S"
próbowałem innych rzeczy, ale to zwykle zwrócone mnie też cały ciąg lub pusty łańcuch.
Kolejnym problemem z substr jest to, że zwraca listę. może wygląda na to, że operator [[]]
spowalnia nieco działanie (??), kiedy ma do czynienia z dużymi plikami i robi rzeczy.
Wygląda na to, że składnia używana w R jest nieco inna? dzięki!
Musisz użyć podwójnych ucieczek w R regex. '\ S' ->' \\ S' –
Można również wypróbować 'stringi :: stri_extract_all_words (z) [[1]] [1: 4]' które jest łatwiejsze w użyciu i nie wymaga znajomości regex. Chociaż otrzymasz słowa oddzielne wartości. –
Nie możesz po prostu użyć tej samej idei, którą udostępniłem [we wcześniejszym pytaniu] (http://stackoverflow.com/questions/33785594/manipulate-char-vectors-inside-a-data-table-object-in -r)? Musisz tylko podwoić swoje ukośniki w R, jak już zauważyła @stribizhev. – A5C1D2H2I1M1N2O1R2T1