#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('******')
****
это путь к разархивированному репозиторию.