Text Mining - удалить пунктуацию, не удаляя кавычки и тире

Я занимался майнингом текстов. Я создал матрицу DTM, используя следующие шаги.

corpus1<-VCorpus(VectorSource(resume1$Dat1)) 

corpus1<-tm_map(corpus1,content_transformer(tolower)) 
corpus1<-tm_map(corpus1,content_transformer(trimWhiteSpace))

dtm<-DocumentTermMatrix(corpus1, 
                           control = list(removePunctuation = TRUE, 
                                          removeNumbers = TRUE, 
                                          removeSparseTerms=TRUE, 
                                            stopwords = TRUE)) 

После всего прогона я по-прежнему получаю в dtm такие слова, как -quotation, "fun, model" и т. Д. Также в данных появляются пробелы типа ""

Что я могу с этим поделать? Мне не нужны эти подробности и дополнительные цитаты.

2 ответа

Решение

Я не уверен, почему DocumentTermMatrix не работает для вас, но вы можете попробовать использовать tm_map для предварительной обработки корпуса перед его преобразованием в DTM. Это работает для меня (обратите внимание, что я переупорядочиваю стоп-лист по умолчанию, потому что в противном случае он удаляет основы слов апостроф перед целым словом, оставляя многоточие 's'):

corpus1 <- VCorpus(VectorSource(resume1$dat))

reorder.stoplist <- c(grep("[']", stopwords('english'), value = TRUE), 
                      stopwords('english')[!(1:length(stopwords('english')) %in% grep("[']", stopwords('english')))])

corpus1 <- tm_map(corpus1, content_transformer(tolower))
corpus1 <- tm_map(corpus1, removeWords, reorder.stoplist)
corpus1 <- tm_map(corpus1, removePunctuation)
corpus1 <- tm_map(corpus1, removeNumbers)
corpus1 <- tm_map(corpus1, stripWhitespace)

corpus1 <- DocumentTermMatrix(corpus1)

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

Чтобы воссоздать проблему, вы можете использовать этот пример с двумя проблемными текстовыми выдержками:

library("tm")
library("textclean")
dt <- c("Vi ville också att husmodellen skulle ” ta in” det fina älvläget så mycket som möjligt.”",
    "Det är betydligt trivsammare att jobba härifrån än att sitta och ” arbeta” i ett kontorsrum i centrum.")

dt выглядит так:

> dt
[1] "Vi ville också att husmodellen skulle ” ta in” det fina älvläget så mycket som möjligt.”"              
[2] "Det är betydligt trivsammare att jobba härifrån än att sitta och ” arbeta” i ett kontorsrum i centrum."

В моем случае проблема возникает из-за того, что у меня есть фигурные скобки в тексте. removePunctuation не определяет этот тип скобок как знаки пунктуации, поэтому после применения его к моему тексту у меня все еще есть фигурные скобки.

> removePunctuation(dt)
[1] "Vi ville också att husmodellen skulle ” ta in” det fina älvläget så mycket som möjligt”"              
[2] "Det är betydligt trivsammare att jobba härifrån än att sitta och ” arbeta” i ett kontorsrum i centrum"

Я нашел пакет textclean (2018) имеет функцию, которая заменяет фигурные скобки на \" которые затем могут быть удалены с помощью removePunctuation:

> removePunctuation(replace_curly_quote(dt))
[1] "Vi ville också att husmodellen skulle  ta in det fina älvläget så mycket som möjligt"               
[2] "Det är betydligt trivsammare att jobba härifrån än att sitta och  arbeta i ett kontorsrum i centrum"

Если вам все еще нужна помощь для решения других упомянутых вами проблем, добавьте пример кода для вашего набора данных, чтобы мы могли воспроизвести ошибки и, возможно, исправить их.

Другие вопросы по тегам