Я работаю с corpuslingr для небольшого проекта НЛП.Я слежу за README, но столкнулся с некоторыми ошибками при его запуске.
Поэтому я хочу обнаружить частоту встречаемости таких вещей, как использование абстрактных существительных или деонтических модальностей, которые включают в себя вспомогательные глаголы 'must'',' должен ',' может ',' может ',' должен ',' должен 'и т. д. Я хотел бы уловить его возможное сопряжение, т. е. не только "она должна", но "она должна была";не только «он может», но «он мог».
Я мог бы использовать для этого POS-тегер, но я не хочу извлекать информацию о каждом слове в корпусе, только некоторые слова из моеговыбор.Каждый текст корпуса представляет собой политическую дискуссию между двумя людьми.Мы хотим знать, используют ли те или иные больше модальных глаголов (поэтому я не хочу, чтобы каждый глагол анализировался), какие-то конкретные абстрактные существительные и т. Д., Чем другие.Дело в том, что я не хочу каждый термин, который они используют, а некоторые грамматические элементы на мой выбор.Вот почему я считаю, что пакет corpuslingr полезен для моих целей.
Поэтому я начинаю предварительную обработку корпуса
myStopwords = c(stopwords(kind="spanish"))
corpus <- tm_map(corpus, removeWords,c(stopwords = myStopwords))
corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, stemDocument)
Токенизация корпуса
myCorpusTokenized <- lapply(corpus, scan_tokenizer)
Создание каждого вектора токена
myTokensStemCompleted <- lapply(myCorpusTokenized, stemCompletion, corpus)
Объединение токенов по документу и создание фрейма данных
myDf <- data.frame(text = sapply(myTokensStemCompleted, paste, collapse = " "), stringsAsFactors = FALSE)
Начиная с пакета corpuslingr
corpus1 <- clr_prep_corpus (myDf, hyphenate = TRUE)
Аннотирование объекта фрейма данных корпуса (да, я 'Я работаю с текстами на испанском языке. Пакет специфичен для английского языка, но я могу без проблем загрузить словарь испанский-анкора из udpipe)
cleanNLP::cnlp_init_udpipe(model_name="spanish-ancora",feature_flag = FALSE, parser = "none")
ann_corpus <- cleanNLP::cnlp_annotate(corpus1$text, as_strings = TRUE, doc_ids = corpus1$doc_id)
Как вы можете прочитать в README из пакета, эта функция готовит аннотированныйКорпус для сложного поиска (как определено выше) путем создания кортежей и установки начала / смещения кортежей.
lingr_corpus <- ann_corpus$token %>%
clr_set_corpus(doc_var='id',
token_var='word',
lemma_var='lemma',
tag_var='pos',
pos_var='upos',
sentence_var='sid',
meta = corpus[,c('doc_id','source','search')])
Здесь возникает проблема.Если я запускаю ^ это сообщение об ошибке и появляется предупреждение
Error in `[.SimpleCorpus`(corpus, , c("doc_id", "source", "search")) :
unused argument (c("doc_id", "source", "search"))
In addition: Warning message:
In order(as.numeric(names(list_dfs))) : NAs introduced by coercion
Я не уверен, если это для запятой в строке "мета", но если я запускаю его без запятой:
Warning message:
In order(as.numeric(names(list_dfs))) : NAs introduced by coercion
Так что, если я попытаюсь вставить несколько кортежей с
paste(lingr_corpus$corpus1[[1]]$tup[200:204], collapse= " ")
, теоретически это должно дать мне что-то вроде (на английском, потому что оно вставлено из файла README)
## [1] "<intervene~intervene~VB> <during~during~IN> <a~a~DT> <Presidential~presidential~JJ> <foreign~foreign~JJ>"
но если я его запусту, это даст мне следующее:
[1] ""
Если я продолжу выполнять команды из README, как это (1)
summary <- corpuslingr::clr_desc_corpus(lingr_corpus,doc="doc_id",
sent="sentence_id", tok="token",upos='pos', genre="search")
, то это бросит меня большеи другие ошибки: _].Ошибка от (1)
Error in setDT(corp$meta) : Item 'meta' not found in names of input list
(2)
search1 <- "ADV"
lingr_corpus %>%
corpuslingr::clr_search_gramx(search=search1)%>%
select(doc_id, search, token, tag)%>%
slice(1:15)
Ошибка от (2)
Error in corpuslingr::clr_search_gramx(., search = search1) :
SEARCH TERM(S) NOT FOUND. See corpuslingr::clr_search_egs for example CQL & syntax.
Так что да, я не уверен, чтопроблема в первой ошибке, с которой я столкнулся, или просто она не работает с испанским языком так же хорошо, как с английским.Я хотел бы знать, является ли это эффектом домино, и я должен исправить с первой ошибки, которую он мне дал, или это просто невозможно с испанским.