我正在开展一个项目,通过 OCR 纠正扫描文档中的错误,我将使用 n-gram 和 R。 我的算法将首先使用已知错误的语料库进行训练,以造成困惑 3-gram 矩阵。这样当我有一个特定的 3 克时,我可以知道最可能的是什么 出现错误时用 3-gram 进行替换。
据我所知,我只能为一个句子创建 n-gram:
library(tau)
library(tm)
txt1 <- "The quick brown fox jumps over the lazy dog."
r1<-textcnt(txt1, method = "ngram", n=3)
data.frame(counts = unclass(r1), size = nchar(names(r1)))
format(r1)
但是它给了我每个 3 克的频率,但没有保持顺序,我不能用它来创建混淆矩阵。
最佳答案
对于包tm
,您需要根据其文档的这一部分使用外部标记器:http://tm.r-forge.r-project.org/faq.html#Bigrams
但这应该非常简单,并且有很多方法可以实现您的目标。
3 克分析:
library(tau)
temp <- "I would gladly pay you Tuesday for a hamburger today."
textcnt(temp, method="ngram", n=3L, decreasing=TRUE)
这就是创建混淆矩阵的方法:
library(MASS)
iris.lda <- lda(Species ~ . , data = iris)
table(predict(iris.lda, type="class")$class, iris$Species)
如果您需要长度为 3 的标记(在术语文档矩阵中),则可以使用 3 克标记生成器 (n = 3)。例如,参见 http://tm.r-forge.r-project.org/faq.html#Bigrams 。
您可以使用字典参数来仅存储您的选择:
yourTokenizer <- function(x) RWeka::NGramTokenizer(x, Weka_control(min = 3, max = 3))
TermDocumentMatrix(crude, control = list(tokenize = yourTokenizer, dictionary = yourDictionary))
tm
文档中的相应示例是:
library("RWeka")
library("tm")
data("crude")
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
tdm <- TermDocumentMatrix(crude, control = list(tokenize = BigramTokenizer))
inspect(tdm[340:345,1:10])
关于r - 使用 n-gram 和 R 进行纠错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24803064/