使用PHP在没有空格的字符串中查找单词

时间:2011-11-28 15:48:44

标签: php string dictionary words

我正在寻找一个可以用来获取像“happyeaster”或“buyaboat”这样的字符串的php库,并返回单词 - “happy”和“easter”或“buy”“a”“boat”。有没有人知道现有的库或已经构建的可以下载或购买的东西来执行此操作?

2 个答案:

答案 0 :(得分:0)

<?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 单词分词,那么也可以为合理大小的单词做:)只是让我知道,我会调查它。

答案 1 :(得分:0)

我最终使用此脚本http://squarecog.wordpress.com/2008/10/19/splitting-words-joined-into-a-single-string/并在PHP中重做它。我也接受第一个解决方案,用最少的单词。