2010-12-28 2 views
2

최근에 가능성을 확장 (좋은)해야 할 수도 있습니다 프로젝트 작업을 시작하는 데, 나는 다음과 같은 질문을 마련했습니다/다른 변형), 각 사전 단어를 반복하고 사전 단어와 입력 문자열에있는 각 단어 사이의 거리를 계산합니다. 뭔가 따라 가면 :PHP 맞춤법 검사 반복 최적화

<?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 루프)입니까? 그렇다면 올바르게 최적화 할 수있는 방법이 있습니까?

Google의 "나하셨습니까?" 동일한 입력 문자열을 확인하는 데 몇 초가 걸리지 않습니다.)

미리 감사드립니다. 새해 복 많이받습니다.

+0

Google http://answers.google.com/answers/threadview?id=526503 –

답변

3

Norvig의 How to Write a Spelling Corrector을 읽으십시오. 이 기사에서는 파이썬을 사용하지만 다른 사람들은 PHP herehere에서 구현했습니다.

+0

을 언급 했으므로 하단에는 2 개의 PHP 구현에 대한 링크가 2 개 있습니다. –

+0

@Tom Thanks, 덧붙였다. – marcog

+0

단어 당 0.0001-0.001의 임원 시간을 얻을 수있었습니다. Norvig의 예를 취하고 비트를 미세하게 조정하고 초기화를 출발점으로 설정했습니다 (맞춤법 질문을하고 수정 된 버전으로 응답하는 서버로 python 스크립트를 실행 함). 고마워요! – James

0

사전을 이진 트리 또는 다른보다 효율적인 데이터 구조로 구현하는 것이 좋습니다. 트리는 조회 시간을 엄청나게 줄일 것입니다.

+0

팁 주셔서 감사합니다. – James