Nlp 如何使用NLTK检查不可读的OCR文本

Nlp 如何使用NLTK检查不可读的OCR文本,nlp,nltk,Nlp,Nltk,我正在使用NLTK分析一个已经被OCR识别的语料库。我是NLTK的新手。大多数OCR都是好的——但有时我会遇到明显是垃圾的行。例如:oomfi-ow-Ba-wmnondmam-BE-wBwHo使用n-grams可能是最好的选择。您可以使用谷歌n-grams,也可以使用。这个想法是创建一个语言模型,看看任何给定的句子都有多大的概率。您可以定义一个概率阈值,所有分数低于该阈值的句子都将被删除。任何合理的语言模型都会给例句打很低的分数 若您认为某些单词可能只是轻微损坏,您可以在使用n-gram进行测试

我正在使用NLTK分析一个已经被OCR识别的语料库。我是NLTK的新手。大多数OCR都是好的——但有时我会遇到明显是垃圾的行。例如:
oomfi-ow-Ba-wmnondmam-BE-wBwHo使用n-grams可能是最好的选择。您可以使用谷歌n-grams,也可以使用。这个想法是创建一个语言模型,看看任何给定的句子都有多大的概率。您可以定义一个概率阈值,所有分数低于该阈值的句子都将被删除。任何合理的语言模型都会给例句打很低的分数

若您认为某些单词可能只是轻微损坏,您可以在使用n-gram进行测试之前进行尝试

编辑:以下是一些用于执行此操作的示例nltk代码:

导入数学
从nltk导入NgramModel
从nltk.corpus导入布朗
从nltk.util导入ngrams
从nltk.probdist导入概率
n=2
est=lambda fdist,箱子:LidstoneProbDist(fdist,0.2)
lm=NgramModel(n,brown.words(categories='news'),estimator=est)
def sentenceprob(句子):
bigrams=ngrams(句子.split(),n)
句子=句子。较低()
tot=0
对于双柱状图中的克:
分数=lm.logprob(克[-1],克[:-1])
tot+=分数
返回总数
sentence1=“这是一个标准的英语句子”

第2句=“哦,我知道你是谁,我想没有。我会尝试n-gram频率和/或熵,两者都是特定于语言的,来识别异常字符串,但误报率可能很高。你能解释一下如何用ngrams构建语言模型吗。我只是在很高的层次上理解了这一点。我编辑了原始答案,添加了解释代码。
>>> python lmtest.py
  42.7436688972
  158.850086668