Regex 如何在R中删除非字母字符并将所有字母转换为小写?
在以下字符串中:Regex 如何在R中删除非字母字符并将所有字母转换为小写?,regex,r,Regex,R,在以下字符串中: "I may opt for a yam for Amy, May, and Tommy." 如何删除非字母字符,将所有字母转换为小写字母,并对R中每个单词内的字母进行排序 同时,我尝试对句子中的单词进行排序并删除重复的单词。strstringr将允许您以R和C速度处理所有字符集,magrittr将允许您使用适合您需要的管道习惯用法: str <- "I may opt for a yam for Amy, May, and Tommy." ## Clean the
"I may opt for a yam for Amy, May, and Tommy."
如何删除非字母字符,将所有字母转换为小写字母,并对R中每个单词内的字母进行排序
同时,我尝试对句子中的单词进行排序并删除重复的单词。
strstringr
将允许您以R和C速度处理所有字符集,magrittr
将允许您使用适合您需要的管道习惯用法:
str <- "I may opt for a yam for Amy, May, and Tommy."
## Clean the words (just keep letters and convert to lowercase)
words <- strsplit(tolower(gsub("[^A-Za-z ]", "", str)), " ")[[1]]
## split the words into characters and sort them
sortedWords <- sapply(words, function(word) sort(unlist(strsplit(word, ""))))
## Join the sorted letters back together
sapply(sortedWords, paste, collapse="")
# i may opt for a yam for amy may and
# "i" "amy" "opt" "for" "a" "amy" "for" "amy" "amy" "adn"
# tommy
# "mmoty"
## If you want to convert result back to string
do.call(paste, lapply(sortedWords, paste, collapse=""))
# [1] "i amy opt for a amy for amy amy adn mmoty"
library(stringr)
library(magrittr)
txt <- "I may opt for a yam for Amy, May, and Tommy."
txt %>%
str_to_lower %>% # lowercase
str_replace_all("[[:punct:][:digit:][:cntrl:]]", "") %>% # only alpha
str_replace_all("[[:space:]]+", " ") %>% # single spaces
str_split(" ") %>% # tokenize
extract2(1) %>% # str_split returns a list
sort %>% # sort
unique # unique words
## [1] "a" "amy" "and" "for" "i" "may" "opt" "tommy" "yam"
库(stringr)
图书馆(magrittr)
txt%
str_to_lower%%>%#小写
str_replace_all(“[[:punct:][:digit:][:cntrl:][],”)%>%仅阿尔法
str_replace_all(“[[:space:]+”,“”)%>%#单个空格
str_分割(“”%>%#标记化
extract2(1)%>%#str#u split返回一个列表
排序%>%#排序
独特的#独特的词语
##[1]“艾米”和“我”可以选择“汤米”和“任”
您可以使用stringi
library(stringi)
unique(stri_sort(stri_trans_tolower(stri_extract_all_words(txt, simplify = TRUE))))
其中:
## [1] "a" "amy" "and" "for" "i" "may" "opt" "tommy" "yam"
更新
正如@DavidArenburg提到的,我忽略了你问题中的“将字母按单词排序”部分。您没有提供所需的输出,也没有立即出现的应用程序,但是,假设您要确定哪些单词具有匹配的对应项(字符串距离为0):
每行超过一个0
的单词(“amy”、“may”、“yam”
)有一个加扰的对应词。我维护的qdap包具有打包单词
功能,适用于以下情况:
txt <- "I may opt for a yam for Amy, May, and Tommy."
library(qdap)
unique(sort(bag_o_words(txt)))
## [1] "a" "amy" "and" "for" "i" "may" "opt" "tommy" "yam"
txt到目前为止,您能给我们展示一下吗?您能提供一个示例字符串和预期的输出吗?要转换成小写,只需使用tolower
“对每个单词中的字母进行排序”?我现在倾向于使用stringr
,因为它在引擎盖下使用stringi
,但该功能,但stri\u extract\u all\u words
看起来非常方便。我可能不得不重新使用stringi
。是的stringr
更简单,但我发现stringi
更灵活。@hrbrmstr我想你们都忽略了“对每个单词中的字母进行排序”部分,但这到底意味着什么?@Davidernburg OP要求对单词中的字母进行排序。这对我来说毫无意义。这篇文章是赤裸裸的。我认为,如果OP提供了所需的输出,他们的问题将更加清楚,因为他们所要求的内容没有明显的即时应用。我想知道是否可能txt%>%str\u to\u lower%>%str\u replace\u all(“[^[:alpha:][]”),“)%%>%str str split(“+”%%>%extract2(1)%%>%sort%%>%unique
可能更简洁。
txt <- "I may opt for a yam for Amy, May, and Tommy."
library(qdap)
unique(sort(bag_o_words(txt)))
## [1] "a" "amy" "and" "for" "i" "may" "opt" "tommy" "yam"