0

我正在为 Johns Hopkins Capstone 项目处理一组文本。我使用 quanteda 作为我的核心文本处理库。我在家里使用我的 Macbook Pro,在工作中使用 Windows 7 64 位。我的 R 脚本在我的 Mac 上似乎可以正常运行,但在我的 Win7 系统上却失败了。由于课程限制,我无法提供源文本材料。我希望我将在下面提供足够的信息以获得一些帮助。我目前的方法是从文本文件创建一个语料库,在没有 ngram 的情况下对其进行标记,然后在标记化的文件上运行 ngram。下面是我的代码片段。

我使用以下内容从文本文件中提取数据:

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) )
}

以下从文件到 ngram。

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 上,Making ngrams 提供了生成的统计信息,但在 Win7 上,会出现上述错误。

我在 R 控制台中运行它。

系统信息:

R 版本 3.2.3 (2015-12-10) -- “木制圣诞树” 版权所有 (C) 2015 统计计算平台的 R 基金会:x86_64-w64-mingw32/x64(64 位)

Quanteda 版本:0.9.0-1 日期:2015-11-26

提前致谢。

4

1 回答 1

0

我知道了。我刚才遇到了确切的问题并找出了原因。

您的语料库中的某些句子只是一个短字符,可能没用。结果,经过您的预处理,内容被消除了。所以这样的句子的结果会变成 NA。这就是为什么在 ngraming 时会发生此错误的原因。

解决方案:再次清理您的语料库并删除 NA。

于 2016-04-10T09:17:04.417 回答