Очистка текста (удаление стоп-слов, пунктуации и т. Д.) Из файла Excel в R - PullRequest
0 голосов
/ 27 сентября 2018

Для моей магистерской диссертации я анализирую курсы в университете.У меня 1134 курса (в виде строк) с 3 переменными (в виде столбцов).Из-за моего небольшого опыта работы с RI я борюсь с написанием кода для него.Вот больше информации, и у меня есть образец базы данных, прикрепленной как изображение.

enter image description here

Столбец 1 - название курса Столбец 2 - описание курса Столбец 3 - результаты обучения

Я хочу очистить данные и удалитьстоп-слова, знаки препинания и другие не относящиеся к делу символы.Я делаю это с помощью следующего кода:

rm(list=ls());
library(readxl);
library(MASS);
library(nnet);
library(NLP);
library(tm);
database <- read_excel("/Volumes/GoogleDrive/My Drive/TU e Innovation Management /Thesis/testdatabasematrix.xlsx");

#name columns
colnames(database)[1] <- "Name";
colnames(database)[2] <- "Description";
colnames(database)[3] <- "LearningOutcomes";

#replace punctuation
database2 <- gsub(pattern = "\\W", replace = " ", database)
#replace digits
database2 <- gsub(pattern="\\d", " ", database2)
#everything to lower
database2 <- tolower(database2)

#until here everything fine
database2 <- removeWords(database2, stopwords());

#When I try to save the database in a data frame, the output is merely 3 observations of 1 variable instead of 1141 obs. of 3 variables
database2 <- data.frame(database2)

Я надеюсь, что вы можете мне помочь :).Если вам нужна дополнительная информация, пожалуйста, скажите, и я предоставлю ее, конечно.

Бест, Кристиан

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Вы можете рассмотреть также пакеты tidytext и dplyr, которые определенно хороши:

# some data similar to yours
database <- data.frame(Name = c('Aalto Fellows II', 'Aalto introduction to Services'),
                       Description = c('This course is a lot of words I do not know.','Service economy, whatever it does mean.'),
                       LearningOutcomes = c('Aalto Fellows, which are the smartest, learn.','Knowing what does Service economy means.'), stringsAsFactors = FALSE)

# cool packages
library(tidytext)
library(dplyr)

# here the text transformations for titles
title <- tibble(line = 1:nrow(database), text = database$Name) %>%        # as tibble
         unnest_tokens(word, text)%>%                                     # remove punctuations, lowercase, put words in column
         anti_join(stop_words, by = c("word" = "word")) %>%               # remove stopwords
         group_by(line) %>% summarise(title = paste(word,collapse =' '))  # now all in a row!

# here the text transformations for descriptions
description <- tibble(line = 1:nrow(database), text = database$Description) %>%
               unnest_tokens(word, text) %>%  
               anti_join(stop_words, by = c("word" = "word"))  %>%
               group_by(line) %>% summarise(title = paste(word,collapse =' '))

# here the text transformations for learning outcomes
learningoutcomes <- tibble(line = 1:nrow(database), text = database$LearningOutcomes) %>% 
                    unnest_tokens(word, text) %>%
                    anti_join(stop_words, by = c("word" = "word"))  %>%
                    group_by(line) %>% summarise(title = paste(word,collapse =' '))

# now the full dataset
database2 <- title %>% left_join(description, by = 'line') %>% left_join(learningoutcomes, by = 'line')
colnames(database2) <- c("line","Name","Description","LearningOutcomes")
database2

# A tibble: 2 x 4
   line Name                        Description     LearningOutcomes             
  <int> <chr>                       <chr>           <chr>                        
1     1 aalto fellows ii            lot words       aalto fellows smartest learn 
2     2 aalto introduction services service economy knowing service economy means

И вы можете преобразовать их в data.frame с помощью data.frame().

0 голосов
/ 27 сентября 2018

Поскольку вы не предоставили образец набора данных для работы, я создал его.В этом решении также используются пакеты tidytext и dplyr, но они немного отличаются от описанных выше.В этом случае вы работаете непосредственно с фреймом данных и поддерживаете фрейм данных в процессе работы.

# Create dataframe    
database <- data.frame("Name" = c("Hello how, are , you.", "I am fine thank you!"),
                           "Description" = c("installation of package ‘tibble’",
                                             "package ‘readxl’ successfully unpacked "),
                           "LearningOutcome" = c("Volumes/GoogleDrive/My Drive",
                                                 "TU e Innovation Management")


# Take off stop words
data(stop_words)

database_stopwords <- database %>%
  filter(!Name %in% stop_words$word) %>%
  filter(!Description %in% stop_words$word) %>%
  filter(!LearningOutcome %in% stop_words$word)

# Convert to lower
database_lower <- database_stopwords %>% mutate(
  Name = tolower(Name),
  Description = tolower(Description),
  LearningOutcome = tolower(LearningOutcome)
)

# Take off punctuation and others
database_lower$Name = gsub("\\W|\\d|http\\w?", " ", database_lower$Name, perl = T)
database_lower$Description = gsub("\\W|\\d|http\\w?", " ", database_lower$Description, perl = T)
database_lower$LearningOutcome = gsub("\\W|\\d|http\\w?", " ", database_lower$LearningOutcome, perl = T)
0 голосов
/ 27 сентября 2018

Кажется, что removeWords требует вектор символа в качестве первого аргумента.Так что, может быть,

for (x in colnames(database2)) database2[,x] <- removeWords(database2[,x], stopwords())

добьется цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...