使用Regex抽取非大写单词

kh212irz  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(151)

我尝试在R中使用Regex提取非大写单词。数据包含几列(例如,单词、单词时长、音节、音节时长......),而在单词列中,有大量的单词要么大写,要么(如EAT),非资本化(例如参见),或放在大括号中(例如{VAO})。我想提取单词列中所有未大写的单词。以下是一个具有预期结果的小型示例 Dataframe 。

file   word
 1      sp
 2     WHAT
 3     ISN' 
 4     'EM
 5      O
 6     {PPC}

OUTCOME:
"sp", "{PPC}"
> unique(full_dat$word[!grepl("^[A-Z].*[A-Z]|\\d", full_dat$word) & !grepl(" [[:punct:]] ", full_dat$word)]

结果如下:

[1] "sp"                       "{OOV}"
[3] "O"                        "I"
[5] "A"                        NA
[7] "{XX}"                     "'S"
[9] "{LG}"                     "Y"
[11] "B"                        "'VE"
[13] "N"                        "{GAP_ANONYMIZATION_NAME}"
[15] "'EM"                      "W"
[17] "{GAP_ANONYMIZATION}"      "K"

这看起来不错,因为我可以很容易地识别非大写的单词,但是这个列表中仍然有一些大写的单词....我如何修改代码,使它只显示小写单词和花括号中的单词?

ffscu2ro

ffscu2ro1#

使用stringr库,您可以简单地执行以下操作:

library(stringr)
x <- c("HELLO WORLD", "hello world", "Hello World", "hello World", "HeLLo wOrlD")
str_extract(x, "[A-Z]+")

这将导致每个单词中的所有大写字母:

[1] "HELLO" NA      "H"     "W"     "H"

可以通过na.omit函数省略NA,也可以得到哪些位置有NA,即哪些位置不是大写的单词:

na.omit(str_extract(x, "[A-Z]+"))
[1] "HELLO" "H"     "W"     "H"    
attr(,"na.action")
[1] 2
attr(,"class")
[1] "omit"

但是,您也可以通过执行以下操作来查看不是大写单词的位置:

is.na(str_extract(x, "[A-Z]+"))
[1] FALSE  TRUE FALSE FALSE FALSE

我希望这对你有帮助😀

相关问题