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