проблема при загрузке текстового файла в R - PullRequest
0 голосов
/ 02 мая 2018

Я хочу загрузить текст из Project Gutenberg, и я сделал следующий код:

setwd("D:\\sourceCode")
TEXTFILE = "pg100.txt"
if (!file.exists(TEXTFILE)) {
    download.file("http://www.gutenberg.org/cache/epub/100/pg100.txt", destfile = TEXTFILE)
}
shakespeare = readLines(TEXTFILE)

Проблема в том, что я получил следующие сообщения:

Warning messages:
1: In readLines(TEXTFILE) : invalid or incomplete compressed data
2: In readLines(TEXTFILE) : incomplete final line found on 'pg100.txt'

На самом деле я следую учебнику, который находится в:

https://www.r -bloggers.com / текст-горно-з-полная-работа-оф-Вильгельма-Shakespeare /

Тогда, когда я хочу получить длину документа с помощью:

длина (Shakespeare)

Данные, которые я получаю:

[1] 55

но в соответствии с руководством, которое я дал ранее, данные должны быть:

[1] 124787

что не так? Спасибо

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Загруженный файл представляет собой gzip архив, а не текстовый файл.

Либо распакуйте вручную, либо сделайте

TEXTFILE = "pg100.txt.gz"
if (!file.exists(TEXTFILE)) {
    download.file("http://www.gutenberg.org/cache/epub/100/pg100.txt", destfile = 
TEXTFILE)
}
shakespeare = readLines(gzfile(TEXTFILE))
head(shakespeare)
#[1] "The Project Gutenberg EBook of The Complete Works of William Shakespeare, by"
#[2] "William Shakespeare"
#[3] ""
#[4] "This eBook is for the use of anyone anywhere at no cost and with"
#[5] "almost no restrictions whatsoever.  You may copy it, give it away or"
#[6] "re-use it under the terms of the Project Gutenberg License included"

length(shakespeare)
#[1] 124787

Обновление

В Windows кажется, что вам нужно установить явный двоичный режим передачи (поскольку рассматриваемый файл - не текстовый файл, а двоичный архив):

TEXTFILE = "pg100.txt.gz"
if (!file.exists(TEXTFILE)) {
    download.file("http://www.gutenberg.org/cache/epub/100/pg100.txt", destfile = 
TEXTFILE, mode = "wb")
}
shakespeare = readLines(gzfile(TEXTFILE))
0 голосов
/ 02 мая 2018

Поскольку вы пытаетесь прочитать файл из http://www.gutenberg.org, вы можете использовать пакет gutenbergr. Учебник, на который вы указываете, довольно старый, и пакет не существовал на момент написания. Преимущество пакета в том, что вы не сталкиваетесь с проблемами загрузки / чтения в зависимости от вашей операционной системы.

library(gutenbergr)

# if you know which gutenberg id it is. (EBook-No. on gutenberg website)
# otherwise use other gutenbergr code to find authors and works. See vignette for more info

# complete works of Shakespeare is EBook-No. 100
shakespeare <- gutenberg_download(100) 

head(shakespeare)
# A tibble: 6 x 2
  gutenberg_id text                                                             
         <int> <chr>                                                            
1          100 Shakespeare                                                      
2          100 ""                                                               
3          100 *This Etext has certain copyright implications you should read!* 
4          100 ""                                                               
5          100 <<THIS ELECTRONIC VERSION OF THE COMPLETE WORKS OF WILLIAM       
6          100 SHAKESPEARE IS COPYRIGHT 1990-1993 BY WORLD LIBRARY, INC., AND IS
0 голосов
/ 02 мая 2018

Просто включите параметр mode следующим образом:

download.file("http://www.gutenberg.org/cache/epub/100/pg100.txt", destfile = TEXTFILE, mode = "wb")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...