#r #text-mining #corpus #quanteda
#r #интеллектуальный анализ текста #corpus #quanteda
Вопрос:
У меня возникла проблема при запуске того же скрипта, который я написал ранее. Тогда, когда я применил quanteda::corpus к объекту readtext, он вернул объект класса «corpus» и «list». Но когда я запускаю тот же скрипт, он теперь возвращает объекты класса «корпус» и «характер». И это влияет на последующие коды. Что может быть причиной этого и как я могу решить эту проблему?
Вот сценарий:
txt <- readtext("C:/Users/aerol/Desktop/txt_sample")
corpus_txt <- corpus(txt) %>%
corpus_reshape(to = "sentences")
docvars(corpus_txt, "Treaty") <- corpus_txt$documents$`_document`
docvars(corpus_txt, "Year") <- as.integer(stri_sub(corpus_txt$documents$`_document`, -9, -6))
Файлы представляют собой международные договоры. Все имена файлов имеют одинаковый формат, они содержат название договора и год его подписания. И я извлекал их.
Тогда класс corpus txt был «corpus» «список»:
> class(corpus_txt)
[1] "corpus" "list"
Но теперь:
> class(corpus_txt)
[1] "corpus" "character"
> packageVersion("quanteda")
[1] ‘2.1.2’
И я не могу извлечь информацию из корпуса, как я делал раньше. Поскольку я работал над этим с октября прошлого года, я должен был все время использовать одну и ту же версию.
Заранее большое спасибо.
Ответ №1:
Мы изменили внутреннюю структуру корпуса в версии v2 после двухлетнего предупреждения в документации о том, что пользователям не следует напрямую обращаться к внутренним компонентам корпуса, иначе их код вряд ли будет работать в будущих основных версиях.
Из https://github.com/quanteda/quanteda/blob/master/NEWS.md#quanteda-20:
quanteda 2.0 вносит некоторые существенные изменения, подробно описанные здесь.
- Новая структура объекта corpus.
Внутренние компоненты объекта corpus были переработаны и теперь основаны на символьном векторе с мета- и системными данными в атрибутах. Все они обновлены для работы с существующими функциями извлечения и замены. Если вы использовали их раньше, то вы даже не должны заметить изменения. Docvars теперь обрабатываются отдельно от текстов, точно так же, как docvars обрабатываются для объектов tokens.
От ?corpus
:
Для quanteda >= 2.0 это специально классифицированный вектор символов. У него есть много дополнительных атрибутов, но вы не должны обращаться к этим атрибутам напрямую, особенно если вы являетесь автором другого пакета. Вместо этого используйте функции извлечения и замены, иначе ваш код не только станет уродливее, но и может сломаться, если изменится внутренняя структура объекта corpus. Использование функций доступа и замены гарантирует, что будущий код для управления объектами corpus будет продолжать работать.
Решение? Использовать docnames(corpus_txt)
.
Комментарии:
1. Спасибо за ваш ответ, профессор. Но я использовал этот скрипт всего месяц назад, и он работал нормально. Теперь он внезапно начал возвращать разные объекты. Насколько мне известно, с момента начала моего проекта несколько месяцев назад я использовал ту же версию.
2. Можете ли вы включить код вместе с выводом, включая версию пакета?
3. Еще раз спасибо за быстрый ответ. Я соответствующим образом отредактировал вопрос.
4. См . Дополнение о
docnames()
программе .5. Спасибо за ваше время и заботу, профессор, я это сделаю.