Проблема с кодировкой символьных строк при загрузке файлов json в RStudio в Windows 10 - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь извлечь твиты из json файлов и сохранить их как RData в Windows 10, используя RStudio версии 1.2.5033 и streamR . Однако Windows (и впоследствии RStudio и streamR) предполагают, что входное значение равно Windows -1252, хотя это UTF-8, что приводит к серьезным проблемам кодирования .

Чтобы воспроизвести проблему, используйте этот json файл с двумя поддельными твитами, поскольку я не смог воспроизвести структуру исходных файлов json в R. Но эта структура приводит к проблемы с единственным решением, которое я нашел для проблемы кодирования (см. ниже).

Код , который я использовал , следующий:

df <- streamR::parseTweets("test.json")

Выход Я получаю с df $ text: '[1] "RT @bkabka: Eikö tämä" "RT @bkabka: Espaà ± a"'.

Вывод должен be : '[1] "RT @bkabka: Eikö tämä" "RT @bkabka: España"'.

Поэтому мой вопрос: (Как) я могу сказать R и streamR интерпретировать текст как кодированный с использованием UTF-8, а не Windows -1252?

Поскольку все это происходит из-за того, что функция ошибочно предполагает, что текст закодирован с помощью Windows -1252, , одним решением будет go через весь корпус и замена всех этих неправильно интерпретированных специальных символов на правильный, например, используя таблицу, которую я нашел здесь . В моем случае, однако, корпус очень очень большой, что делает это очень неоптимальным решением в долгосрочной перспективе. Кроме того, у меня не было бы возможности проверить, действительно ли он правильно заменил все специальные символы.


Некоторая дополнительная информация :

Использование r json и следующий код каким-то образом заставляет R правильно интерпретировать кодировку, но имеет проблемы со структурой файлов json, поскольку он извлекает только первую строку:

lt <- rjson::fromJSON(file="test.json")

Я полагаю, он не может извлечь следующую строку, потому что он не распознает разрыв строки, который является фактическим разрывом строки, а не \ n или любой другой комбинацией символов. К сожалению, у меня нет возможности изменить файлы json.

Файлы json были созданы другим пользователем под macOS с использованием streamR - если я не ошибаюсь.

Та же проблема возникает при использовании простого R вместо RStudio. Проблема не появляется на macOS.

Проблема еще более серьезна при использовании tweet2r, единственный известный мне пакет, который позволяет извлекать твиты из json файлов с помощью R. Tweet2r удаляет указанные c специальные символы, такие как «¶» и, таким образом, неправильно интерпретированные специальные символы больше не могут быть заменены правильными.

1 Ответ

0 голосов
/ 10 марта 2020

Благодаря MrFlick (см. Его комментарий), вот решение с использованием jsonlite , которое приводит к очень похожей структуре фрейма данных и правильно читает кодировку:

df <- jsonlite::stream_in(file("~/../Downloads/test.json"))

Только некоторые Дополнительная информация для тех, кто привык к роскоши обработки потоковых твитов, которые могут столкнуться с подобной проблемой в будущем, содержит два основных различия во фреймах данных, созданных parseTweets и stream_in :

  1. parseTweets не извлекает данные для сломанных твитов. stream_in делает. Следовательно, фрейм данных имеет больше строк при использовании stream_in, но содержит те же твиты.

  2. stream_in создает меньше переменных, поскольку некоторые столбцы в фрейме данных сами являются фреймами данных. Это может привести к проблемам при использовании фрейма данных без дальнейшего преобразования фрейма данных, созданного с помощью stream_in. ParseTweets делает это за вас.

...