R 中的 CleanNLP 包:元数据数据框?

CleanNLP package in R: metadata data frame?

假设我的数据框如下所示:

bio_text <- c("Georg Aemilius, eigentlich Georg Oemler, andere Namensvariationen „Aemylius“ und „Emilius“ (* 25. Juni 1517 in Mansfeld; † 22. Mai 1569 in Stolberg (Harz))...", "Johannes Aepinus auch: Johann Hoeck, Huck, Hugk, Hoch oder Äpinus (* um 1499 in Ziesar; † 13. Mai 1553 in Hamburg) war ein deutscher evangelischer Theologe und Reformator.\nAepinus wurde als Sohn des Ratsherrn Hans Hoeck im brandenburgischen Ziesar 1499 geboren...")
doc_id <- c("1", "2")
url <- c("https://de.wikipedia.org/wiki/Georg_Aemilius", "https://de.wikipedia.org/wiki/Johannes_Aepinus")
name <- c("Aemilius, Georg", "Aepinus, Johannes")
place_of_birth <- c("Mansfeld", "Ziesar")

full_wikidata <- data.frame(bio_text, doc_id, url, name, place_of_birth)

我想用 R 中的 cleanNLP 包进行命名实体识别。因此,我初始化了分词器和 spaCy 后端,一切正常:

options(stringsAsFactors = FALSE)
library(cleanNLP)

cnlp_init_tokenizers()

require(reticulate)
cnlp_init_spacy("de")

wikidata <- full_wikidata[,c("doc_id", "bio_text")]
wikimeta <- full_wikidata[,c("url", "name", "place_of_birth")]

spacy_annotatedWikidata <- cleanNLP::cnlp_annotate(wikidata, as_strings = TRUE, meta = wikimeta)

我唯一的问题是元数据。当我 运行 这样时,我收到以下警告消息: In cleanNLP::cnlp_annotate(full_wikidata, as_strings = TRUE, meta = wikimeta) : data与元一起给出的框架输入;忽略后者。老实说,我没有在 cnlp_annotate: "an optional data frame to bind to the document table" 中得到有关 meta 的文档。这意味着我应该提供一个包含元数据的数据框,对吧?!稍后,我希望能够做这样的事情,例如过滤掉文档编号中的所有人员实体。 3:

cnlp_get_entity(spacy_annotatedWikidata) %>%
  filter(doc_id == 3, entity_type == "PER") %>%
  count(entity)

因此,我必须找到一种访问元数据的方法。任何帮助将不胜感激!

幸运的是,在此期间我得到了一些帮助和建议,让我仔细查看 Github 上 cnlp_annotate 的方法代码:https://github.com/statsmaths/cleanNLP/blob/master/R/annotate.R 它说如果输入本身不是数据框而是文件路径,则只能传入元数据数据框。所以如果你想传入一个dataframe,第一行必须是doc_id,第二行是text,其余的会自动被认为是元数据!所以在我的示例中,只需要更改 full_wikidata 中的顺序:

full_wikidata <- data.frame(doc_id, bio_text, url, name, place_of_birth)

像这样可以直接作为clnp_annotate中的输入:

spacy_annotatedWikidata <- cleanNLP::cnlp_annotate(full_wikidata, as_strings = TRUE)