计算R中字符串中的英语单词数

计算R中字符串中的英语单词数,r,nlp,R,Nlp,我想数一数一串文本中的英语单词数 df.words <- data.frame(ID = 1:2, text = c(c("frog friend fresh frink foot"), c("get give gint gobble"))) df.words ID text 1 1 frog friend fresh

我想数一数一串文本中的英语单词数

df.words <- data.frame(ID = 1:2,
              text = c(c("frog friend fresh frink foot"),
                       c("get give gint gobble")))

df.words

  ID                         text
1  1 frog friend fresh frink foot
2  2         get give gint gobble

我猜我必须首先根据空格分隔,然后根据字典引用单词?

基于@r2evan使用
strsplit()
和使用随机英文word.txt文件字典的建议,示例如下。如果由于
unnest
步骤而进行大量比较,此解决方案可能无法很好地扩展

library(dplyr)
library(tidyr)

# text file with 479k English words ~4MB
dict <- read.table(file = url("https://github.com/dwyl/english-words/raw/master/words_alpha.txt"), col.names = "text2")

df.words <- data.frame(ID = 1:2,
                       text = c(c("frog friend fresh frink foot"),
                                c("get give gint gobble")),
                       stringsAsFactors = FALSE)

df.words %>% 
  mutate(text2 = strsplit(text, split = "\\s")) %>% 
  unnest(text2) %>% 
  semi_join(dict, by = c("text2")) %>% 
  group_by(ID, text) %>% 
  summarise(count = length(text2))
库(dplyr)
图书馆(tidyr)
#包含479k英文单词~4MB的文本文件
迪克特%
未测试(文本2)%>%
半连接(dict,by=c(“text2”))%>%
分组依据(ID,文本)%>%
摘要(计数=长度(文本2))
输出

     ID text                         count
  <int> <chr>                        <int>
1     1 frog friend fresh frink foot     4
2     2 get give gint gobble             3
ID文本计数
1青蛙朋友新鲜的frink foot 4
2.让gint大口大口喝3

在@r2evan建议使用
strsplit()
和使用随机英文word.txt文件字典的基础上,示例如下。如果由于
unnest
步骤而进行大量比较,此解决方案可能无法很好地扩展

library(dplyr)
library(tidyr)

# text file with 479k English words ~4MB
dict <- read.table(file = url("https://github.com/dwyl/english-words/raw/master/words_alpha.txt"), col.names = "text2")

df.words <- data.frame(ID = 1:2,
                       text = c(c("frog friend fresh frink foot"),
                                c("get give gint gobble")),
                       stringsAsFactors = FALSE)

df.words %>% 
  mutate(text2 = strsplit(text, split = "\\s")) %>% 
  unnest(text2) %>% 
  semi_join(dict, by = c("text2")) %>% 
  group_by(ID, text) %>% 
  summarise(count = length(text2))
库(dplyr)
图书馆(tidyr)
#包含479k英文单词~4MB的文本文件
迪克特%
未测试(文本2)%>%
半连接(dict,by=c(“text2”))%>%
分组依据(ID,文本)%>%
摘要(计数=长度(文本2))
输出

     ID text                         count
  <int> <chr>                        <int>
1     1 frog friend fresh frink foot     4
2     2 get give gint gobble             3
ID文本计数
1青蛙朋友新鲜的frink foot 4
2.让gint大口大口喝3

基本R备选方案,使用EJJ对
dict的推荐:

sapply(strsplit(df.words$text,“\\s+”),
函数(z)和(z%在%dict$text2中)
# [1] 4 3
我原以为这在速度上会是一个明显的赢家,但显然一次做一个
sum(.%in%)
会有点贵。(使用此数据时速度较慢。)

更快但不一定更简单:


wordsBase R备选方案,使用EJJ对
dict的推荐:

sapply(strsplit(df.words$text,“\\s+”),
函数(z)和(z%在%dict$text2中)
# [1] 4 3
我原以为这在速度上会是一个明显的赢家,但显然一次做一个
sum(.%in%)
会有点贵。(使用此数据时速度较慢。)

更快但不一定更简单:


单词Yes,分隔(
strsplit(,“\\s+”)
),然后对字典进行引用(可能使用%
)中的
%进行引用。Yes,分隔(
strsplit(,“\\s+”)
)然后对字典进行引用(可能使用%
中的
%进行引用)。使用数组很酷,还感谢您确认我对性能的怀疑使用阵列很酷,也感谢您确认我对性能的怀疑