Я поставил перед собой задачу создать базовый механизм поиска текстовых файлов в PHP за очень ограниченное время, практически не имея предшествующих знаний в области программирования, это довольно сложная задача!
Вот что у нас такдалеко, ему удается вернуть документ (ы) - если их более одного с одинаковым количеством) с наибольшим числом вхождений слова.
Проблема в том, как мы это делали, не (по крайней мере)не легко) позволяют рассчитать балл TF-IDF.IDF готов, но нам нужно вычислить TF, получив общее количество слов в возвращенном документе, и это то, с чем у нас проблемы.Другая проблема заключается в том, что он возвращает только самый высокий документ, и мы не можем заставить его вернуть список документов, каждый из которых имеет свою оценку .... т.е. один документ имеет слово "авиакомпания" в 3 раза, два других документа имеют его один раз.и они забываются, и возвращается только первое ...
(были также некоторые проблемы с удалением символов, но мы работали над этим, хотя и методом вытягивания ...)
Вот что мы имеем:
<code><?php
$starttime = microtime();
$startarray = explode(" ", $starttime);
$starttime = $startarray[1] + $startarray[0];
if(isset($_GET['search']))
{
$searchWord = $_GET['search'];
}
else
{
$searchWord = null;
}
?>
<html>
<link href="style.css" rel="stylesheet" type="text/css">
<body>
<div id="wrapper">
<div id="searchbar">
<h1>PHP Search</h1>
<form name='searchform' id='searchform' action='<?php echo $_SERVER['PHP_SELF']; ?>' method='get'>
<input type='text' name='search' id='search' value='<?php echo $_GET['search']; ?>' />
<input type='submit' value='Search' />
</form>
<br />
<br />
</div><!-- close searchbar -->
<?php
//path to directory to scan
$directory = "./files/";
//get all image files with a .txt extension.
$files = glob("" . $directory . "*.txt");
$fileList = array();
//print each file name
foreach($files as $file)
{
$fileList[] = $file;
}
//$fileList;
function indexFile($file){
$filename = $file;
$fp = fopen($filename, 'r');
$file_contents = fread($fp, filesize($filename));
fclose($fp);
$pat[0] = "/^\s+/";
$pat[1] = "/\s{2,}/";
$pat[2] = "/\s+\$/";
$rep[0] = "";
$rep[1] = " ";
$rep[2] = "";
$new_contents = preg_replace("/[^A-Za-z0-9\s\s+]/", "", $file_contents);
$new_contents = preg_replace($pat, $rep, $new_contents);
//COMMON WORDS WERE HERE
include "commonwords.php";
$lines = explode("\n", $new_contents);
$lines2 = implode(" ", $lines); //string
$lines2 = strtolower($lines2);
//echo $lines2 . "<br><br>";
$words = explode(" ", $lines2); //array
//$words = $lines;
$useful_words = array_diff($words, $commonWords);
$useful_words = array_values($useful_words);
print_r(count($useful_words));
//echo '<pre>';
$index = array_count_values($useful_words);
arsort($index, SORT_NUMERIC);
//print_r($index);
//echo '
';вернуть индекс $;} // $ file1 = indexFile ('Airlines.txt');// массив // $ file2 = indexFile ('africa.txt');// функция массива merge_common_keys () {$ arr = func_get_args ();$ num = func_num_args ();$ keys = array ();$ i = 0;for ($ i = 0; $ i <$ num; ++ $ i) {$ keys = array_merge ($ keys, array_keys ($ arr [$ i])));} $ keys = array_unique ($ keys);$ merged = array ();foreach ($ keys как $ key) {$ merged [$ key] = array ();for ($ i = 0; $ i <$ num; ++ $ i) {$ merged [$ key] [] = isset ($ arr [$ i] [$ key])? $ arr [$ i] [$ключ]: нуль;}} return $ merged;} for ($ i = 0; $ i <count ($ fileList); $ i ++) {$ fileArray [$ i] = indexFile ($ fileList [$ i]);} $ merged = call_user_func_array ('merge_common_keys', $ fileArray);$ searchQ = $ merged [$ searchWord];echo '<pre>';
print_r($searchQ);
echo '';// echo "hello2";$ maxValue = 0;$ num_docs = 0;$ docID = array ();$ n = количество ($ searchQ);for ($ i = 0; $ i <$ n; $ i ++) {if ($ searchQ [$ i]> $ maxValue) {$ maxValue = $ searchQ [$ i];снята с охраны ($ DocId);$ docID [] = $ i;// print_r (количество ($ fileArray [$ я]));} else if ($ searchQ [$ i] == $ maxValue) {$ docID [] = $ i;} if (! empty ($ searchQ [$ i])) {$ num_docs ++;}} print_r ($ n);print_r ($ num_docs);print_r ($ DocId);if (is_array ($ docID)) {for ($ i = 0; $ i
'. $ searchWord. ' найдено в документе
'. $ fileList [$ docID [$ i]]. ''. $ maxValue. 'время'. $ множественное число. '. ');$ TF = $ maxValue;// $ TF2 = 1 + log ($ TF);echo "
$ TF2
";$ DF = $ num_docs;$ Non = $ n / $ num_docs;// echo "$ Non";$ IDF = (float) log10 ($ Non);$ TFxIDF = $ TF2 * $ IDF;// echo "$ TFxIDF";}} // 1,2 //file_put_contents("demo2.txt ", implode (" ", $ полезно_words));if (isset ($ _ GET ['search'])) {$ endtime = microtime ();$ endarray = explode ("", $ endtime);$ endtime = $ endarray [1] + $ endarray [0];$ totaltime = $ endtime - $ starttime;$ totaltime = round ($ totaltime, 5);эхо "
Эта страница загружена всего за $ секунд.
";}?>