Применить пользовательский (взвешенный) словарь к тексту на основе анализа настроений - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу изменить этот код, чтобы я мог назначить каждому из этих модальных глаголов разный вес.Идея состоит в том, чтобы использовать нечто похожее на библиотеку NRC, где у нас есть «цифры» 1-5, представляющие категории, а не числа.

modals<-data_frame(word=c("must", "will", "shall", "should", "may", "can"), 
modal=c("5", "4", "4", "3", "2", "1"))

Моя проблема заключается в том, что при запуске следующего кода у меняэто 5 «может» считается таким же, как и «должен».Я хочу, чтобы каждое слово имело различный вес, чтобы, когда я запускаю этот анализ, я мог видеть концентрацию употреблений более сильного «должен» по сравнению с тем, чтобы сказать, что более слабое «может».* с "tidy.DF" - это мой корпус, а "school" и "target" - это имена столбцов.

MODAL<-tidy.DF %>%
  inner_join(modals) %>%
  count(School, Target, modal, index=wordnumber %/% 50, modal) %>%
  spread(modal, n, fill=0)

ggplot(MODAL, aes(index, 5, fill=Target)) +
  geom_col(show.legend=FALSE) +
  facet_wrap(~Target, ncol=2, scales="free_x")

1 Ответ

0 голосов
/ 12 февраля 2019

Вот предложение для лучшего подхода, используя вместо этого пакет quanteda .Подход:

  1. Создайте именованный вектор весов, соответствующий вашему «словарю».
  2. Создание матрицы элементов документа, выбирая только термины в словаре.
  3. Вес наблюдаемого количества.
# set modal values as a named numeric vector
modals <- c(5, 4, 4, 3, 2, 1)
names(modals) <- c("must", "will", "shall", "should", "may", "can")

library("quanteda", warn.conflicts = FALSE)
## Package version: 1.4.0
## Parallel computing: 2 of 12 threads used.
## See https://quanteda.io for tutorials and examples.

Я буду использовать самые последние вступительные речи в качестве воспроизводимого примера здесь.

dfmat <- data_corpus_inaugural %>%
  corpus_subset(Year > 2000) %>%
  dfm() %>%
  dfm_select(pattern = names(modals))

Это даетНеобработанные счетчики.

dfmat
## Document-feature matrix of: 5 documents, 6 features (26.7% sparse).
## 5 x 6 sparse Matrix of class "dfm"
##             features
## docs         will must can should may shall
##   2001-Bush    23    6   6      1   0     0
##   2005-Bush    22    6   7      1   3     0
##   2009-Obama   19    8  13      0   3     3
##   2013-Obama   20   17   7      0   4     0
##   2017-Trump   40    3   1      1   0     0

Взвешивание этого теперь так же просто, как вызов dfm_weight() для повторного взвешивания счетчиков по значениям вашего вектора весов.Функция автоматически применяет веса, используя фиксированное соответствие имен векторных элементов к функциям dfm.

dfm_weight(dfmat, weight = modals)
## Document-feature matrix of: 5 documents, 6 features (26.7% sparse).
## 5 x 6 sparse Matrix of class "dfm"
##             features
## docs         will must can should may shall
##   2001-Bush    92   30   6      3   0     0
##   2005-Bush    88   30   7      3   6     0
##   2009-Obama   76   40  13      0   6    12
##   2013-Obama   80   85   7      0   8     0
##   2017-Trump  160   15   1      3   0     0
...