Объединить корпус в тм 0.7.3
Использование пакета интеллектуального анализа текста tm
для R следующие версии работают в версии 0.6.2, R версии 3.4.3:
library(tm)
a = "This is the first document."
b = "This is the second document."
c = "This is the third document."
d = "This is the fourth document."
docs1 = VectorSource(c(a,b))
docs2 = VectorSource(c(c,d))
corpus1 = Corpus(docs1)
corpus2 = Corpus(docs2)
corpus3 = c(corpus1,corpus2)
inspect(corpus3)
<<VCorpus>>
Metadata: corpus specific: 0, document level (indexed): 0
Content: documents: 4
Тем не менее, тот же код в tm
версия 0.7.3 (версия 3.4.2 R) выдает ошибку:
Error in UseMethod("inspect", x) :
no applicable method for 'inspect' applied to an object of class "list"
В соответствии с vignette("tm",package="tm")
, c()
функция перегружена:
Множество стандартных операторов и функций (
[, [<-, [[, [[<-, c(), lapply()
) доступны для корпусов с семантикой, аналогичной стандартным подпрограммам R. Например,c()
объединяет две (или более) корпуса. Применительно к нескольким текстовым документам он возвращает корпус. Метаданные автоматически обновляются, если корпуса объединяются (т. Е. Объединяются).
Однако для новой версии это, очевидно, уже не так. Как объединить две тела в tm
0.7.3? Очевидное решение состоит в том, чтобы сначала объединить документы, а затем создать корпус, но я ищу решение для объединения двух уже существующих корпораций.
1 ответ
У меня нет большого опыта работы с tm
пакет, так что мой ответ может не хватить некоторого нюанса в понимании SimpleCorpus
против VCorpus
против других tm
классы объектов.
Входы для вашего звонка c
класс SimpleCorpus
; это не похоже на tm
поставляется с c
Метод специально для этого класса. Таким образом, метод отправки не вызывает правильное c
объединить Корпора так, как вы хотите. Тем не менее, есть c
метод для VCorpus
учебный класс (tm:::c.VCorpus
).
Есть 2 разных способа преодолеть проблему принуждения corpus3
к list
, но они, кажется, приводят к различным структурам. Я представляю оба ниже и оставляю это на ваше усмотрение, если они достигают вашей конечной цели.
1) Вы можете позвонить tm:::c.VCorpus
непосредственно при определении corpus3
:
> library(tm)
>
> a = "This is the first document."
> b = "This is the second document."
> c = "This is the third document."
> d = "This is the fourth document."
> docs1 = VectorSource(c(a,b))
> docs2 = VectorSource(c(c,d))
> corpus1 = Corpus(docs1)
> corpus2 = Corpus(docs2)
>
> corpus3 = tm:::c.VCorpus(corpus1,corpus2)
>
> inspect(corpus3)
<<VCorpus>>
Metadata: corpus specific: 2, document level (indexed): 0
Content: documents: 4
[1] This is the first document. This is the second document. This is the third document.
[4] This is the fourth document.
2) Вы можете использовать VCorpus
при определении corpus1
& corpus2
:
> library(tm)
>
> a = "This is the first document."
> b = "This is the second document."
> c = "This is the third document."
> d = "This is the fourth document."
> docs1 = VectorSource(c(a,b))
> docs2 = VectorSource(c(c,d))
> corpus1 = VCorpus(docs1)
> corpus2 = VCorpus(docs2)
>
> corpus3 = c(corpus1,corpus2)
>
> inspect(corpus3)
<<VCorpus>>
Metadata: corpus specific: 0, document level (indexed): 0
Content: documents: 4
[[1]]
<<PlainTextDocument>>
Metadata: 7
Content: chars: 27
[[2]]
<<PlainTextDocument>>
Metadata: 7
Content: chars: 28
[[3]]
<<PlainTextDocument>>
Metadata: 7
Content: chars: 27
[[4]]
<<PlainTextDocument>>
Metadata: 7
Content: chars: 28