NLP软件包中的Domino效应错误/警告?

时间:2019-02-14 11:12:50

标签: r nlp

我正在与corpuslingr合作进行NLP小项目。我正在阅读自述文件,但运行它时遇到一些错误。

因此,我想检测事物发生的频率,例如使用抽象名词或定语形式,包括辅助动词“必须”,“必须”,“可能”,“可以”,“应该”,“应该,等等。我想捕捉一下它可能发生的变化,即,不仅“她必须”而且“她必须”;不仅“他可以”而且“他可以”。

我可以使用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)

注释主体数据帧对象(是的,我正在处理西班牙语文本。程序包是特定于英语的,但是我可以加载西班牙语-ancora词典,而不会出现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)

正如您可以从包中读取自述文件一样,此函数通过构建元组和设置元组的开始/偏移来为带注释的语料库(如上文定义)做好准备。

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 

我不确定它是否用于“ meta”行中的逗号,但是如果我不使用逗号运行它:

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] ""

如果我一直这样运行自述文件中的命令(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.

是的,我不确定问题是否出在我遇到的第一个错误上,还是因为它不能像西班牙语一样好于西班牙语。我想知道这是不是多米诺骨牌效应,我应该从它给我的第一个错误中解决,或者用西班牙语是不可能的。

0 个答案:

没有答案