使用带有R的n-gram进行纠错

时间:2014-07-17 12:05:03

标签: r nlp ocr n-gram

我正在研究一个项目来通过OCR纠正扫描文档中的错误,我会使用n-gram和R. 我的算法将首先使用具有已知错误的语料库进行训练以产生混淆 3克的矩阵。因此,当我有一个特定的3克时,我可以知道什么是最可能的 当有错误时,用3克替换它。

知道我只能设法为一个句子创建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克的频率而不保持顺序,我不能用它来创建混淆矩阵。

1 个答案:

答案 0 :(得分:2)

对于软件包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-gram标记器(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])