Проблема с tm_map (removeWords, stopwords ("engli sh") - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь возиться с аналитикой R. Я скачал файл с 10 выступлениями TED и сохранил их как текст. Я пытаюсь использовать стоп-слова removeWords

source("Project_Functions.R")
getwd()
# ==== 
# Load the PDF data
# pdf.loc <- file.path("data") # folder "PDF Files" with PDFs
# myFiles <- normalizePath(list.files(path = pdf.loc, pattern = "pdf",  full.names = TRUE)) # Get the path (chr-vector) of PDF file names
# # Extract content from PDF files
# Docs.corpus <- Corpus(URISource(myFiles), readerControl = list(reader = readPDF(engine = "xpdf")))

# ==== 
# Load TED Talks Data
myFiles <- normalizePath(list.files(pattern = "txt",  full.names = TRUE))
Docs.corpus <- Corpus(URISource(myFiles), readerControl=list(reader=readPlain))
length(Docs.corpus)
#Docs.corpus <-tm_map(Docs.corpus, tolower)
Docs.corpus <-tm_map(Docs.corpus, removeWords, stopwords("english"))
Docs.corpus <-tm_map(Docs.corpus, removePunctuation)
Docs.corpus <-tm_map(Docs.corpus, removeNumbers)
Docs.corpus <-tm_map(Docs.corpus, stripWhitespace)

Однако, когда я запускаю:

dtm <-DocumentTermMatrix(Docs.corpus)
dtm$dimnames$Terms
freq <- colSums(as.matrix(dtm))
freq <- subset(freq, freq > 10)

По-прежнему отображаются некоторые слова, которые мне не нужны, например "и", "просто" ..et c ..

Я пробовал исследовать и использовать [[: punct:]] и другие методы, но они не работают.

Пожалуйста, помогите, спасибо

1 Ответ

0 голосов
/ 16 апреля 2020

Я выяснил, почему так важен порядок tm_map, например, если вы запускаете tolower, а затем запускаете следующую строку removeNumbers, он как-то больше не выполняет tolower, но переключившись на removeNumbers, я исправил это Возможно, это не самый эффективный способ, но он работает

Docs.corpus.temp <-tm_map(Docs.corpus, removePunctuation)
Docs.corpus.temp1 <-tm_map(Docs.corpus.temp, removeNumbers)
Docs.corpus.temp2 <-tm_map(Docs.corpus.temp1, tolower)
Docs.corpus.temp3 <-tm_map(Docs.corpus.temp2,PlainTextDocument)
Docs.corpus.temp4 <-tm_map(Docs.corpus.temp3, stripWhitespace)
Docs.corpus.temp5 <-tm_map(Docs.corpus.temp4, removeWords, stopwords("english"))

#frequency
dtm <-DocumentTermMatrix(Docs.corpus.temp5)
dtm$dimnames$Terms
freq <- colSums(as.matrix(dtm))
freq <- subset(freq, freq > 10)
ord<- order(freq)
freq

Это решает мою проблему, теперь работает весь код предварительной обработки tm_map. Если у кого есть идея получше, пожалуйста, дайте мне знать, спасибо!

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