Используйте PHP, чтобы найти слова в строке без пробелов - PullRequest
0 голосов
/ 28 ноября 2011

Я ищу библиотеку php, которую можно использовать, чтобы взять строку типа "happyeaster" или "buyaboat" и вернуть отдельные слова - "happy" и "easter" или "buy" "a" "boat". Кто-нибудь знает о существующей библиотеке или о чем-то уже созданном, что можно скачать или купить для этого?

Ответы [ 4 ]

0 голосов
/ 12 декабря 2012

В итоге я взял этот скрипт http://squarecog.wordpress.com/2008/10/19/splitting-words-joined-into-a-single-string/ и переделал его в PHP.Я также принимаю первое решение с наименьшим количеством слов.

0 голосов
/ 28 ноября 2011

Звук, как будто вам нужна библиотека полнотекстового поиска.Попробуйте библиотеку Lucene и Zend Lucene.Надеюсь, что это поможет.

0 голосов
/ 28 ноября 2011
<?php
function binary_search($elem, $array) { 
   $top = sizeof($array) -1; 
   $bot = 0; 

   while($top >= $bot) { 
      $p = floor(($top + $bot) / 2); 
      if ($array[$p] < $elem) 
        $bot = $p + 1; 
      elseif ($array[$p] > $elem) 
        $top = $p - 1; 
      else 
        return TRUE; 
   } 
   return FALSE; 
} 

$handle = @fopen("/usr/share/dict/words", "r");
if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        $words[] = trim($buffer);
    }
  fclose($handle);
}

sort($words);

function getmultiplewords($word1, $word2, &$dict){
    if (strlen($word1)==0) return;
    if (binary_search($word1, $dict) && binary_search($word2, $dict)) {
        echo $word2 . " / " . $word1. "\n";
    } 
    $word2 = $word2 . substr($word1,0,1);
    $word1 = substr($word1,1);
    getmultiplewords($word1, $word2, $dict);
}


getmultiplewords("cartalk","", $words);
getmultiplewords("superman","", $words);
?>

Вот простое решение, которое ищет 2-словосочетания.

Работает на linux с файлом / usr / share / dict / words , в противном случае вам придется загрузить файл самостоятельно здесь:

http://www.freebsd.org/cgi/cvsweb.cgi/src/share/dict/web2?rev=1.12;content-type=text%2Fplain

Если вы хотите n разбиение слов, которое можно сделать и для слов разумного размера :) Просто дайте мне знать, и я посмотрю на это.

0 голосов
/ 28 ноября 2011

php не сможет узнать, какие слова вы ищете, если вы сначала не скажете.

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

Возможно, вы могли бы использовать reg ex и иметь массив слов для поиска или substr.

например, как php узнает, что вы хотите, чтобы в этой строке также были слова "счастливы" и "пасха", а не "восток"?

...