Я пытаюсь запустить пакет Python gensim в среде R через сетку. В частности, я пытаюсь построить модель doc2ve c, для которой необходимо подготовить корпус токенов и тегов.
Функция TaggedDocument - это то, где у меня возникают проблемы. Вот пример в python того, что я пытаюсь воспроизвести в R:
import pandas as pd
import numpy as np
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
from nltk.tokenize import word_tokenize
data = ["this is the first sentence",
"running doc2vec via reticulate",
"r and python bff forever",
"this aint working"]
tags = ["a","b","a","c"]
corpus = pd.DataFrame({"sentences": data, "labels": tags})
tagged_data = corpus.apply(
lambda r: TaggedDocument(words=word_tokenize(r['sentences']), tags=[r.labels]), axis=1)
Это приводит к выводу такого типа:
0 ([this, is, the, first, sentence], [a])
1 ([running, doc2vec, via, reticulate], [b])
2 ([r, and, python, bff, forever], [a])
3 ([this, aint, working], [c])
dtype: object
, который можно использовать для построения словарный запас и обучить модели doc2ve c.
Как получить такой же результат в R (возможно, без циклов)?
library(reticulate)
gensim <- import("gensim")
Doc2Vec <- gensim$models$Doc2Vec
TaggedDocument <- gensim$models$doc2vec$TaggedDocument
sentences <- c("this is the first sentence",
"running doc2vec via reticulate",
"r and python bff forever",
"this aint working")
labels <- c("a","b","c","a")
Заранее спасибо!
* РЕДАКТИРОВАТЬ *
Я пробовал еще более простую настройку:
library(reticulate)
gensim <- import("gensim")
Doc2Vec <- gensim$models$Doc2Vec
TaggedDocument <- gensim$models$doc2vec$TaggedDocument
sentences <- c("this is the first sentence")
tags <- c("a")
df <- data.frame (tokens= sentences, labels = tags)
tagged_docs <- TaggedDocument(words = df$tokens, tags = df$labels)
, но продолжаю получать одно и то же сообщение об ошибке:
Ошибка цитаты в py_call_impl (вызываемый, точки $ args, точки $ ключевые слова): AttributeError: у объекта 'str' нет атрибута 'words' - Подробная трассировка: Файл "C: \ Anaconda \ lib \ site-packages \ gensim \ models \ doc2ve c .py ", строка 1184, в build_vocab progress_per = progress_per, trim_rule = trim_rule Файл" C: \ Anaconda \ lib \ site-packages \ gensim \ models \ doc2ve c .py " строка 1381, в файле scan_vocab total_words, corpus_count = self._scan_vocab (документы, документы, progress_per, trim_rule) Файл "C: \ Anaconda \ lib \ site-packages \ gensim \ models \ doc2ve c .py ", строка 1310, в _scan_vocab, если isinstance (document.words, string_types):
- -
Что я делаю не так?