Ошибки / предупреждения эффекта домино в пакете НЛП? - PullRequest
0 голосов
/ 14 февраля 2019

Я работаю с 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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...