为什么我找不到bigrams的数量=单词的数量-1?

为什么我找不到bigrams的数量=单词的数量-1?,r,n-gram,R,N Gram,我正在写一个R脚本来寻找bigrams 我有一串4157个单词 现在,使用stylo,我在向量中取bigrams,如下所示 library(stylo) allBi <- txt.to.words(myLines) myBigrams <- make.ngrams(allBi, ngram.size = 2) 库(stylo) allBi问题在于,您没有进行任何测试来试图找出发生了什么 从下面的测试中可以看出,myLines中4127个条目中的一个(或多个)似乎没有实际包含“单词

我正在写一个R脚本来寻找bigrams

我有一串4157个单词

现在,使用
stylo
,我在向量中取bigrams,如下所示

library(stylo)

allBi <- txt.to.words(myLines)
myBigrams <- make.ngrams(allBi, ngram.size = 2)
库(stylo)

allBi问题在于,您没有进行任何测试来试图找出发生了什么

从下面的测试中可以看出,
myLines
中4127个条目中的一个(或多个)似乎没有实际包含“单词”,因为
style
包看到单词:

library(stylo)
此文件在我的OS X系统上有235886个合法单词:

words <- readLines("/usr/share/dict/words")
所以,这不是一个向量大小的问题。这可能是矢量问题中缺少实际单词吗?让我们测试一下:

# inject some badness
words[4] <- sprintf("  , %s - ", words[4])
words[30] <- "//"
words[900] <- "-1--1-"
words[4000]  <- ".."
让我们看看它对真正的“坏”有什么影响:

使用此选项查找
单词中没有字母的条目:

which(grepl("^[^[:alpha:]]+$", words))
# [1]   30  900 4000

测试FTW(当事情不按预期进行时,实际执行一些测试并不需要太多工作)。

如果我记下5个单词,通过使用此代码,我将得到4个bi克。但是当我用了太多的单词,比如4157,我会得到更少的双克数。
all(sapply(seq(from=2, to=20000, by=100), function(i) {
  return(i - length(make.ngrams(txt.to.words(words[1:i]), ngram.size=2))==1)
}))
# [1] FALSE
txt.to.words(words[c(4, 30, 900, 4000)])
# [1] "aal"
which(grepl("^[^[:alpha:]]+$", words))
# [1]   30  900 4000