计算 "lines" 个标记中的单词
counting words in "lines" tokens
我是 R 的新手,所以这个问题看起来很明显。但是,我没有管理也没有找到解决方案
当我的标记是行时(实际上是评论),我如何计算标记中的单词数?
因此,有一个数据集,其评论 (reviewText) 与产品 ID (asin)
相关联
amazonr_tidy_sent = amazonr_tidy_sent%>%unnest_tokens(word, reviewText, token = "lines")
amazonr_tidy_sent = amazonr_tidy_sent %>% anti_join(stop_words)%>%ungroup()
我尝试了以下方式
wordcounts <- amazonr_tidy_sent %>%
group_by(word, asin)%>%
summarize(word = n())
但这不合适。我假设,没有办法计算,因为作为标记的行不能是 "separated"
非常感谢
如果适合您的分析,您可以多次使用 unnest_tokens()
。
首先,您可以使用 unnest_tokens()
来获取您想要的行。请注意,我添加了一列来跟踪每一行的 ID;你可以随心所欲地调用它,但重要的是要有一个列来记录你在哪一行。
library(tidytext)
library(dplyr)
library(janeaustenr)
d <- data_frame(txt = prideprejudice)
d_lines <- d %>%
unnest_tokens(line, txt, token = "lines") %>%
mutate(id = row_number())
d_lines
#> # A tibble: 10,721 × 2
#> line
#> <chr>
#> 1 pride and prejudice
#> 2 by jane austen
#> 3 chapter 1
#> 4 it is a truth universally acknowledged, that a single man in possession
#> 5 of a good fortune, must be in want of a wife.
#> 6 however little known the feelings or views of such a man may be on his
#> 7 first entering a neighbourhood, this truth is so well fixed in the minds
#> 8 of the surrounding families, that he is considered the rightful property
#> 9 of some one or other of their daughters.
#> 10 "my dear mr. bennet," said his lady to him one day, "have you heard that
#> # ... with 10,711 more rows, and 1 more variables: id <int>
现在您可以再次使用 unnest_tokens()
,但这次使用 words
这样您的每个单词都会得到一行。请注意,您仍然知道每个单词来自哪一行。
d_words <- d_lines %>%
unnest_tokens(word, line, token = "words")
d_words
#> # A tibble: 122,204 × 2
#> id word
#> <int> <chr>
#> 1 1 pride
#> 2 1 and
#> 3 1 prejudice
#> 4 2 by
#> 5 2 jane
#> 6 2 austen
#> 7 3 chapter
#> 8 3 1
#> 9 4 it
#> 10 4 is
#> # ... with 122,194 more rows
现在您可以进行任何类型的计数,例如,您可能想知道每行有多少个单词?
d_words %>%
count(id)
#> # A tibble: 10,715 × 2
#> id n
#> <int> <int>
#> 1 1 3
#> 2 2 3
#> 3 3 2
#> 4 4 12
#> 5 5 11
#> 6 6 15
#> 7 7 13
#> 8 8 11
#> 9 9 8
#> 10 10 15
#> # ... with 10,705 more rows
通过使用 str_split
拆分每一行,我们可以计算每行的单词数。
一些示例数据(包含换行符和停用词):
library(dplyr)
library(tidytext)
d = data_frame(reviewText = c('1 2 3 4 5 able', '1 2\n3 4 5\n6\n7\n8\n9 10 above', '1!2', '1',
'!', '', '\n', '1', 'able able', 'above above', 'able', 'above'),
asin = rep(letters, each = 2, length.out = length(reviewText)))
统计字数:
by_line %>%
group_by(asin) %>%
summarize(word = sum(sapply(strsplit(word, '\s'), length)))
asin word
<chr> <int>
1 a 17
2 b 2
3 c 1
4 d 1
5 e 4
注意:在您的原始代码中,大多数停用词不会被删除,因为您按行拆分了数据。只有完全是单个停用词的行才会被删除。
要从字数中排除停用词,请使用:
by_line %>%
group_by(asin) %>%
summarize(word = word %>% strsplit('\s') %>%
lapply(setdiff, y = stop_words$word) %>% sapply(length) %>% sum)
asin word
<chr> <int>
1 a 15
2 b 2
3 c 1
4 d 1
5 e 0
6 f 0
我是 R 的新手,所以这个问题看起来很明显。但是,我没有管理也没有找到解决方案
当我的标记是行时(实际上是评论),我如何计算标记中的单词数? 因此,有一个数据集,其评论 (reviewText) 与产品 ID (asin)
相关联amazonr_tidy_sent = amazonr_tidy_sent%>%unnest_tokens(word, reviewText, token = "lines")
amazonr_tidy_sent = amazonr_tidy_sent %>% anti_join(stop_words)%>%ungroup()
我尝试了以下方式
wordcounts <- amazonr_tidy_sent %>%
group_by(word, asin)%>%
summarize(word = n())
但这不合适。我假设,没有办法计算,因为作为标记的行不能是 "separated"
非常感谢
如果适合您的分析,您可以多次使用 unnest_tokens()
。
首先,您可以使用 unnest_tokens()
来获取您想要的行。请注意,我添加了一列来跟踪每一行的 ID;你可以随心所欲地调用它,但重要的是要有一个列来记录你在哪一行。
library(tidytext)
library(dplyr)
library(janeaustenr)
d <- data_frame(txt = prideprejudice)
d_lines <- d %>%
unnest_tokens(line, txt, token = "lines") %>%
mutate(id = row_number())
d_lines
#> # A tibble: 10,721 × 2
#> line
#> <chr>
#> 1 pride and prejudice
#> 2 by jane austen
#> 3 chapter 1
#> 4 it is a truth universally acknowledged, that a single man in possession
#> 5 of a good fortune, must be in want of a wife.
#> 6 however little known the feelings or views of such a man may be on his
#> 7 first entering a neighbourhood, this truth is so well fixed in the minds
#> 8 of the surrounding families, that he is considered the rightful property
#> 9 of some one or other of their daughters.
#> 10 "my dear mr. bennet," said his lady to him one day, "have you heard that
#> # ... with 10,711 more rows, and 1 more variables: id <int>
现在您可以再次使用 unnest_tokens()
,但这次使用 words
这样您的每个单词都会得到一行。请注意,您仍然知道每个单词来自哪一行。
d_words <- d_lines %>%
unnest_tokens(word, line, token = "words")
d_words
#> # A tibble: 122,204 × 2
#> id word
#> <int> <chr>
#> 1 1 pride
#> 2 1 and
#> 3 1 prejudice
#> 4 2 by
#> 5 2 jane
#> 6 2 austen
#> 7 3 chapter
#> 8 3 1
#> 9 4 it
#> 10 4 is
#> # ... with 122,194 more rows
现在您可以进行任何类型的计数,例如,您可能想知道每行有多少个单词?
d_words %>%
count(id)
#> # A tibble: 10,715 × 2
#> id n
#> <int> <int>
#> 1 1 3
#> 2 2 3
#> 3 3 2
#> 4 4 12
#> 5 5 11
#> 6 6 15
#> 7 7 13
#> 8 8 11
#> 9 9 8
#> 10 10 15
#> # ... with 10,705 more rows
通过使用 str_split
拆分每一行,我们可以计算每行的单词数。
一些示例数据(包含换行符和停用词):
library(dplyr)
library(tidytext)
d = data_frame(reviewText = c('1 2 3 4 5 able', '1 2\n3 4 5\n6\n7\n8\n9 10 above', '1!2', '1',
'!', '', '\n', '1', 'able able', 'above above', 'able', 'above'),
asin = rep(letters, each = 2, length.out = length(reviewText)))
统计字数:
by_line %>%
group_by(asin) %>%
summarize(word = sum(sapply(strsplit(word, '\s'), length)))
asin word
<chr> <int>
1 a 17
2 b 2
3 c 1
4 d 1
5 e 4
注意:在您的原始代码中,大多数停用词不会被删除,因为您按行拆分了数据。只有完全是单个停用词的行才会被删除。
要从字数中排除停用词,请使用:
by_line %>%
group_by(asin) %>%
summarize(word = word %>% strsplit('\s') %>%
lapply(setdiff, y = stop_words$word) %>% sapply(length) %>% sum)
asin word
<chr> <int>
1 a 15
2 b 2
3 c 1
4 d 1
5 e 0
6 f 0