2015-09-09 4 views
3

Я пытаюсь извлечь pdf-файл из статьи с богатыми pdf-кодировками и графиками. Я заметил, что когда мои документы в формате pdf я получаю высокочастотными словами, это phi, taeoe, toe, sigma, gamma и т. Д. Это хорошо работает с некоторыми документами в формате pdf, но я получаю эти случайные греческие письма с другими. Это проблема с кодировкой символов? (Btw все документы на английском языке). Какие-либо предложения?Текстовая обработка PDF-файлов/проблем со частотами слова

# Here is the link to pdf file for testing 
# www.sciencedirect.com/science/article/pii/S0164121212000532 
library(tm) 
uri <- c("2012.pdf") 
if(all(file.exists(Sys.which(c("pdfinfo", "pdftotext"))))) { 
pdf <- readPDF(control = list(text = "-layout"))(elem = list(uri = uri), 
               language = "en", 
               id = "id1") 
content(pdf)[1:4] 
} 


docs<- Corpus(URISource(uri, mode = ""), 
    readerControl = list(reader = readPDF(engine = "ghostscript"))) 
summary(docs) 
docs <- tm_map(docs, removePunctuation) 
docs <- tm_map(docs, removeNumbers) 
docs <- tm_map(docs, tolower) 
docs <- tm_map(docs, removeWords, stopwords("english")) 

library(SnowballC) 
docs <- tm_map(docs, stemDocument) 
docs <- tm_map(docs, stripWhitespace) 
docs <- tm_map(docs, PlainTextDocument) 

dtm <- DocumentTermMatrix(docs) 
tdm <- TermDocumentMatrix(docs) 
freq <- colSums(as.matrix(dtm)) 
length(freq) 
ord <- order(freq) 
dtms <- removeSparseTerms(dtm, 0.1) 
freq[head(ord)] 
freq[tail(ord)] 
+0

Я внес изменения, но я все еще получаю греческие слова delta, toe и т. Д. Как высокочастотные термины – user3570187

+0

В качестве обходного пути вы можете удалить нежелательные слова с помощью 'my_stopwords <- c (" delta "," sigma ", gamma "), а затем ' docs <- tm_map (docs, removeWords, my_stopwords) '. Не настоящее решение, хотя, поскольку остается неясным, откуда эти слова. – RHertel

+0

В этом проблема. Даже низкочастотные слова например, aaa, zutng zwu zwzuz zxanug! Поэтому нам действительно нужно понять, как PDF читается в пакете. – user3570187

ответ

0

Я думаю, что ghostscript создает здесь все проблемы. Если предположить, что pdfinfo и pdftotext установлены правильно, этот код работает, не создавая странные слова, которые вы упомянули:

library(tm) 
uri <- c("2012.pdf") 
pdf <- readPDF(control = list(text = "-layout"))(elem = list(uri = uri), 
               language = "en", 
               id = "id1") 
docs <- Corpus(VectorSource(pdf$content)) 
docs <- tm_map(docs, removeNumbers) 
docs <- tm_map(docs, tolower) 
docs <- tm_map(docs, removeWords, stopwords("english")) 
docs <- tm_map(docs, removePunctuation) 
library(SnowballC) 
docs <- tm_map(docs, stemDocument) 
docs <- tm_map(docs, stripWhitespace) 
docs <- tm_map(docs, PlainTextDocument) 
dtm <- DocumentTermMatrix(docs) 
tdm <- TermDocumentMatrix(docs) 
freq <- colSums(as.matrix(dtm)) 

Мы можем представить себе результат из наиболее часто используемых слов в your pdf file с облаком слова:

library(wordcloud) 
wordcloud(docs, max.words=80, random.order=FALSE, scale= c(3, 0.5), colors=brewer.pal(8,"Dark2")) 

enter image description here

Очевидно, что этот результат не совершенен; в основном из-за того, что слово, которое почти никогда не достигает 100% -ного надежного результата (например, мы все еще «проблемы» и «выпускаем» как отдельные слова, или «метод» и «методы»). Я не знаю ни одного безошибочного алгоритма генерации в R, хотя SnowballC делает достаточно хорошую работу.