为什么我找不到 number of bigrams = number_of_words - 1?
Why I can not find number of bigrams = number_of_words - 1?
我正在编写一个 R 脚本来查找双字母组。
我有一串4157个单词。
现在,使用 stylo
,我在向量中采用二元语法,如下所示。
library(stylo)
allBi <- txt.to.words(myLines)
myBigrams <- make.ngrams(allBi, ngram.size = 2)
那只有returns 4120个双字母组。有什么问题?
问题是您没有进行测试来弄清楚发生了什么。
从下面的测试来看,myLines
中的 4,127 个条目中的一个(或多个)似乎实际上不包含 "word",因为 style
包看到以下单词:
library(stylo)
这个文件在我的 OS X 系统上有 235,886 个合法单词:
words <- readLines("/usr/share/dict/words")
现在,执行测试以查看是否有任何与矢量长度相关的因素影响 make.ngrams
或(更有可能)txt.to.words
。注意:我不想等待 make.ngrams
的 cpl 分钟来完成高达 235,886 的序列,所以我将它设为 20,000,远高于你的 4,120:
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] TRUE
所以,这不是向量大小的问题。会不会是向量中缺少实际单词的问题?让我们测试一下:
# inject some badness
words[4] <- sprintf(" , %s - ", words[4])
words[30] <- "//"
words[900] <- "-1--1-"
words[4000] <- ".."
再试一次:
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
它对真正的 "badness" 做了什么:
txt.to.words(words[c(4, 30, 900, 4000)])
# [1] "aal"
使用它来查找 words
中没有字母的条目:
which(grepl("^[^[:alpha:]]+$", words))
# [1] 30 900 4000
测试 FTW(当事情没有按预期进行时,实际执行一些测试并没有太多工作)。
我正在编写一个 R 脚本来查找双字母组。
我有一串4157个单词。
现在,使用 stylo
,我在向量中采用二元语法,如下所示。
library(stylo)
allBi <- txt.to.words(myLines)
myBigrams <- make.ngrams(allBi, ngram.size = 2)
那只有returns 4120个双字母组。有什么问题?
问题是您没有进行测试来弄清楚发生了什么。
从下面的测试来看,myLines
中的 4,127 个条目中的一个(或多个)似乎实际上不包含 "word",因为 style
包看到以下单词:
library(stylo)
这个文件在我的 OS X 系统上有 235,886 个合法单词:
words <- readLines("/usr/share/dict/words")
现在,执行测试以查看是否有任何与矢量长度相关的因素影响 make.ngrams
或(更有可能)txt.to.words
。注意:我不想等待 make.ngrams
的 cpl 分钟来完成高达 235,886 的序列,所以我将它设为 20,000,远高于你的 4,120:
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] TRUE
所以,这不是向量大小的问题。会不会是向量中缺少实际单词的问题?让我们测试一下:
# inject some badness
words[4] <- sprintf(" , %s - ", words[4])
words[30] <- "//"
words[900] <- "-1--1-"
words[4000] <- ".."
再试一次:
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
它对真正的 "badness" 做了什么:
txt.to.words(words[c(4, 30, 900, 4000)])
# [1] "aal"
使用它来查找 words
中没有字母的条目:
which(grepl("^[^[:alpha:]]+$", words))
# [1] 30 900 4000
测试 FTW(当事情没有按预期进行时,实际执行一些测试并没有太多工作)。