【问题标题】:Creating Vector by Word Occurrence Table r按单词出现表 r 创建向量
【发布时间】:2020-02-28 15:52:33
【问题描述】:

我需要找到一种自动化方法来获取我的原始向量并将每个单词(无论向量中的位置如何)转换为新向量。每个新向量都反映了其基础词在原始向量的每个元素中的存在。

我需要转这个:

OriginalVector <- c("Nimble red fox", "Lazy Grey Dog", "Red Fox funny")

进入这个:

Nimble Red    Fox    Lazy   Grey   Dog    Funny
1      1      1      0      0      0      0
0      0      0      1      1      1      0
0      1      1      0      0      0      1

每一行都应该对应于原始向量中的每个元素。也就是说,数字1反映了每个单词在原始向量“The nimble red fox”的第一个元素中的出现,第二行反映了每个单词在“Lazy Grey Dog”中的出现,......等等

我的现实世界问题有 300,000 多个元素和数十万个独特的单词。我可以使用r grep()r grepl(),但是尝试单独构建每个向量会令人难以置信。他们是解决这个问题的自动化方法吗?

注意:我不是在寻找单词共现矩阵。相反,我需要一个频率表行(原始向量元素)x 字。

【问题讨论】:

  • 不!原始向量中的所有单词都应保留在池中。
  • 10 小时编程。

标签: r string vector bigdata


【解决方案1】:

任何自然语言处理框架都可以相当容易地做到这一点。我喜欢tidytext 这样简单的事情。在计算上有更快的速度,但这相当简单。

library(tidytext)
library(dplyr)
library(tidyr)

OriginalVector <- c("Nimble red fox", "Lazy Grey Dog", "Red Fox funny")

df <- tibble(id = seq_along(OriginalVector), text = OriginalVector)

df %>%
  unnest_tokens(word, text) %>%
  count(id, word) %>%
  pivot_wider(id_cols = id, names_from = word, values_from = n, values_fill = list(n = 0)) %>%
  select(-id)

# A tibble: 3 x 7
    fox nimble   red   dog  grey  lazy funny
  <int>  <int> <int> <int> <int> <int> <int>
1     1      1     1     0     0     0     0
2     0      0     0     1     1     1     0
3     1      0     1     0     0     0     1

你也可以提前退出框架,直接使用table

table(unnest_tokens(df, word, text))

   word
id  dog fox funny grey lazy nimble red
  1   0   1     0    0    0      1   1
  2   1   0     0    1    1      0   0
  3   0   1     1    0    0      0   1

注意unnest_tokens() 默认有一个选项to_lower = TRUE。如果您不想这样做,可以将其更改为 FALSE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-27
    • 2020-07-19
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多