2

如果训练数据中出现与该单词相近的内容, Peter Norvig 著名的拼写检查器(此处为Java 8 版本)能够更正单个单词。但是我怎样才能适应它来处理整个短语。例如,如果我有一个文件,其中每个短语都由一个新行分隔:

Plastic box
Pencils and sketch
Romeo and Juliet
.
.
.

如果我告诉算法更正'Platic',它应该返回'Plastic box'。同样,如果我告诉它更正'Pencils',它应该返回'Pencils and sketch'

我尝试更改上述代码的以下几行(Java 版本):

Stream.of(new String(Files.readAllBytes( dictionaryFile )).toLowerCase().replaceAll("[^a-z ]","").split(" ")).forEach( (word) ->{
            dict.compute( word, (k,v) -> v == null ? 1 : v + 1  );
        });

 Stream.of(new String(Files.readAllBytes( dictionaryFile )).toLowerCase().split("\n")).forEach( (word) ->{
            dict.compute( word, (k,v) -> v == null ? 1 : v + 1  );
        });

但它似乎没有用。

4

1 回答 1

0

如果您仔细阅读 Norvig 的spellchecker,您会发现error model他使用了edit distance拼写错误的单词中的 1 和 2 处的单词。因此,如果您想Platic将文件big.text用作字典进行更正,它可以找到Elastic编辑距离为 2 的单词作为候选正确单词。

现在,使用您修改过的代码,该短语Plastic box甚至不在单词的 2 编辑距离内Platic,它甚至不会被视为错误模型中的候选者,这就是它不起作用的原因。

例如,它们之间的编辑距离为 5,然后您必须实现功能edit3edit4edit5使其工作,这将需要考虑数百万个单词,并且效率非常低。

相反,我认为您可以考虑bigram language model,尽管为拼写错误的单词返回一个可能的候选词,但您可以返回最有可能的bigram phrase,具体取决于probability of occurrence字典中的language modelP( Plastic box)=P( Plastic)*P( box| Plastic) 和候选短语的概率是一个 P( Plastic box)*P(Platic|Plastic Box)with贝叶斯formula, if you have an错误模型`(或者你有数据要学习)。

于 2017-02-01T20:59:33.263 回答