将qdap中的同义词添加到R中预先存在的数据帧
我在R中创建了以下数据帧df将qdap中的同义词添加到R中预先存在的数据帧,r,text-mining,qdap,R,Text Mining,Qdap,我在R中创建了以下数据帧df Sl NO Word 1 get 2 Free 3 Joshi 4 Hello 5 New 我用这段代码得到了一个同义词列表,但相同的同义词是以列表的形式出现的 library(qdap) synonyms(DF$Word) 我得到了一个同义词列表。我想获得数据框中每个单词的同义词作为单独的列按行追加到数据框中 DF<- Sl NO W
Sl NO Word
1 get
2 Free
3 Joshi
4 Hello
5 New
我用这段代码得到了一个同义词列表,但相同的同义词是以列表的形式出现的
library(qdap)
synonyms(DF$Word)
我得到了一个同义词列表。我想获得数据框中每个单词的同义词作为单独的列按行追加到数据框中
DF<-
Sl NO Word Syn1 Syn2
1 get obtain receive
2 Free independent NA
3 Joshi NA NA
4 Hello Greeting NA
5 New Unused Fresh
DF一种方法可以是使用mapply
一次将每个单词传递给qdap::同义词。“同义词”的结果可以使用paste0
函数和collapse=“|”
折叠在一列中。现在数据已经准备好了。
使用tidyr::separate
将列分隔为Syn1
、Syn2
等
注意:同义词
用两个参数调用,如return.list=FALSE,multiwords=FALSE
下面的代码对最大10
同义词有限制,但可以改进解决方案以动态处理数字
library(tidyverse)
library(qdap)
df %>%
mutate(Synonyms =
mapply(function(x)paste0(
head(synonyms(x, return.list = FALSE, multiwords = FALSE),10), collapse = "|"),
tolower(.$Word))) %>%
separate(Synonyms, paste("Syn",1:10), sep = "\\|", extra = "drop" )
结果:
# SlNO Word Syn 1 Syn 2 Syn 3 Syn 4 Syn 5 Syn 6 Syn 7 Syn 8 Syn 9 Syn 10
# 1 1 get achieve acquire attain bag bring earn fetch gain glean inherit
# 2 2 Free buckshee complimentary gratis gratuitous unpaid footloose independent liberated loose uncommitted
# 3 3 Joshi <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 4 4 Hello <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 5 5 New advanced all-singing all-dancing contemporary current different fresh ground-breaking happening latest
df <- structure(list(sl_no = 1:5, word = c("get", "Free", "Joshi",
"Hello", "New")), .Names = c("sl_no", "word"), class = "data.frame", row.names = c(NA,
-5L))
#无字同步1同步2同步3同步4同步5同步6同步7同步8同步9同步10
#1 1获得获得包带来获得获得获得获得收集继承
#2 2免费巴克什免费免费免费无偿自由自在独立自由自在未承诺
#3.3乔希
#你好
#5 5全新先进全唱全舞当代不同新鲜开创性事件最新
数据
df <- read.table(text =
"SlNO Word
1 get
2 Free
3 Joshi
4 Hello
5 New",
header = TRUE, stringsAsFactors = FALSE)
df这里是另一种使用splitstackshape::cSplit
的方法
library(tidyverse)
library(qdap)
library(splitstackshape)
DF <- read.table(text = tt, header = T)
DF <- DF %>% mutate_at(vars(Word), tolower)
syns <- synonyms_frame(synonyms(tolower(DF$Word))) %>%
mutate_at(vars(x), funs(str_remove(x, "\\..*"))) %>%
mutate_at(vars(y), funs(str_extract(y, '[:alpha:]+'))) %>%
group_by(x) %>%
summarise(Syn = toString(y)) %>%
rename(Word = x) %>% cSplit('Syn')
left_join(DF, syns)
库(tidyverse)
图书馆(qdap)
库(splitstackshape)
DF%
在(变量(y),funs(str_提取(y,[:alpha::+')))%上突变
分组依据(x)%>%
总结(Syn=toString(y))%>%
重命名(Word=x)%%>%cSplit('Syn'))
左联合(DF,syns)
我不确定您希望如何添加一个单词的所有同义词,因为当您运行同义词(“get”)
时,它给出了75个get
的定义,我觉得如果您在一行中添加75个定义的所有值,那么所需的布局将不会有多大帮助
所以在下面的解决方案中,我只选择了第一个定义
库(qdap)
图书馆(dplyr)
库(splitstackshape)
df%>%
行()
mutate(同义词(tolower(word))[[1]],collapse=“,”))%>%
cSplit(“单词的同义词“,”,”)
样本数据:
# SlNO Word Syn 1 Syn 2 Syn 3 Syn 4 Syn 5 Syn 6 Syn 7 Syn 8 Syn 9 Syn 10
# 1 1 get achieve acquire attain bag bring earn fetch gain glean inherit
# 2 2 Free buckshee complimentary gratis gratuitous unpaid footloose independent liberated loose uncommitted
# 3 3 Joshi <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 4 4 Hello <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 5 5 New advanced all-singing all-dancing contemporary current different fresh ground-breaking happening latest
df <- structure(list(sl_no = 1:5, word = c("get", "Free", "Joshi",
"Hello", "New")), .Names = c("sl_no", "word"), class = "data.frame", row.names = c(NA,
-5L))
df@marciaakshayaLeo-如果有,请别忘了告诉我们:)