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"
Если вам все еще нужна помощь для решения других упомянутых вами проблем, добавьте пример кода для вашего набора данных, чтобы мы могли воспроизвести ошибки и, возможно, исправить их.