#r #lsa
#r #lsa
Вопрос:
Я работаю над LSA (используя R) для анализа сходства документов. Вот мои шаги
- Импортировал текстовые данные и создал корпус. Выполняли ли операции с базовым корпусом, такие как извлечение, удаление пробелов и т. Д
- Создано пространство LSA, как показано ниже
tdm <- TermDocumentMatrix(chat_corpus)
tdm_matrix <- as.matrix(tdm)
tdm.lsa <- lw_bintf(tdm_matrix)*gw_idf(tdm_matrix)
lsaSpace <- lsa(tdm.lsa) - Многомерное моделирование (MDS) на LSA
‘
dist.mat.lsa <- dist(t(as.textmatrix(lsaSpace)))
fit <- cmdscale(dist.mat.lsa,eig = T)
points <- data.frame(fit1$points,row.names=chat$text)
Я хочу создать матрицу / фрейм данных, показывающий, насколько похожи тексты (как показано в результате вложения). Строками и столбцами будут совпадающие тексты, а значениями ячеек будут их значения сходства. В идеале значения диагонали будут равны единице 1 (идеальное совпадение), в то время как остальные значения ячеек будут меньше 1.
Пожалуйста, дайте некоторое представление о том, как это сделать. Заранее спасибо
Примечание: я получил код python для этого, но мне нужно то же самое в R
similarity = np.asarray(numpy.asmatrix(dtm_lsa) * numpy.asmatrix(dtm_lsa).T)
pd.DataFrame(similarity,index=example, columns=example).head(10)
Ответ №1:
Для этого вам сначала нужно взять матрицы S_k
и D_k
из созданного вами пространства lsa и умножить S_k
на транспонирование D_k
, чтобы получить матрицу k
by n
, где k
— количество измерений и n
— количество документов. Этот код будет выглядеть следующим образом:
lsaMatrix <- diag(myLSAspace$sk) %*% t(myLSAspace$dk)
Тогда это так же просто, как поместить результирующую матрицу через cosine
функцию из lsa
пакета:
simMatrix <- cosine(lsaMatrix)
Что приведет к n^2
матрице подобия размеров, которую затем можно использовать для кластеризации и т. Д.
Вы можете прочитать больше о матрицах S_k
и D_k
в lsa
документации пакета, они являются выходными данными применяемого SVD.