пользовательские словари в Quanteda - PullRequest
0 голосов
/ 19 января 2019

Мне нужно выполнить LIWC (Linguistic Inquiry и Word Count), и я использую quanteda / quanteda.dictionaries. Мне нужно «загрузить» пользовательские словари: я сохранил свои списки слов в виде отдельных файлов .txt и «загрузить» сквозные readlines (например, только с одним словарем):

autonomy = readLines("Dictionary/autonomy.txt", encoding = "UTF-8")

EODic<-quanteda::dictionary(list(autonomy=autonomy),encoding = "auto")

Это текст, который я пробую на

txt <- c("12th Battalion Productions is producing a fully holographic feature length production. Presenting a 3D audio-visual projection without a single cast member present, to give the illusion of live stage performance.")

Тогда я запускаю это:

liwcalike(txt, EODic, what = "word")

и получите эту ошибку:

Error in stri_replace_all_charclass(value, "\\p{Z}", concatenator) : 


invalid UTF-8 byte sequence detected; perhaps you should try calling stri_enc_toutf8()

Очевидно, проблема в моем текстовом файле. У меня довольно много словарей, и я загружаю их как файлы.

Как я могу исправить эту ошибку? указание кодировки в readlines, похоже, не помогает

Вот файл https://drive.google.com/file/d/12plgfJdMawmqTkcLWxD1BfWdaeHuPTXV/view?usp=sharing

Обновление: самый простой способ решить эту проблему на Mac - открыть файл .txt в Word, а не в TextEdit. Word предоставляет опции для кодирования в отличие от стандартного TextEdit!

1 Ответ

0 голосов
/ 21 января 2019

ОК, проблема не в кодировке, так как все в связанном файле может быть полностью закодировано в нижнем 128-значном ASCII. Проблема была в пробелах, вызванных пустыми строками. Есть также ведущие места, которые нуждаются в удалении. Это легко сделать, используя некоторые поднаборы и некоторые stringi операции очистки.

library("quanteda")
## Package version: 1.3.14

autonomy <- readLines("~/Downloads/risktaking.txt", encoding = "UTF-8")
head(autonomy, 15)
##  [1] "adventuresome"  " adventurous"   " audacious"     " bet"          
##  [5] " bold"          " bold-spirited" " brash"         " brave"        
##  [9] " chance"        " chancy"        " courageous"    " danger"       
## [13] ""               "dangerous"      " dare"

# strip leading or trailing whitespace
autonomy <- stringi::stri_trim_both(autonomy)
# get rid of empties
autonomy <- autonomy[!autonomy == ""]

Теперь вы можете создать словарь и применить функцию quanteda.dictionaries::liwcalike().

# now define the quanteda dictionary
EODic <- dictionary(list(autonomy = autonomy))

txt <- c("12th Battalion Productions is producing a fully holographic feature length production. Presenting a 3D audio-visual projection without a single cast member present, to give the illusion of live stage performance.")

library("quanteda.dictionaries")
liwcalike(txt, dictionary = EODic)
##   docname Segment WC  WPS Sixltr Dic autonomy AllPunc Period Comma Colon
## 1   text1       1 35 15.5  34.29   0        0   11.43   5.71  2.86     0
##   SemiC QMark Exclam Dash Quote Apostro Parenth OtherP
## 1     0     0      0 2.86     0       0       0   8.57
...