我猜这是一个常见的问题,我找到了很多网页,包括一些来自SO的网页,但我无法理解如何实现它。
我对正则表达式不熟悉,并且我想在R中使用它从句子中提取前几个单词。
例如,如果我的句子是:
我想将我的输出设置为(如果我需要前四个单词)
或者(如果我需要最后四个单词)
当然,以下的作品。
但是我想尝试正则表达式的解决方案来解决性能问题,因为我需要处理非常大的文件(也为了了解它)。
我查看了几个链接,包括从字符串中提取前三个单词的正则表达式和http://osherove.com/blog/2005/1/7/using-regex-to-return-the-first-n-words-in-a-string.html 所以我尝试了一些东西。
我试过其他方法,但通常会返回整个字符串或空字符串。
substr 的另一个问题是它返回一个列表。也许在处理大文件并执行应用程序时,使用 [[]] 运算符会使事情变慢。
看起来 R 中使用的语法有些不同? 谢谢!
我对正则表达式不熟悉,并且我想在R中使用它从句子中提取前几个单词。
例如,如果我的句子是:
z = "I love stack overflow it is such a cool site"
我想将我的输出设置为(如果我需要前四个单词)
[1] "I love stack overflow"
或者(如果我需要最后四个单词)
[1] "such a cool site"
当然,以下的作品。
paste(strsplit(z," ")[[1]][1:4],collapse=" ")
paste(strsplit(z," ")[[1]][7:10],collapse=" ")
但是我想尝试正则表达式的解决方案来解决性能问题,因为我需要处理非常大的文件(也为了了解它)。
我查看了几个链接,包括从字符串中提取前三个单词的正则表达式和http://osherove.com/blog/2005/1/7/using-regex-to-return-the-first-n-words-in-a-string.html 所以我尝试了一些东西。
gsub("^((?:\S+\s+){2}\S+).*",z,perl=TRUE)
Error: '\S' is an unrecognized escape in character string starting ""^((?:\S"
我试过其他方法,但通常会返回整个字符串或空字符串。
substr 的另一个问题是它返回一个列表。也许在处理大文件并执行应用程序时,使用 [[]] 运算符会使事情变慢。
看起来 R 中使用的语法有些不同? 谢谢!
\S
->\\S
- Wiktor Stribiżewstringi::stri_extract_all_words(z)[[1]][1:4]
,这更容易使用,不需要了解正则表达式。但是您将获得单独的单词值。 - David Arenburg