[在本论坛上已经讨论过类似的问题(例如here和here),但是我没有找到能够解决我的问题的问题,因此我为一个看似相似的问题表示歉意。
我有一组使用UTF-8编码的.txt文件(请参见屏幕截图)。我正在尝试使用tm包在R中运行主题模型。但是,尽管在创建语料库时使用了encoding =“ UTF-8”,但是我在编码方面遇到了明显的问题。例如,我得到的是 scal而不是fiscal,in uenc而不是influence,不是所有的标点符号都被删除了,有些字母无法识别(例如在某些情况下引号仍然存在,例如view“或plan'或ændring或孤立的引号,例如“和”或zit或years (因此),并带有破折号,应该将其删除)。这些术语还会显示在各个术语的主题分布中。我之前在编码方面遇到了一些问题,但是使用"encoding = "UTF-8"
创建用于解决问题的语料库。这次似乎没有帮助。
我在Windows 10 x64,R版本3.6.0(2019-04-26),0.7-7版本的tm软件包中(全部是最新的)。非常感谢您提供有关如何解决该问题的建议。
library(tm) library(beepr) library(ggplot2) library(topicmodels) library(wordcloud) library(reshape2) library(dplyr) library(tidytext) library(scales) library(ggthemes) library(ggrepel) library(tidyr) inputdir<-"c:/txtfiles/" docs<- VCorpus(DirSource(directory = inputdir, encoding ="UTF-8")) #Preprocessing docs <-tm_map(docs,content_transformer(tolower)) removeURL <- function(x) gsub("http[^[:space:]]*", "", x) docs <- tm_map(docs, content_transformer(removeURL)) toSpace <- content_transformer(function(x, pattern) (gsub(pattern, " ", x))) docs <- tm_map(docs, toSpace, "/") docs <- tm_map(docs, toSpace, "-") docs <- tm_map(docs, toSpace, "\\.") docs <- tm_map(docs, toSpace, "\\-") docs <- tm_map(docs, removePunctuation) docs <- tm_map(docs, removeNumbers) docs <- tm_map(docs, removeWords, stopwords("english")) docs <- tm_map(docs, stripWhitespace) docs <- tm_map(docs,stemDocument) dtm <- DocumentTermMatrix(docs) freq <- colSums(as.matrix(dtm)) ord <- order(freq, decreasing=TRUE) write.csv(freq[ord],file=paste("word_freq.csv")) #Topic model ldaOut <-LDA(dtm,k, method="Gibbs", control=list(nstart=nstart, seed = seed, best=best, burnin = burnin, iter = iter, thin=thin))
编辑:我应该在cse中添加事实证明,使用以下R代码从PDF创建txt文件是相关的:
inputdir <-"c:/pdf/" myfiles <- list.files(path = inputdir, pattern = "pdf", full.names = TRUE) lapply(myfiles, function(i) system(paste('"C:/Users/Delt/AppData/Local/Programs/MiKTeX 2.9/miktex/bin/x64/pdftotext.exe"', paste0('"', i, '"')), wait = FALSE) )
可以下载两个示例txt文件here。
类似的问题已经在该论坛上进行了讨论(例如,这里和这里),但是我没有找到能够解决我的问题的问题,因此,我为一个看似相似的问题表示歉意。我有一组.txt文件...
我发现了一种解决方法,该解决方法似乎在您提供的2个示例文件中正常工作。您首先需要做的是NFKD (Compatibility Decomposition)。这将“ fi”正字连字分割为f和i。幸运的是,stringi包可以处理此问题。因此,在执行所有特殊文本清除之前,您需要应用功能stringi::stri_trans_nfkd
。您可以在较低步骤之后(或之前)的预处理步骤中执行此操作。