我想实现拼写检查程序,它将检查文本文件中的拼写并输出错误和更正。我想用python创建它。
但是,主要的是我想用遗传算法来实现它。如何为拼写检查器实现遗传算法?
答案 0 :(得分:1)
不要指望我的想法在这里是完美的或最佳的,但如果你决定走这条路,它可能是一个很好的起点。遗传算法可能不是拼写检查器的最佳选择。
对于遗传算法,你需要有一个起始种群,一种将基因传递给“下一代”(交叉)的方法,一种创造突变的明确方法,以及一种选择传递哪种基因的方法。下一代(又称健身功能)。除此之外,你当然还需要一个语料库。您可以尝试使用dictionary.com API,如果它有任何好处(我从未使用过它)http://www.programmableweb.com/api/dictionary.com。
对于初始人群,你有一个可怕的问题,你的起始人口将是数千个完全相同的词(即['hello'] * 1000)。从这里你可以检查它是否是一个单词,然后如果它只是返回True(因为语法检查与他们的vs他们将是痛苦的屁股)。
首先,你需要完全依靠突变来获得多样性,所以如果它是前一代,也许更容易发生突变,一旦多样性增加,突变的机会就会减少。突变可以是以下任何一种:在某处插入一个随机字母,在某处删除一个字母,在某处更改一个字母,然后执行多个字母。
对于您的健身功能,您最好的选择是使用序列比对算法。见:http://en.wikipedia.org/wiki/Sequence_alignment。如果您真的想要先进,请尝试为您的人口中的每个单词创建拼音拼写,看看它们是否与语料库中的任何内容匹配,并根据该单词增加分数(即,将发音具有相同的发音)。我不能声称对此有所了解。请记住,所有这些都会让你的应用程序变得非常糟糕,所以请记住这一点。最好将人口限制在1000-2000。
对于你的交叉,你应该采取一些你的样本(早期你可能需要使用轮盘赌来挑选哪个最合适,但是稍后你可以使用锦标赛来加速)。你可以再次使用每个“父”之间的序列对齐,然后决定从每个父母那里拉出哪个字母(即soeed vs s_eeo可以出来是soeed,seed,seeo或soeeo)。
不要把它作为专家解决方案,而且我只想了几分钟的思考,但如果你决定使用遗传算法,这可能是一个好的开始。