Презентация на тему: Метода анализа текста в R

Реклама. Продолжение ниже
Метода анализа текста в R
Чистка данных
Лемматизация
Форматы текстовых данных
Частотность слов
Метода анализа текста в R
Сравнение частотности
Сравнение частотностей
Коллокации
LS A - семантическая близость слов
LSA - PostNauka materials
LSA - PostNauka materials
LDA — к каким темам относится документ
LDA: этнические группы в ВК
1/14
Средняя оценка: 4.7/5 (всего оценок: 59)
Код скопирован в буфер обмена
Скачать (9417 Кб)
Реклама. Продолжение ниже
1

Первый слайд презентации: Метода анализа текста в R

Алексей Горгадзе Анастасия Кузнецова NET-RESEARCH.NET

Изображение слайда
Изображение для работы со слайдом
1/2
2

Слайд 2: Чистка данных

library( tm ); library(tidytext) text <- gsub("[^[:alnum:]]", " ", text) text <- gsub("[a-zA-Z0-9]+", "", text) text <- tolower(corp) text <- removeNumbers(text) text <- removePunctuation(text) text <- removeWords(text, stopwords("russian")) text <- removeWords(text, stoplist) В стоп слова входят (stoplist): слишком частотные слишком редкие слишком короткие не существительные имена собственные ‹#›

Изображение слайда
1/1
3

Слайд 3: Лемматизация

Приведение словоформы к лемме (к инфинитиву) MyStem (Яндекс) - производит морфологический анализ текста на русском языке text.tmp <- system2("mystem", c("-c", "-l", "-d"), input=docs$text, stdout=TRUE) (должен быть установлен MyStem) кошками -> кошка Стемминг (урезание слова до основы): кошками -> кошк ‹#›

Изображение слайда
1/1
4

Слайд 4: Форматы текстовых данных

c orpus1 <- Corpus(VectorSource(text), readerControl=list(language='ru')) tdm.matrix <- TermDocumentMatrix(corpus1) / dtm.matrix <- DocumentTermMatrix(corpus1) words_matrix <- as.matrix(tdm.matrix) term-document matrix ‹#›

Изображение слайда
Изображение для работы со слайдом
Изображение для работы со слайдом
1/3
5

Слайд 5: Частотность слов

words_freq <- sort(rowSums(words_matrix), decreasing=TRUE) words_freq <- data.frame(freq = words_freq, word = names(words_freq)) Облака слов library(wordcloud) wordcloud(words = words_freq$word, freq = words_freq$freq, scale=c(2,.2), min.freq = 5, max.words=Inf, random.order=FALSE, rot.per=0.1, ordered.colors=FALSE, random.color=TRUE,colors=pal2) ‹#›

Изображение слайда
Изображение для работы со слайдом
1/2
6

Слайд 6

‹#›

Изображение слайда
Изображение для работы со слайдом
Изображение для работы со слайдом
Изображение для работы со слайдом
Изображение для работы со слайдом
Изображение для работы со слайдом
1/6
7

Слайд 7: Сравнение частотности

Male <- as.matrix(sort(sapply(dtm1, "sum"), decreasing = T) [1:length(dtm1)], colnames = count) Female <- as.matrix(sort(sapply(dtm2, "sum"), decreasing = T) [1:length(dtm2)], colnames = count) # Removing missing values Male <- Male[complete.cases(Male),] Female <- Female[complete.cases(Female),] words1 <- data.frame(Male) words2 <- data.frame(Female) Облака слов library(wordcloud) # Merge the two tables by row names wordsCompare <- merge(words1, words2, by="row.names", all = T) # Replace NA with 0 wordsCompare[is.na(wordsCompare)] <- 0 term.matrix <- as.matrix(wordsCompare[,2:3]) rownames(term.matrix) <- wordsCompare[,1] png("Name_2wc_300.png", width=2000,height=1200) par(mfrow=c(1,2),oma = c(2, 1, 5, 1)) comparison.cloud(term.matrix,max.words=300, colors = c("#9999CC", "#CC6666"), scale=c(8, 1)) title("", sub = "Название левого вордклауда", cex.main = 5, font.main= 2, col.main= "black", cex.sub = 3, font.sub = 1, col.sub = "black") commonality.cloud(term.matrix,random.order=FALSE,max.words=300, scale=c(8, 1), main="Plot 1") title("", sub = "Название правого вордклауда", cex.main = 5, font.main= 2, col.main= "black", cex.sub = 3, font.sub = 1, col.sub = "black") mtext("Общее название", outer = TRUE, cex = 5, font = 2) dev.off() ‹#›

Изображение слайда
Изображение для работы со слайдом
1/2
Реклама. Продолжение ниже
8

Слайд 8: Сравнение частотностей

wordsCompare$prop <- wordsCompare$Male/sum(wordsCompare$Male) wordsCompare$prop2 <- wordsCompare$Female/sum(wordsCompare$Female) Облака слов library(wordcloud) # Broke down the z score formula a little to understand how it worked a <- wordsCompare$prop b <- wordsCompare$prop2 c <- wordsCompare$Male d <- wordsCompare$Female e <- sum(c) f <- sum(d) # z score formula - adds column for z scores wordsCompare$z <- (a - b) / ((sqrt(((sum(c) * a) + (sum(d) * b)) / (sum(c) + sum(d)) * (1 - ((sum(c) * a) + (sum(d) * b)) / (sum(c) + sum(d))))) * (sqrt((sum(c) + sum(d)) / (sum(c) * sum(d))))) # calculate percentage reduction: wordsCompare$dif1 <- -100 * (1 - wordsCompare$prop/wordsCompare$prop2) # calculate percentage increase wordsCompare$dif2 <- 100 * (1 - wordsCompare$prop2/wordsCompare$prop) ------------------------------------------------------------- require(ggplot2) png("eco_dif_m_f_words_full_size_byDif.png", width=3000,height=1500) ggplot(wordsCompare3, aes(dif, log(abs(Male + Female)), size = 1,label=Row.names, colour = z2))+ scale_colour_gradientn(name="Z Score", colours=c("#80FF00FF", "#00FFFFFF", "#8000FFFF")) + geom_text(fontface = 2, alpha =.8) + #scale_size(range = c(3, 12)) + ylab("Логарифм от каоличества упоминаний") + xlab("Использование слов \n <----------Больше используются девушками --------|--------Больше используются мальчиками----------->")+ geom_vline(xintercept=0, colour = "red", linetype=2)+ theme_bw() + #theme(legend.position = "none") + ggtitle("Сравнение используемых слов на факультете экономики \nмежду мальчиками и девушками") dev.off() ‹#›

Изображение слайда
Изображение для работы со слайдом
1/2
9

Слайд 9: Коллокации

libra ry(quanteda) collocations <- textstat_collocations(text, size = 2:3) https://quickshout.blogspot.ru/2011/11/on-surface-of-it-just-word-looks-just.html ‹#›

Изображение слайда
Изображение для работы со слайдом
Изображение для работы со слайдом
1/3
10

Слайд 10: LS A - семантическая близость слов

library(lsa) tdm<-as.TermDocumentMatrix(dtmw) lsa_space<-lsa(tdm, dims=dimcalc_share()) lsa_word_space<-lsa(dtmw, dims=dimcalc_share()) tdm_lsa<-as.textmatrix(lsa_space) tdm_word_lsa<-as.textmatrix(lsa_word_space) tdm_lsa[1:5,1:5] # что присвоено "tdm_lsa" (какое-то значение) as.matrix(tdm)[1:5,1:5] t.locs<-lsa_space$tk %*% diag(lsa_space$sk) plot(t.locs,type="n") text(t.locs, labels=rownames(lsa_space$tk)) lsa_space2<-lsa(tdm, dims=2) t2.locs<-lsa_space2$tk %*% diag(lsa_space2$sk) plot(t2.locs,type="n") text(t2.locs, labels=rownames(lsa_space2$tk)) lsa.distances<-cosine(tdm_lsa) # косинусное расстояние между текстами в LSA-пространстве rownames(lsa.distances) <- farm$Name colnames(lsa.distances) <- farm$Name lsa.distances[upper.tri(lsa.distances)] <- NA diag(lsa.distances)=NA lsa.matrix <- melt(lsa.distances) colnames(lsa.matrix) <- c("Source","Target", "Weight") lsa.matrix<-lsa.matrix[lsa.matrix$Weight > 0, ] lsa.matrix<-lsa.matrix[!(is.na(lsa.matrix$Weight)), ] lsa.matrix$Weight2 <- lsa.matrix$Weight lsa.matrix$Type <- "Undirected" write.csv(lsa.matrix, "graph_farmo_lsa.csv") View(order(lsa.matrix$Weight)) write.csv(labels_farma, "labels_farma.csv") ‹#›

Изображение слайда
Изображение для работы со слайдом
1/2
11

Слайд 11: LSA - PostNauka materials

Linguists Philosophers Historians Sociologists Physics Astronomers Biologists Economists Chemists Anthropologists Psychologists Размер узлов - Betweenness Centrality Цвет - специализации спикеров С вязь - LSA метрики LSA - PostNauka materials ‹#›

Изображение слайда
Изображение для работы со слайдом
1/2
12

Слайд 12: LSA - PostNauka materials

‹#›

Изображение слайда
Изображение для работы со слайдом
Изображение для работы со слайдом
1/3
13

Слайд 13: LDA — к каким темам относится документ

library(mallet) mallet.instances <- mallet.import(id.array = tb$Название.раздела, text.array = corp, stoplist.file = "./data/stopwords.txt") ## настраиваем параметры модели и загружаем данные topic.model <- MalletLDA(num.topics=5) # количество тем topic.model$loadDocuments(mallet.instances) topic.model$setAlphaOptimization(20, 50) # оптимизация гиперпараметров ## собираем статистику: словарь и частотность vocabulary <- topic.model$getVocabulary() # словарь корпуса word.freqs <- mallet.word.freqs(topic.model) # таблица частотности слов ## вершина частотного списка (по документной частоте) head(word.freqs[order(word.freqs$doc.freq, decreasing=T),],30) ## параметр — количество итераций topic.model$train(1000) ## выбор наилучшей темы для каждого токена topic.model$maximize(10) ### LDA: выгрузка результатов ## таблица распределения тем по документам doc.topics <- mallet.doc.topics(topic.model, smoothed=TRUE, normalized=TRUE) ## таблица распределения слов по темам topic.words <- mallet.topic.words(topic.model, smoothed=TRUE, normalized=TRUE) ## метки для тем (по трем главным словам) topic.labels <- mallet.topic.labels(topic.model, topic.words, 5) Ссылка на интерактивный граф ‹#›

Изображение слайда
Изображение для работы со слайдом
1/2
14

Последний слайд презентации: Метода анализа текста в R: LDA: этнические группы в ВК

‹#›

Изображение слайда
Изображение для работы со слайдом
Изображение для работы со слайдом
1/3
Реклама. Продолжение ниже