1

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

4

4 回答 4

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 个单词的拆分。

它适用于带有/usr/share/dict/words文件的 linux ,否则您必须在此处自己下载文件:

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

如果你想要n分词,也可以对合理大小的词进行 :) 告诉我,我会调查的。

于 2011-11-28T16:40:31.083 回答
0

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

于 2012-12-12T16:21:05.577 回答
0

如果你不先告诉它,php 将无法知道你在寻找哪些单词。

因此,您可能需要详细说明您试图获得有价值的答案的内容。

您也许可以使用 reg ex 并有一个要查找的单词数组或 substr。

例如,php 怎么知道您想要在该字符串中找到单词happy 和 Easter 而不是east?

于 2011-11-28T15:51:57.577 回答
0

听起来你需要一个全文搜索库。试试 Lucene 和 Zend Lucene 库。希望这有帮助。

于 2011-11-28T15:52:42.557 回答