Пакет CleanNLP в фрейме данных R: метаданные?

Давайте предположим, что мой dataframe выглядит так:

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)

Я хочу выполнить распознавание именованных объектов с помощью пакета cleanNLP в R. Поэтому я инициализирую токенизаторы и бэкэнд spaCy, все работает нормально:

options(stringsAsFactors = FALSE)
library(cleanNLP)

cnlp_init_tokenizers()

require(reticulate)
cnlp_init_spacy("de")

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

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

Моя единственная проблема - это метаданные. Когда я запускаю его так, я получаю следующее предупреждающее сообщение: В cleanNLP::cnlp_annotate(full_wikidata, as_strings = TRUE, meta = wikimeta): ввод фрейма данных вместе с meta; игнорируя последнее. Если честно, я не получаю документацию, касающуюся meta в cnlp_annotate: "необязательный фрейм данных для привязки к таблице документов". Это означает, что я должен доставить фрейм данных, содержащий метаданные, верно?! Позже я хочу иметь возможность делать что-то подобное, например, отфильтровывать все сущности человека в документе №. 3:

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

Поэтому мне нужно найти способ доступа к метаданным. Любая помощь будет высоко оценен!

1 ответ

Решение

К счастью, в то же время я получил некоторую помощь и совет, чтобы поближе взглянуть на код метода cnlp_annotate на Github: https://github.com/statsmaths/cleanNLP/blob/master/R/annotate.R Это говорит о том, что вы можете передавать метаданные только в том случае, если сам ввод - не фрейм данных, а путь к файлу. Так что если вы хотите передать данные, первая строка должна быть 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)
Другие вопросы по тегам