我想通过仅使用特定 POS 标签的单词来计算文本相似度。目前我正在使用余弦方法计算相似度,但它没有考虑 POS 标记。
A <- data.frame(name = c(
"X-ray right leg arteries",
"consultation of gynecologist",
"x-ray leg arteries",
"x-ray leg with 20km distance"
), stringsAsFactors = F)
B <- data.frame(name = c(
"X-ray left leg arteries",
"consultation (inspection) of gynecalogist",
"MRI right leg arteries",
"X-ray right leg arteries with special care"
), stringsAsFactors = F)
corp1 <- corpus(A, text_field = "name")
corp2 <- corpus(B, text_field = "name")
docnames(corp1) <- paste("A", seq_len(ndoc(corp1)), sep = ".")
docnames(corp2) <- paste("B", seq_len(ndoc(corp2)), sep = ".")
dtm3 <- rbind(dfm(corp1, ngrams=2), dfm(corp2, ngrams=2))
cosines <- lapply(docnames(corp2),
function(x) textstat_simil(dtm3[c(x, docnames(corp1)), ],
method = "cosine",
selection = x)[-1, , drop = FALSE])
do.call(cbind, cosines)
在上面的示例中,“X 射线右腿动脉”不应映射到“MRI 右腿动脉”,因为这是两种不同的服务类别。不幸的是,我没有明确的服务分类。我只有服务文本。是否有可能通过使用 POS 标记,我可以更加重视这些词——“X 射线”、“咨询”、“腿”和“动脉”。代码中提到的服务只是一个示例。实际上,我有超过 10K 的服务。我探索了用于 PoS 标记的 udpipe 包,但没有取得多大成功。