2015-07-30 2 views
1

У меня была строка PHP, которая содержит слова АНГЛИЙСКОГО слова. Я хочу извлечь все возможные слова из строки, а не explode() пробелом, так как у меня есть только слово. Я имею в виду извлечение слов из слова. Например. Извлечение из слова "stackoverflow" Мне нужно извлечь stack, over, flow, overflow все из них.PHP получить слова из слова, используя pspell_check

Я использую pspell_check() для проверки орфографии. В настоящее время я получаю следующую комбинацию.

--> sta 
--> stac 
--> stack 
and so on. 

Таким образом, я нашел только слова, соответствующие stack, но я хочу, чтобы найти следующие слова. Заметьте, что я не хочу последнего слова, как я уже.

--> stack 
--> over 
--> flow 

Мой код:

$myword = "stackoverflow"; 
      $word_length = strlen($myword); 
      $myword_prediction = $myword[0].$myword[1]; // initial condition as words detection starts after 3rd index. 

      for ($i=2; $i<$word_length; $i++) { 
       $myword_prediction .= $myword[$i]; 
       if (pspell_check(pspell_new("en"), $myword_prediction)) 
       { 
        $array[] = $myword_prediction; 
       } 

      } 







    var_dump($array); 
+0

сделать слова должны быть последовательным, как в ваших примерах, или вы можете использовать слово как птица, или сова, или запас? –

+0

Да, слова находятся в упорядоченном порядке, так что стек над потоком - это 3 слова, которые требуются – developer

ответ

1

Как насчет если у вас есть внешний контур, как это. В первый раз вы начинаете с первого символа $ myword. Во второй раз вы начинаете со второго символа и так далее.

$myword = "stackoverflow"; 
$word_length = strlen($myword); 

$startLetter = 0; 

while($startLetter < $word_length-2){ 
    $myword_prediction = $myword[$startLetter] . $myword[$startLetter +1]; 
    for ($i=$startLetter; $i<$word_length; $i++) { 
     $myword_prediction .= $myword[$i]; 
     if (pspell_check(pspell_new("en"), $myword_prediction)) { 
      $array[] = $myword_prediction; 
     } 
    } 
$startLetter ++; 
} 
+0

Ну, мне нужно условие, чтобы не проверять первые два indecies после каждого обоснованного слова. – developer

+0

Итак, если вы найдете слово, которое начинается с $ myword [3], следующий поиск начинается с $ myword [5]? –

+0

Да, потому что pspell_check() обнаруживает коррекцию слов после 3 индексов. поэтому, на мой взгляд, это было бы после 3 признаков не 2 в целом. Я сделал это в своем коде, чтобы объединить первые два указателя, а третий в цикле – developer

0

Ну, вы должны были бы получить все подстроки, и проверить каждый из них:

function get_all_substrings($input){ 
    $subs = array(); 
    $length = strlen($input); 
    for($i=0; $i<$length; $i++){ 
     for($j=$i; $j<$length; $j++){ 
      $subs[] = substr($input, $i, $j);    
     } 
    } 
    return array_unique($subs); 
} 

$substrings = get_all_substrings("stackoverflow"); 
$pspell_link = pspell_new("en"); 
$words = array_filter($substrings, function($word) use ($pspell_link) { 
      return pspell_check($pspell_link, $word); 
     }); 
var_dump($words); 
+0

Ну, мне нужно условие, чтобы не проверять первые два indecies после каждого обоснованного слова. – developer