我正在研究一个项目来通过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克的频率而不保持顺序,我不能用它来创建混淆矩阵。
答案 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])