【问题标题】:Using n-gram with R for error correction使用带有 R 的 n-gram 进行纠错
【发布时间】:2014-09-08 07:07:14
【问题描述】:

我正在做一个项目来纠正 OCR 扫描文档中的错误,我会使用带有 R 的 n-gram。 我的算法将首先使用已知错误的语料库进行训练,以造成混乱 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-gram 的频率而不保持顺序,我不能用它来创建混淆矩阵。

【问题讨论】:

    标签: r nlp ocr n-gram


    【解决方案1】:

    至于包tm,您需要根据其文档的这一部分使用外部标记器:http://tm.r-forge.r-project.org/faq.html#Bigrams

    但这应该非常简单,并且有很多方法可以实现您的目标。

    3-gram 分析:

    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])
    

    【讨论】:

    • 感谢您的帮助,但这并不是我想要的,我同意我没有很好地解释...我想比较相同的句子,除了第二个会有错误,例如:“paq”和“pay”混淆矩阵会告诉我,下次我看到“paq”时,我应该用“pay”替换它
    • 我明白了。抱歉,我没听懂。顺便说一句,我不知道如何在 R 中做到这一点,但这绝对是可行的,因为我可以告诉你如何用其他语言做到这一点。如果今晚或明天早上我有空闲时间,我会尽力跟进。
    • 你知道如何在 python 中使用它吗?感谢您的帮助
    • 我知道我在 C 中看到了一个很好的示例。Python 中可能有一个。我做了一个快速搜索,试图找到我昨天在看的东西,但我在工作,我无法在这一秒快速找到它。不过,我想你可能会喜欢这篇论文:ijcsit.com/docs/Volume%204/Vol4Issue1/ijcsit2013040122.pdf
    猜你喜欢
    • 2011-08-19
    • 2019-02-06
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2017-11-09
    • 1970-01-01
    相关资源
    最近更新 更多