最近开始研究可能需要(良好)扩展可能性的项目,我提出了以下问题:
没有考虑levensthein算法(我正在处理/使用不同的变体),我遍历每个字典单词并计算字典单词和输入字符串中每个单词之间的levensthein距离。有点像:
<?php
$input_words = array("this", "is", "a", "test");
foreach ($dictionary_words as $dictionary_word) {
foreach ($input_words as $input_word) {
$ld = levenshtein($input_word, $accepted_word);
if ($ld < $distances[$input_word] || $distances[$word] == NULL) {
$distances[$input_word] = $ld;
if ($ld == 0)
continue;
}
}
}
?>
我的问题是最佳实践:执行时间约为1-2秒。 我正在考虑运行一个“字典服务器”,它在启动时将字典单词加载到内存中,然后在收到请求时作为拼写检查的一部分进行迭代(如上所述)。这会减少执行时间还是迭代的缓慢部分(for循环)?如果是这样,我能做些什么来正确优化吗?
谷歌的“你的意思是:?”检查相同的输入字符串不需要几秒钟;)提前致谢,祝新年快乐。
答案 0 :(得分:3)
阅读Norvig的How to Write a Spelling Corrector。虽然本文使用Python,但其他人已经在PHP here和here中实现了它。
答案 1 :(得分:0)
您最好将词典实现为二叉树或其他更高效的数据结构。该树将极大地缩短查找时间。