LINUX.ORG.RU
ФорумTalks

Прикладной Scientific Text Mining - с чего начать?

 text mining, ,


7

7

Основная работа - научная деятельность в life science, в том числе и биоинформатика, потому встаёт задача автоматизации обработки научной периодики. Дополнительно есть прикладные задачи, требующие стат. анализа текстов, потому появилась необходимость освоения методов Text Mining - потому вопрос: с чего начать изучение?


Ответ на: комментарий от nerdogeek

А я хочу робота, шоб он за меня думал

Будь осторожен в своих желаниях.

Sadler ★★★
()

задача автоматизации обработки научной периодики

с этим грустно все, базы наполняются вручную и продаются за некислые деньги. Научишься автоматизировать - станешь миллиардером.

DNA_Seq ★★☆☆☆
()

Проще вообще уйти от формата статей и вместо этого наполнять базы силами самих исследователей. Но тут встает вопрос верификации и защиты от явного подлога. В статьях-то хоть видно, какими методами пользовались и как. Даешь викификацию науки!

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от DNA_Seq

Даешь викификацию науки!

Хотел я тут полгода назад заюзать викисловарь для своих целей. Скачал, распарсил, но заюзать не смог. Потому что всё вразнобой, никакой целостности, поля называются как попало, дублируют друг друга и т.п.

Дак это я о чём... Викификация науки не нужна.

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 1)

Вообще советую начать с баз SNP (однонуклеотидных полиморфизмов). Им выдается уникальный идентефикатор (http://www.ncbi.nlm.nih.gov/snp/), который легко искать в статьях. А вот описание делается обычно через пень колоду.

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от Sadler

Потому что всё вразнобой, никакой целостности, поля называются как попало, дублируют друг друга и т.п.

Вот именно в этом и проблема, особенно парсинга текстов.

Самое смешное, что есть и специализированные вики (ecoliwiki.net например), и язык описания биологических моделей, и разные языки для описания экспериментальных данных. Не хватает только «железной руки».

DNA_Seq ★★☆☆☆
()

1) читать про онтологии и инженерию знаний (protege, reasoner, karma, openrefine, virtuoso, jena) --- это для работы с тегированным текстом

2) CRF+ (ну и вообще структуред-предикшен методы) для самого тегирования

3) ну и конечно ML методы, например прочитав вот это для начала (этим обычно ограничиваются в текст мининге, но это не эффективно) http://journal.r-project.org/archive/2013-1/collingwood-jurka-boydstun-etal.pdf

psv1967 ★★★★★
()

Вот например выковыриваем и анализируем ЛОР :)


library(rjson)
library(XML)

lor1<-fromJSON(do.call(paste0, as.list(readLines(url("http://www.linux.org.ru//forum/talks/9243195/comments?page=1")))))

ttt<-htmlParse(lor1$comments[[1]]$processedMessage, asText=T, encoding = "utf8")

> getNodeSet(ttt, "//body/div/p" )
[[1]]
<p>он скорее философские и исторические вопросы раскрывал нежели экономические<br/></p> 

attr(,"class")
[1] "XMLNodeSet"
> getNodeSet(ttt, "//body/p" )
[[1]]
<p>ИМХО, нельзя всерьёз рассматривать вопросы экономики без погружения в философию и экскурсов в историю.</p> 

attr(,"class")
[1] "XMLNodeSet"

### вырезка всех комментариев без оформленного цитирования в виде списка
lapply(1:50, function(i) lapply(getNodeSet(htmlParse(lor1$comments[[i]]$processedMessage, asText=T, encoding = "utf8"), "//body/p" ), xmlValue))

### вырезка всех комментариев без оформленного цитирования
lapply(lapply(1:50, function(i) lapply(getNodeSet(htmlParse(lor1$comments[[i]]$processedMessage, asText=T, encoding = "utf8"), "//body/p" ), xmlValue)), function(i) do.call(paste, i) )

### попытка форматирования кода
get.lor.comment.text <- function(lor) {
  lapply(lapply(1:length(lor$comments),
                function(i) {
                  lapply(getNodeSet(htmlParse(lor$comments[[i]]$processedMessage,
                                              asText=T,
                                              encoding = "utf8"),
                                    "//body/p" ),
                         xmlValue)
                }),
         function(i) do.call(paste, i))
}

### строим графовое представление дискусии
library(igraph)
###  граф между участниками

### матрица связей графа
do.call(rbind, lapply(1:length(lor1$comments), function(i) c(lor1$comments[[i]]$author$nick, if(!is.null(lor1$comments[[i]]$reply$author)) lor1$comments[[i]]$reply$author else "topic" )))

### функция извлечения матрицы связи
get.lor.page.matrix <- function(lor) {
  do.call(rbind,
          lapply(1:length(lor$comments),
                 function(i) c(lor$comments[[i]]$author$nick,
                               if(!is.null(lor$comments[[i]]$reply$author)) lor$comments[[i]]$reply$author else "topic" )))
}

plot(graph.edgelist(do.call(rbind, lapply(1:length(lor1$comments), function(i) c(lor1$comments[[i]]$author$nick, if(!is.null(lor1$comments[[i]]$reply$author)) lor1$comments[[i]]$reply$author else "topic" )))))

### дабавить имена узлов графа
### vertex.label=V(имяграфа)$name

get.lor.topik.page <- function(page=1, topik=9243195) {
  s <- paste0("http://www.linux.org.ru//forum/talks/",topik,"/comments?page=",page)
  fromJSON(do.call(paste0, as.list(readLines(url(s)))))
}

full.top <- do.call(rbind, lapply(1:20, function(i) get.lor.page.matrix(get.lor.topik.page(page=i))))
full.top.graph <- graph.edgelist(full.top)
tkplot(full.top.graph, vertex.label=V(full.top.graph)$name)

full.top.comment.text <- do.call(rbind, lapply(1:20, function(i) get.lor.comment.text(get.lor.topik.page(page=i))))

library(tm)

vs <- VectorSource(full.top.comment.text)
full.top.comment.text.corpus <- Corpus(vs, readerControl = list(language = "ru"))
inspect(full.top.comment.text.corpus)
stemDocument(tolower(stripWhitespace(removePunctuation(full.top.comment.text.corpus[[1000]]))))

ctrl <- list(#tokenize = strsplit_space_tokenizer,
             removePunctuation = list(preserve_intra_word_dashes = TRUE),
             #stopwords = c("reuter", "that"),
             stripWhitespace=TRUE,
             removeNumbers=TRUE,
             removePunctuation=TRUE,
             stemming = TRUE,
             wordLengths = c(3, Inf))
termFreq(full.top.comment.text.corpus[[14]], control = ctrl)

tdm.9243195 <- TermDocumentMatrix(full.top.comment.text.corpus, ctrl)
tdm.9243195.s <- removeSparseTerms(tdm.9243195, 0.95)
res.9243195 <- prcomp(tdm.9243195.s)
plot(res.9243195)
biplot(res.9243195)

dtm.9243195 <- DocumentTermMatrix(full.top.comment.text.corpus, ctrl)
res.dtm.9243195 <- prcomp(dtm.9243195)
biplot(res.dtm.9243195)

removeSparseTerms(tdm, 0.2)

psv1967 ★★★★★
()

совсем забыл :)

исходники citeseer http://en.wikipedia.org/wiki/CiteSeer давно открыты, и кормить его своей коллекцией текстов проблемы не представляет... у него не допилен русский тегер списков литературы, но это вряд ли нужно и полезно :(

psv1967 ★★★★★
()

«Строки, деревья и последовательности в алгоритмах. Информатика и вычислительная биология» Дэна Гасфилда. Вроде вменяемо написано.

eternity
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.