как передать tibble в spacyr?

#r #spacy #quanteda

#r #spacy #квантовая

Вопрос:

Рассмотрим этот простой пример

 bogustib <- tibble(doc_id = c(1,2,3),
                   text = c('bug', 'one love', '838383838'))

# A tibble: 3 x 2
  doc_id text     
   <dbl> <chr>    
1      1 bug      
2      2 one love 
3      3 838383838
  

Это tibble вызывается bogustib , потому что я знаю, spacyr что произойдет сбой в строке 3.

 > spacy_parse('838383838', lemma = FALSE, entity = TRUE, nounphrase = TRUE)
Error in `$<-.data.frame`(`*tmp*`, "doc_id", value = "text1") : 
  replacement has 1 row, data has 0
  

поэтому, естественно, подача tibble в spacyr также завершится неудачей

 spacy_parse(bogustib, lemma = FALSE, entity = TRUE, nounphrase = TRUE)
Error in `$<-.data.frame`(`*tmp*`, "doc_id", value = "3") : 
  replacement has 1 row, data has 0
  

Мой вопрос таков: я думаю, я могу избежать этой проблемы, вызывая spacy_parse строку за строкой.

Однако это выглядит неэффективно, и я хотел бы использовать multithread аргумент spacyr для ускорения вычислений на моем большом tibble .

Есть ли здесь какое-либо решение? Спасибо!

Ответ №1:

На самом деле, этого не происходит в моей среде. В моей среде вывод имеет вид:

 library(tidyverse)
library(spacyr)

bogustib <- tibble(doc_id = c(1,2,3),
                   text = c('bug', 'one love', '838383838'))

spacy_parse(bogustib)

spacy_parse('838383838', lemma = FALSE, entity = TRUE, nounphrase = TRUE)
## No noun phrase found in documents.
##   doc_id sentence_id token_id     token pos     entity
## 1  text1           1        1 838383838 NUM CARDINAL_B

  

Чтобы получить этот результат, я использовал последнюю версию master на github. Однако я смог воспроизвести вашу ошибку при запуске с CRAN-версией spacyr. Я уверен, что исправил ошибку некоторое время назад, но, похоже, это не отражено на версии CRAN. Мы постараемся обновить CRAN как можно скорее.

В то же время, вы можете:

 devtools::install_github('quanteda/spacyr')
  

Или zip загрузите репозиторий и запустите:

 devtools::install('******')
  

**** это путь к разархивированному репозиторию.