Применить пользовательский (взвешенный) словарь к тексту на основе анализа настроений
Я пытаюсь настроить этот код так, чтобы я мог назначить каждому из этих модальных глаголов различный вес. Идея состоит в том, чтобы использовать что-то похожее на библиотеку 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 ответ
Вот предложение для лучшего подхода, используя вместо этого пакет quanteda. Подход:
- Создайте именованный вектор весов, соответствующий вашему "словарю".
- Создайте матрицу элементов документа, выбирая только термины в словаре.
- Вес наблюдаемого количества.
# 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