首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回到前三个单词

返回到前三个单词
EN

Stack Overflow用户
提问于 2021-09-16 23:11:38
回答 2查看 79关注 0票数 1

试图找到返回R中前三个单词的方法,我尝试了string_r中的单词函数,但只有当句子中至少有三个单词时,它才返回前三个单词。例如,

代码语言:javascript
复制
sentences <- c("Jane saw a cat", "Jane sat down", "Jane sat", "Jane")

word(sentences, 1, 3)

返回Jane saw aJane sat downNANA

我希望它能返回前三个单词,即使这个句子有一两个单词。所以我要找的输出是:

返回Jane saw aJane sat downJane SatJane

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-16 23:52:25

1)字符串计数输入的每个组件中的字数,并使用该或3 (以较少者为准)作为返回的字数。

代码语言:javascript
复制
library(stringr)
word(sentences, end = pmin(str_count(sentences, "\\w+"), 3))
## [1] "Jane saw a"    "Jane sat down" "Jane sat"      "Jane" 

2)字符串解决方案2将一些虚拟词附加到末尾,取前3个单词并修剪掉剩下的任何假人。

代码语言:javascript
复制
sentences %>%
  str_c("@ @ @") %>%
  word(end = 3) %>%
  str_replace(" *@.*", "")
## [1] "Jane saw a"    "Jane sat down" "Jane sat"      "Jane"         

3a) Base (与(1)相同的思想可以被翻译成R基,如下所示:

代码语言:javascript
复制
Word <- function(x, end) do.call("paste", read.table(text = x, fill = TRUE)[1:end])

unname(Vectorize(Word)(sentences, end = pmin(lengths(strsplit(sentences, " ")), 3)))
## [1] "Jane saw a"    "Jane sat down" "Jane sat"      "Jane"       

3b) (与(2)相同的思想可以像这样转化为基R。Word来自(3a)。

代码语言:javascript
复制
sentences |>
  paste("@ @ @") |>
  Word(end = 3) |>
  sub(pattern = " *@.*", replacement = "")
## [1] "Jane saw a"    "Jane sat down" "Jane sat"      "Jane"

更新

(1)简化,旧的(1)现在(2)。(3a)和(3b)现在是R基地对应方。

票数 2
EN

Stack Overflow用户

发布于 2021-09-16 23:12:53

我们可以分道扬镳

代码语言:javascript
复制
sapply(strsplit(sentences, " "), \(x) paste(head(x, 3), collapse=" "))

-output

代码语言:javascript
复制
[1] "Jane saw a"    "Jane sat down" "Jane sat"      "Jane"       

或者使用正则表达式

代码语言:javascript
复制
trimws( sub("^((\\w+\\s+){1,3}).*", "\\1", sentences))

-output

代码语言:javascript
复制
[1] "Jane saw a" "Jane sat"   "Jane"       "Jane" 

如果我们想使用word,那么它可能需要一个coalesce

代码语言:javascript
复制
library(stringr)
library(purrr)
library(dplyr)
map(3:1,  word, string = sentences, start = 1) %>%
    exec(coalesce, !!!.)
[1] "Jane saw a"    "Jane sat down" "Jane sat"      "Jane"  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69216111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档