r - 使用 n-gram 和 R 进行纠错

标签 r nlp ocr n-gram

我正在开展一个项目,通过 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/

相关文章:

r - 如何创建一个用不等距矩阵图覆盖点数据的图?

r - 如何在 ggplot2 中为已指定大小美学的形状添加更大的边框?

r - 如何在列名中间按字符折叠数据框列?

machine-learning - 为什么我的神经网络序列模型从一开始就达到 0.9998 的精度?

Android PhoneGap OCR 插件

r - 计算密度估计曲线下的面积,即概率

python - 在文本文件中创建带有句点(句点)的新行

python - NLTK 性能

python - 我自己的 Python OCR 程序

ocr - 贝叶斯类的数字识别