提问人:ronzenith 提问时间:1/28/2020 最后编辑:phiverronzenith 更新时间:1/28/2020 访问量:781
在 txt 中读取中文时出错:corpus() 仅适用于字符、语料库、语料库、data.frame、kwic 对象
Error in reading Chinese in txt: corpus() only works on character, corpus, Corpus, data.frame, kwic objects
问:
我尝试使用 R、jiebaR 和语料库生成词云并获取中文语音的词频,但无法制作语料库。这是我的代码:
library(jiebaR)
library(stringr)
library(corpus)
cutter <- worker()
v36 <- readLines('v36.txt', encoding = 'UTF-8')
seg_x <- function(x) {str_c(cutter[x], collapse = '')}
x.out <- sapply(v36, seg_x, USE.NAMES = FALSE)
v36.seg <- x.out
v36.seg
library(quanteda)
corpus <- corpus(v36.seg) #Error begins here.
summary(corpus, showmeta = TRUE, 1)
texts(corpus)[1]
tokens(corpus, what = 'fasterword')[1]
tokens <- tokens(v36.seg, what = 'fasterword')
dfm <- dfm(tokens)
dfm
我的文本文件包括以下段落:
当我创建语料库时,错误开始。R 返回:
Error in corpus.default(v36.seg) :
corpus() only works on character, corpus, Corpus, data.frame, kwic objects.
我不明白为什么文本有问题。如果你能帮我解决问题,不胜感激。谢谢。
答:
0赞
Ken Benoit
1/28/2020
#1
如果没有一个可重复的例子,就不可能说出来,但我可以提出两件事,可能会解决这个问题。第一种是使用 readtext 包简化文本文件的读取。第二,你肯定想要“word”分词器,而不是“fasterword”,它只是在空格上拆分——中文在单词之间不使用。“word”知道中文单词的边界。
试试这个:
library("quanteda")
readtext::readtext("v36.rtxt") %>%
corpus() %>%
tokens(what = "word") %>%
dfm()
1赞
phiver
1/28/2020
#2
鉴于您在评论中的文本示例,我将这些放在文本文件中。接下来,按照 Ken 的说明,您将看到该文本在 quanteda 中很好。从那里你可以做你需要的所有NLP。请查看 quanteda 参考页面上的中文示例。
免责声明:我似乎无法将您的评论中的中文示例文本粘贴到此答案中,因为系统认为我在发送垃圾邮件:-(
library(quanteda)
library(readtext)
v36 <- readtext::readtext("v36.txt", encoding = "UTF8")
my_dfm <- v36 %>% corpus() %>%
tokens(what = "word") %>%
dfm()
# show frequency to check if words are available.
dplyr::as_tibble(textstat_frequency(my_dfm))
# A tibble: 79 x 5
feature frequency rank docfreq group
<chr> <dbl> <int> <dbl> <chr>
1 , 6 1 1 all
2 政府 6 1 1 all
3 。 5 3 1 all
4 在 3 4 1 all
5 的 3 4 1 all
6 安排 3 4 1 all
7 發言人 2 7 1 all
8 ( 2 7 1 all
9 一月 2 7 1 all
10 ) 2 7 1 all
# ... with 69 more rows
评论
0赞
ronzenith
1/28/2020
你关于中文的例子的链接似乎非常有用。一会儿会读。一件事:我看到评论“为 macOS 正确设置字体”。如果我使用 Windows 和 Ubuntu 怎么办?
0赞
phiver
1/28/2020
@ronzenith,不确定 Ubuntu 是否应该成为问题,linux 往往更擅长处理非拉丁字符集,Windows 始终是一个问题,这就是我在阅读文本时将编码指定为 UTF-8 的原因。
0赞
ronzenith
1/28/2020
是的。我使用Windows,需要设置R才能在begnning时阅读中文:Setlocale cht
评论