如何为R主题模型正确编码UTF-8 txt文件

问题描述 投票:0回答:1

[在本论坛上已经讨论过类似的问题(例如herehere),但是我没有找到能够解决我的问题的问题,因此我为一个看似相似的问题表示歉意。

我有一组使用UTF-8编码的.txt文件(请参见屏幕截图)。我正在尝试使用tm包在R中运行主题模型。但是,尽管在创建语料库时使用了encoding =“ UTF-8”,但是我在编码方面遇到了明显的问题。例如,我得到的是 scal而不是fiscalin uenc而不是influence,不是所有的标点符号都被删除了,有些字母无法识别(例如在某些情况下引号仍然存在,例如view“plan'ændring或孤立的引号,例如“和”或zityears (因此),并带有破折号,应该将其删除)。这些术语还会显示在各个术语的主题分布中。我之前在编码方面遇到了一些问题,但是使用"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 files have UTF encoding

类似的问题已经在该论坛上进行了讨论(例如,这里和这里),但是我没有找到能够解决我的问题的问题,因此,我为一个看似相似的问题表示歉意。我有一组.txt文件...

r encoding utf-8 nlp topic-modeling
1个回答
0
投票

我发现了一种解决方法,该解决方法似乎在您提供的2个示例文件中正常工作。您首先需要做的是NFKD (Compatibility Decomposition)。这将“ fi”正字连字分割为f和i。幸运的是,stringi包可以处理此问题。因此,在执行所有特殊文本清除之前,您需要应用功能stringi::stri_trans_nfkd。您可以在较低步骤之后(或之前)的预处理步骤中执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.