Ошибка при чтении китайского в txt: corpus () работает только с символами, корпусами, корпусами, data.frame, kwi c объектами - PullRequest
3 голосов
/ 28 января 2020

Я пытаюсь создать облако слов и получить частоту слов для китайской речи, используя 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


Мой текстовый файл содержит следующие абзацы:

enter image description here

Ошибка начинается, когда я создаю корпус , R возвращает:

Error in corpus.default(v36.seg) : 
  corpus() only works on character, corpus, Corpus, data.frame, kwic objects.

Я не понимаю, почему текст проблематичен c. Благодарен, если вы можете помочь мне решить проблему. Спасибо.

Ответы [ 2 ]

1 голос
/ 28 января 2020

Учитывая ваш текстовый пример в комментариях, я поместил их в текстовый файл. Далее, следуя инструкциям Кена, вы увидите, что текст хорошо доступен в Quanteda. Оттуда вы можете сделать все НЛП, что вам нужно. Посмотрите пример на китайском на страницах справки 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 голосов
/ 28 января 2020

Невозможно сказать без воспроизводимого примера, но я могу предложить две вещи, которые, вероятно, решат эту проблему. Первый - упростить чтение вашего текстового файла с помощью пакета readtext . Во-вторых, вам определенно нужен токенайзер «word», а не «quickword», который просто разбивается на пробелы - который китайцы не используют между словами. «слово» знает границы китайского слова.

Попробуйте это:

library("quanteda")

readtext::readtext("v36.rtxt") %>%
    corpus() %>%
    tokens(what = "word") %>%
    dfm()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...