目標
約450文献から16文献を抽出する。
(実際に過去に行った作業であり16文献はその結果である)
まずは16文献がどのように散らばっているかを見てみよう。
まんべんなく散らばっていることがわかる。
今回はそれらを集めることが目標。
データの準備
約10万文献から作成した「voc」「word_vectors」を使用。
下記を参照。
touch-sp.hatenablog.com
実際の作業
library(text2vec) voc <- readRDS("voc") word_vectors <- readRDS("word_vectors") pmid <- readLines("PMID.txt") Absts <- readLines("Absts.txt") #CQを想定して適当に単語を羅列 cq = "smoking increase risk mortality cardiovascular disease development renal failure patient with CKD" #データにCQを追加 Absts <- c(cq, Absts) pmid <- c("0000", pmid) it <- itoken(Absts, tolower, word_tokenizer, ids = pmid) dtm <- create_dtm(it, vocab_vectorizer(voc)) model_tfidf = TfIdf$new(smooth_idf = FALSE, sublinear_tf = TRUE, norm = "l1") dtm_tfidf = model_tfidf$fit_transform(dtm) doc_vectors <- dtm_tfidf %*% word_vectors answer <- doc_vectors["0000",, drop = FALSE] cos_sim <- sim2(x = doc_vectors, y = answer, method = "cosine", norm = "l2") result <- sort(cos_sim[, 1], decreasing = TRUE)[-1]
結果の確認
seikai <- readLines("seikai.txt") bar <- names(result) %in% seikai barplot(bar, axes = F)
もともとのばらつき。
実施後。
少しは左に片寄ったと思うがまだまだ不十分のような気がする。
データの加工(1)
trim <- function(input_string) { result <- gsub("\\bincreasing\\b", "increase", input_string, ignore.case = TRUE, perl = TRUE) result <- gsub("\\bincreases\\b", "increase", result, ignore.case = TRUE, perl = TRUE) result <- gsub("\\bincreased\\b", "increase", result, ignore.case = TRUE, perl = TRUE) result <- gsub("\\bdecreasing\\b", "decrease", result, ignore.case = TRUE, perl = TRUE) result <- gsub("\\bdecreases\\b", "decrease", result, ignore.case = TRUE, perl = TRUE) result <- gsub("\\bdecreased\\b", "decrease", result, ignore.case = TRUE, perl = TRUE) result <- gsub("\\bfactors\\b", "factor", result, ignore.case = TRUE, perl = TRUE) result <- gsub("diseases", "disease", result, ignore.case = TRUE) result <- gsub("patients", "patient", result, ignore.case = TRUE) return(result) }
#データの加工 Absts <- sapply(Absts, trim)
もともとのばらつき。
データ加工なし。
データ加工あり(1)
残念ながらあまりかわらなかった。
データの加工(2)
library(tm) Absts <- stemDocument(Absts)
もともとのばらつき。
データ加工なし。
データ加工あり(1)
データ加工あり(2)
少し改善。
vocを減らす
voc <- prune_vocabulary(voc, doc_count_min = 10L)
もともとのばらつき。
データ加工なし。
データ加工あり(1)
データ加工あり(2)
vocを減らす