【发布时间】:2011-08-19 12:07:02
【问题描述】:
我正在使用 php 制作一个基于布尔检索的简单搜索引擎 我有预定义的文件 例如: - doc0:我的名字是凯撒 - doc1:凯撒是性格... -doc2.....
我已经按如下方式构建了术语文档矩阵:
例如“my”存在于第一个文件中,但不存在于第二个文件中,“caesar”存在于两个文件中 当我搜索单个术语时,我会得到该术语的布尔值,因此如果我在搜索引擎中键入“名称”,我将得到 1 0 。
我的问题是我想搜索多个词,例如:“凯撒字符” 我想在它们的布尔值之间创建一个布尔值,因此搜索结果将是 0 1 as 1 1 & 0 1 = 01 所以我需要 php 函数,让我使用上述方法搜索多个单词
这是代码 $query = $_REQUEST['keyword']; $stoplists = array("i",".","a",""); $words=数组(); $wordsdoc=数组(); $矩阵=数组(); $docs = array ("我的名字是凯撒","凯撒是一个人物"); $k=0;
//looping the docs array
for ($i=0;$i<sizeof($docs);$i++)
{
//splitting doc[i] on " " (space)
$words_temp=explode(" ",$docs[$i]);
//looping the splitted words
for ($j=0;$j<sizeof($words_temp);$j++)
{
//checking if the word is not in stop dictionnary and does not already added in words array
if (!in_array($words_temp[$j],$stoplists) && !in_array($words_temp[$j],$words))
{
//adding word to words array
$words[$k]=$words_temp[$j];
//incrementing counter
$k++;
}
}
//print_r($words[1]);
}
echo "<b>Words:</b> ";
for ($j=0;$j<sizeof($words);$j++)
{
echo $words[$j]." ";
}
echo "<br><br>";
//looping the docs array
for($i=0;$i<sizeof($docs);$i++)
{
//splitting doc[i] on " " (space)
$words_temp=explode(" ",$docs[$i]);
//initialize counter
$l=0;
//looping the splitted words
for ($j=0;$j<sizeof($words_temp);$j++)
{
//checking if the word is not in stop dictionnary
if (!in_array($words_temp[$j],$stoplists) )
{
//adding word to 2d array
$wordsdoc[$i][$l]=$words_temp[$j];
//incrementing counter
$l++;
}
}
}
echo "<b><u>Docs:</u></b><br>";
for($i=0;$i<sizeof($wordsdoc);$i++)
{
echo "doc".$i.": ";
for($j=0;$j<sizeof($wordsdoc[$i]);$j++)
{
echo $wordsdoc[$i][$j]." ";
}
echo "<br>";
}
echo "<br>";
echo "<b>Res Matrix First Col:</b><br>";
for($i=0;$i<sizeof($words);$i++)
{
$matrix[$i][0]=$words[$i];
echo $matrix[$i][0]."<br>";
}
$i1=0;
$i2=0;
foreach($wordsdoc as $items)
{
for($i=0;$i<sizeof($words);$i++)
{
if(in_array($matrix[$i][0],$items))
$matrix[$i][$i1+1] = 1;
else
$matrix[$i][$i1+1] =0;
}
$i1++;
}
echo "<table border=1><br>";
echo "<tr><td></td>";
for($i=0;$i<sizeof($docs);$i++)
{
echo "<td>doc".($i+1)."</td>";
}
echo "</tr><br>";
foreach($matrix as $items)
{
echo "<tr>";
foreach($items as $item)
{
echo "<td>".$item."</td>";
}
echo "</tr><br>";
}
echo "</table><br>";
*很抱歉发布这么长的问题,但我真的需要帮助:S * 提前谢谢你们:)
【问题讨论】:
-
在不提供有关您如何实施
matrix以及如何查询它的更多信息的情况下,@Vidor's 是唯一可能的建议。 -
我们可以把你的
search($word)函数当作一个黑匣子;然后将所有结果数组汇总为一个整体。我在下面提出了一种方法。
标签: php matrix search-engine boolean information-retrieval