У меня есть фрейм данных с примерно 100 тыс. строк, содержащих текстовые данные. Используя пакет Quanteda, я применяю анализ тональности (словарь Lexicoder), чтобы в конечном итоге рассчитать оценку тональности. В качестве дополнительного — более качественного — шага анализа я хотел бы извлечь основные характеристики (т. е. отрицательные/положительные слова из словаря, которые чаще всего встречаются в моих данных), чтобы проверить, управляется ли дискурс конкретными словами.
my_corpus <- corpus(my_df, docid_field = "ID", text_field = "my_text", metacorpus = NULL, compress = FALSE)
sentiment_corp <- dfm(my_corpus, dictionary = data_dictionary_LSD2015)
Однако, перебирая документация Quanteda, я так и не понял, как этого добиться - есть ли способ?
Я знаю о topfeatures и читал этот вопрос, но это не помогло.





Во всех функциях квантэда, которые принимают аргумент pattern, допустимыми типами шаблонов являются векторы символов, списки и словари. Таким образом, лучший способ оценить каждую из лучших функций в каждой категории словаря (то, что мы также называем словарем ключ) — это выбрать этот словарь, а затем использовать topfeatures().
Вот как это сделать, используя встроенный объект data_corpus_irishbudget2010, например, со словарем тональности Lexicoder.
library("quanteda")
## Package version: 1.4.3
# tokenize and select just the dictionary value matches
toks <- tokens(data_corpus_irishbudget2010) %>%
tokens_select(pattern = data_dictionary_LSD2015)
lapply(toks[1:5], head)
## $`Lenihan, Brian (FF)`
## [1] "severe" "distress" "difficulties" "recovery"
## [5] "benefit" "understanding"
##
## $`Bruton, Richard (FG)`
## [1] "failed" "warnings" "sucking" "losses" "debt" "hurt"
##
## $`Burton, Joan (LAB)`
## [1] "remarkable" "consensus" "Ireland" "opposition" "knife"
## [6] "dispute"
##
## $`Morgan, Arthur (SF)`
## [1] "worst" "worst" "well" "corrupt" "golden" "protected"
##
## $`Cowen, Brian (FF)`
## [1] "challenge" "succeeding" "challenge" "oppose"
## [5] "responsibility" "support"
Чтобы изучить лучшие совпадения для положительной записи, мы можем выбрать их дальше, подставив словарь для положительного ключа.
# top positive matches
tokens_select(toks, pattern = data_dictionary_LSD2015["positive"]) %>%
dfm() %>%
topfeatures()
## benefit support recovery fair create confidence
## 68 52 44 41 39 37
## provide well credit help
## 36 33 31 29
И для негатива:
# top negative matches
tokens_select(toks, pattern = data_dictionary_LSD2015[["negative"]]) %>%
dfm() %>%
topfeatures()
## ireland benefit not support crisis recovery
## 79 68 52 52 47 44
## fair create deficit confidence
## 41 39 38 37
Почему "Ирландия" отрицательный матч? Поскольку LSD2015 включает ir* в качестве отрицательного слова, которое предназначено для соответствия гнев и гневный, но с нечувствительным к регистру соответствием по умолчанию, также соответствует Ирландия (термин, часто используемый в этом примере корпуса). Это пример «ложноположительного» совпадения, всегда связанного со словарями при использовании подстановочных знаков или при использовании такого языка, как английский, который имеет очень высокий уровень полисем и омографов.