0
library(NLP)
library(tm)
library(tidytext)
library(tidyverse)
library(topicmodels)
library(dplyr)
library(stringr)
library(purrr)
library(tidyr)
#sample dataset
tags <- c("product, productdesign, electronicdevice")
web <- c("hardware, sunglasses, eyeware")
tags2 <- data_frame(tags, web, stringsAsFactors = FALSE)
#tokenize the words
toke <- tags2 %>%
  unnest_tokens(word, tags)
toke
#create a dummy variable
toke2 <- toke%>% mutate(
  product = ifelse(str_detect(word, "^product$"), "1", "0"))
#unnest the toke
nested_toke <- toke2 %>%
  nest(word) %>%
  mutate(text = map(data, unlist), 
         text = map_chr(text, paste, collapse = " "))

nested_toke %>%
  select(text)

当我在基于字符串“product”创建虚拟变量后嵌套标记化词列时,它似乎将“product”插入到“product”所在的原始行下方的新行中。

带下划线的产品应该在上面的行中

4

1 回答 1

1

取消嵌套后添加新列时,如果要再次嵌套,则必须考虑如何处理它。让我们通过它,看看我们在说什么。

library(tidyverse)
tags <- c("product, productdesign, electronicdevice")
web <- c("hardware, sunglasses, eyeware")
tags2 <- data_frame(tags, web)

library(tidytext)
tidy_tags <- tags2 %>%
    unnest_tokens(word, tags)
tidy_tags
#> # A tibble: 3 x 2
#>   web                           word            
#>   <chr>                         <chr>           
#> 1 hardware, sunglasses, eyeware product         
#> 2 hardware, sunglasses, eyeware productdesign   
#> 3 hardware, sunglasses, eyeware electronicdevice

这就是您的数据集未嵌套,转换为整洁的形式。接下来,让我们添加检测单词"product"是否在列中的新word列。

tidy_product <- tidy_tags %>% 
    mutate(product = ifelse(str_detect(word, "^product$"), 
                            TRUE, 
                            FALSE))
tidy_product
#> # A tibble: 3 x 3
#>   web                           word             product
#>   <chr>                         <chr>            <lgl>  
#> 1 hardware, sunglasses, eyeware product          T      
#> 2 hardware, sunglasses, eyeware productdesign    F      
#> 3 hardware, sunglasses, eyeware electronicdevice F

现在想想你有什么选项可以再次嵌套。如果您在不考虑新列 ( nest(word)) 的情况下再次嵌套,则该结构将具有一个 NEW COLUMN,并且必须创建一个 NEW ROW 以考虑可能采用的两个不同值。您可以改为执行类似的操作,nest(word, product)但这些TRUE/FALSE值最终会出现在您的文本字符串中。如果您想恢复到原始文本格式,则需要删除您创建的新列,因为在那里会改变行和列之间的关系。

nested_product <- tidy_product %>%
    select(-product) %>%
    nest(word) %>%
    mutate(text = map(data, unlist), 
           text = map_chr(text, paste, collapse = ", "))

nested_product
#> # A tibble: 1 x 3
#>   web                           data             text                     
#>   <chr>                         <list>           <chr>                    
#> 1 hardware, sunglasses, eyeware <tibble [3 × 1]> product, productdesign, …

reprex 包(v0.2.0)于 2018 年 2 月 22 日创建。

于 2018-02-23T05:05:25.917 回答