我想知道如何制作由 R 中的几个单词组成的关键字的术语文档矩阵



有没有办法将这样的数据框制作成术语文档矩阵?每个关键字由两个或多个单词组成。

示例数据

数据类型是数据框。

doc_id text
1      c('cat dog', 'cat rat')
2      c('cat dog')
3      c('cat rat')

期望的结果

我想得到这个结果。TermDocumentMatrix 函数已存在,不反映多字关键字。

Docs
Terms    1 2 3
cat dog  1 1 0
cat rat  1 0 1

使用tidyrtidytext首先unnest列表列,然后再用_替换空格(您可以使用其他东西,但_通常用于表示 n-gram(。这样,在生成 tdm 时,单词就不会分开:

library(dplyr)
library(tidyr)
library(tidytext)
library(stringr)
# bring toy data into useful form
df <- tibble::tribble(
~doc_id, ~text, 
1,      c('cat dog', 'cat rat'),
2,      c('cat dog'),
3,      c('cat rat')
)
tdm <- df %>% 
unnest(text) %>% 
mutate(text = str_replace(text, "\s+", "_")) %>% # replace whitespace
unnest_tokens(word, text) %>%
count(word, doc_id) %>% 
cast_tdm(word, doc_id, n)
tdm
#> <<TermDocumentMatrix (terms: 2, documents: 3)>>
#> Non-/sparse entries: 4/2
#> Sparsity           : 33%
#> Maximal term length: 7
#> Weighting          : term frequency (tf)

要将其显示为常规矩阵:

tdm %>% 
as.matrix()
#>          Docs
#> Terms     1 2 3
#>   cat_dog 1 1 0
#>   cat_rat 1 0 1

最新更新