我正在处理约翰霍普金斯凯普斯通项目的一组文本。我使用quanteda作为我的核心文本处理库。我在家里使用Macbook Pro,在工作中使用64位Windows 7。我的R脚本似乎在我的Mac上正常运行,但在我的Win7系统上失败。由于课程限制,我无法提供源文本材料。我希望我将在下面提供足够的信息以获得一些帮助。我目前的方法是从文本文件创建一个语料库,在没有ngrams的情况下对其进行标记,然后在标记化文件上运行ngrams。以下是我的代码片段。
我使用以下内容从文本文件中提取数据:
con <- file(src_file, open="rb")
tmp <- scan(con,
what = "complex",
nlines = maxlines,
# I break the large file into portions via the stp variable
# which is a number from 1 to 10
skip = maxlines * stp,
fileEncoding = "UTF-16LE",
encoding = "ASCII",
blank.lines.skip = TRUE,
na.strings = "",
skipNul = TRUE)
tmp对象保存为Rds文件。
quanteda元素周围使用了以下函数
make_corpus <- function(lines) {
lines <- toLower(lines)
cat("Making corpus\n")
t <- corpus(lines)
}
tok_corpus <- function(lines) {
lines <- toLower(lines)
cat("Making vocabulary\n")
t <- tokenize(lines,
what = "word",
verbose = TRUE,
simplify = FALSE,
removeSeparators = TRUE,
removeNumbers = TRUE,
removePunct = TRUE,
removeTwitter = TRUE
)
}
make_ngrams <- function(lines) {
lines <- toLower(lines)
cat("Making ngrams\n")
t <- ngrams(lines, n = c(1,4) )
}
以下从文件到ngrams。
cat("...creating corpus\n")
# smp_all has been read from previously mentioned Rds file
voc_corpus <- make_corpus(smp_all)
cat("...going to make vocabulary\n")
vocab <- tok_corpus(voc_corpus)
cat("...going to make n_grams\n")
n_grams <- make_ngrams(vocab)
以下是脚本的输出。
Removing working files...
Loading text files...
Read 37716 items
Read 28848 items
Read 12265 items
...Building smp_all
...creating corpus
Making corpus
Non-UTF-8 encoding (possibly) detected :ISO-8859-2.
...going to make vocabulary
Making vocabulary
Starting tokenization...
...tokenizing texts...total elapsed: 0.48 seconds.
...replacing names...total elapsed: 0 seconds.
Finished tokenizing and cleaning 66,565 texts.
...going to make n_grams
Making ngrams
Error in if (any(stringi::stri_detect_fixed(x, " ")) & concatenator != :
missing value where TRUE/FALSE needed
在我的Mac上,制作ngrams提供了有关生成内容的统计信息,但在Win7上,可以看到上述错误。
我在R控制台中运行它。
系统信息:
R version 3.2.3(2015-12-10) - “木制圣诞树” 版权所有(C)2015 R统计计算基金会 平台:x86_64-w64-mingw32 / x64(64位)
Quanteda 版本:0.9.0-1 日期:2015-11-26
提前致谢。
答案 0 :(得分:0)
我明白了。我刚刚遇到了确切的问题,并找出原因。
你语料库中的一些句子只是一个短小的字符,可能没用。结果,在预处理之后,内容被删除。所以这样的句子的结果将变成NA。这就是为什么在ngraming时发生这个错误。
解决方案:再次清理语料库并删除NA。