コメントとメイン投稿の2つのテキストフィールドを持つデータフレームがあります
基本的にこれは構造です
id comment post_text
1 "I think that blabla.." "Why is blabla.."
2 "Well, you should blabla.." "okay, blabla.."
3 ...
行1のコメントのテキストと行1のpost_textのテキストの類似性を計算し、これをすべての行に対して実行します。私の知る限り、2種類のテキスト用に別々のdfmオブジェクトを作成する必要があります
corp1 <- corpus(r , text_field= "comment")
corp2 <- corpus(r , text_field= "post_text")
dfm1 <- dfm(corp1)
dfm2 <- dfm(corp2)
最後に、私はこのようなものを取得したいと思います:
id comment post_text similarity
1 "I think that blabla.." "Why is blabla.." *similarity between comment1 and post_text1
2 "Well, you should blabla.." "okay, blabla.." *similarity between comment2 and post_text2
3 ...
続行する方法がわかりません。これは、ドキュメント間のStackOverflowペアワイズ距離で見つかりましたが、行ごとの類似性が必要な間、dfm間の相互類似性を計算しています。
だから基本的に私が思ったのは次のことをすることでした:
dtm <- rbind(dfm(corp1), dfm(corp2))
d2 <- textstat_simil(dtm, method = "cosine", diag = TRUE)
matrixsim<- as.matrix(d2)[docnames(corp1), docnames(corp2)]
diagonale <- diag(matrixsim)
しかし、対角線は1 1 11のリストにすぎません。
この問題をどのように解決できるかについてのアイデアはありますか?よろしくお願いします。
カルロ
ドキュメントの単一の列を作成することでそれを行いますが、ドキュメントのタイプを示すdocnameを使用してそれらを区別します。
df <- data.frame(
id = c(1, 2),
comment = c(
"I think that blabla..",
"Well, you should blabla"
),
post_text = c(
"Why is blabla",
"okay, blabla"
),
stringsAsFactors = FALSE
)
# stack these into a single "document" column, plus a docvar
# identifying the document type
df <- tidyr::gather(df, "source", "text", -id)
df
## id source text
## 1 1 comment I think that blabla..
## 2 2 comment Well, you should blabla
## 3 1 post_text Why is blabla
## 4 2 post_text okay, blabla
library("quanteda")
## Package version: 1.4.3
## Parallel computing: 2 of 12 threads used.
## See https://quanteda.io for tutorials and examples.
##
## Attaching package: 'quanteda'
## The following object is masked from 'package:utils':
##
## View
corp <- corpus(df)
docnames(corp) <- paste(df$id, df$source, sep = "_")
dfm(corp) %>%
textstat_simil()
## 1_comment 2_comment 1_post_text
## 2_comment -0.39279220
## 1_post_text -0.14907120 -0.09759001
## 2_post_text -0.14907120 0.29277002 0.11111111
これで、マトリックスサブセットを使用して必要なものを切り取ることができます。(as.matrix()
からの出力をtextstat_simil()
行列に変換するために使用します。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加