2016-05-17 4 views
0

У меня есть список сотен строк темы электронной почты. Для каждой строки темы у меня есть значение по электронной почте (открытая электронная почта/отправленная электронная почта). Например: list of subject linesКак отделить слова от предложений и сделать среднее? Текстовая обработка с помощью R

Я хочу понять, есть ли влияние на некоторые слова по средней открытой ставке.

Например, может быть, если я напишу в строке темы письма слово «Спасибо», то ставка по электронной почте будет выше.

Если я правильно понимаю логические шаги, мне нужно создать список всех слов, которые находятся в строке темы для писем, и для каждого слова сделать среднее значение между всеми линиями темы. Например: average per word

Может кто-нибудь помочь мне сделать это с помощью R? Я думаю, что есть пакеты интеллектуального анализа текста, которые могут помочь.

Спасибо !!!

+0

Посмотрите на пакет 'tm' –

+0

Спасибо Mhairi McNeill, что-то более конкретное? – AsSAASA

+0

Извините за краткость - это большая тема! Найдите «text mining in R» или «R tm», и вы должны найти учебник –

ответ

0

Почему бы не попробовать логистическую регрессию со словами из заголовка в качестве независимой переменной. Или, если количество слов было небольшим, или если вы смогли сгруппировать слова, возможно, множественную регрессию.

+0

Я не уверен, что понимаю. Благодарю. – AsSAASA

+0

Создайте таблицу csv, где столбец 0 содержит открытую скорость. столбцы 2 содержат слова, которые вы хотите проанализировать, с частотой, которую слово появляется в заголовке, или 0, если это не так. Теперь попробуйте выполнить следующие команды: all_data <- read.table ("datass.csv", header = TRUE, sep = ","); depend_variable <- matrix (datas [, 1]); модель <- glm (depend_variable ~., Family = binomial (link = 'logit'), data = train); Это должно генерировать таблицу с коэффициентами, детализирующими взаимосвязь между открытой скоростью и появлением слова. –

0

Как я понимаю, ваша главная проблема заключается в разделении строк, содержащих названия электронной почты.

Для этого вы можете использовать функцию strsplit().
Например:
yourstring <- "A string, full of punctuation ! And spaces !" tosplit <- c(" ", "!", ...) matrix <- strsplit(yourstring, tosplit)

Тогда я думаю, вы можете использовать цикл, чтобы поместить каждое слово матрицы в колонке вашего набора данных.
(Вы должны изменить все слова в нижний регистр тоже, если вы хотите: tolower(matrix))

После этого, безусловно, table() или summary() ваших данных рамок поможет вам визуализировать лучше.

Что касается пакетов для интеллектуального анализа текста, я не знаю никого, но я считаю, что есть некоторые.

+0

Большое спасибо! – AsSAASA

0

Так что после того, как я увидел все комментарии, я попытаюсь организовать его для одного фрагмента кода. Работает на меня. Спасибо всем.

SentencesVector ### vector with the sentences 
AveragesVector ### vector with the averages open rate 
SubjectLineTable = data.frame(AveragesVector,SentencesVector) 

library(tm) 
corpus <- Corpus(VectorSource(SentencesVector)) 
myTdm <- TermDocumentMatrix(corpus) 
temp <- inspect(myTdm) 
FreqMat <- data.frame(ST = rownames(temp), Freq = rowSums(temp)) 
row.names(FreqMat) <- NULL 

localAverage = 0 
counter = 0 
averageTable = 0 

for(i in 1:nrow(FreqMat)){ 
    for(j in 1:nrow(SubjectLineTable)){ 
     if(grepl(FreqMat[i,1],SubjectLineTable[j,2])){ 
      counter = counter+1 
      localAverage[counter] = SubjectLineTable[j,1]} 
    } 
    averageTable[i] = mean(localAverage) 
    localAverage = 0 
    counter = 0 
} 
FreqMat$means = averageTable 
FreqMat 

fit = step(glm(means~.,data = FreqMat)) 
summary(fit)