Перекодировка в utf-8

This commit is contained in:
Фёдор Подлеснов 2016-07-14 16:29:26 +03:00
parent 43f501a5e2
commit df2e65a670
80 changed files with 668 additions and 668 deletions

View file

@ -1,7 +1,7 @@
<?php
/**
* Извлекает текст из HTML документа
* Извлекает текст из HTML документа
*/
function stripText($document)
{
@ -24,7 +24,7 @@ function stripText($document)
}
/**
* Разделение текста на массив слов
* Разделение текста на массив слов
*/
function tokenize ($document)
{
@ -34,13 +34,13 @@ function tokenize ($document)
/**
* Ищет один из символов с конца строки
* Ищет один из символов с конца строки
*
* @param string $haystack
* @param array $needle Массив символов для поиска
* @param int $offset Смещение от начала строки
* @param array $needle Массив символов для поиска
* @param int $offset Смещение от начала строки
*
* @return int Позицию первого совпадения
* @return int Позицию первого совпадения
*/
function indexRight ($haystack, $needle, $offset = 0)
{
@ -55,13 +55,13 @@ function indexRight ($haystack, $needle, $offset = 0)
}
/**
* Ищет один из символов с начала строки
* Ищет один из символов с начала строки
*
* @param string $haystack
* @param array $needle Массив символов для поиска
* @param int $offset Смещение от начала строки
* @param array $needle Массив символов для поиска
* @param int $offset Смещение от начала строки
*
* @return int Позицию первого совпадения
* @return int Позицию первого совпадения
*/
function indexLeft ($haystack, $needle, $offset = 0)
{

View file

@ -5,7 +5,7 @@ require_once 'core/search/stemmer.php';
require_once 'core/path.php';
/**
* Индексирование файлов
* Индексирование файлов
*/
class Index
{
@ -25,7 +25,7 @@ class Index
return "";
}
// Выбираем основу слова
// Выбираем основу слова
function clean ($word)
{
return Stemmer::russian(strtolower($word));
@ -34,14 +34,14 @@ class Index
function process ($base, $files)
{
$path = new Path($base);
// Список документов
// Список документов
foreach ($path->getContentRec($files) as $file) {
$content = file_get_contents ($file);
$text = stripText($content);
// $title = self::getTitle ($content);
$title = pathinfo($file, PATHINFO_BASENAME);
// echo $file, "\n";
// Список слов в документе
// Список слов в документе
$list = tokenize($text);
foreach ($list as $word) {
$preword = self::clean($word);
@ -49,7 +49,7 @@ class Index
$index = $this->index[$preword];
if ( ! in_array ($this->count, $index)) $this->index[$preword] [] = $this->count;
} else {
// Не записываем слова длинна которых меньше 2
// Не записываем слова длинна которых меньше 2
if (strlen($preword) > 1) {
$this->index[$preword] = array ($this->count);
}
@ -62,12 +62,12 @@ class Index
}
/**
* Сохранение результата поиска
* Сохранение результата поиска
*/
function saveData ($file)
{
$file = fopen($file, "w");
// Количество слов и текстов
// Количество слов и текстов
fwrite ($file, pack("SS", count($this->index), count($this->text)));
foreach ($this->index as $word => $value) {
$length = strlen($word);

View file

@ -1,7 +1,7 @@
<?php
/**
* Разбирвет строку запроса на токены
* Разбирвет строку запроса на токены
*/
class Lexer
{
@ -40,14 +40,14 @@ class Lexer
}
/**
* Проверяет на конец строки
* Проверяет на конец строки
*/
private function isEOL () {
return $this->offset >= strlen($this->src);
}
/**
* Односимвольный токен
* Односимвольный токен
*/
private function easyToken () {
$ch = $this->getChar ();
@ -66,7 +66,7 @@ class Lexer
}
/**
* Возвращает следующий токен
* Возвращает следующий токен
*/
public function getToken ()
{

View file

@ -4,7 +4,7 @@ require_once 'core/search/lexer.php';
require_once 'core/functions.php';
/**
* Поиск в индексе
* Поиск в индексе
*/
class Search
{
@ -80,9 +80,9 @@ class Search
}
/**
* @param int $type Тип лексемы
* @param function $op Функция при совпадении типа лексемы при запросе
* @param function $next Следующий обработчик запроса
* @param int $type Тип лексемы
* @param function $op Функция при совпадении типа лексемы при запросе
* @param function $next Следующий обработчик запроса
*/
function binaryOp ($type, $op, $next)
{

View file

@ -10,14 +10,14 @@ class Searcher {
protected $search;
public function __construct ()
{
// Может передавать обьект метод по умлочанию getWordStat??
// Может передавать обьект метод по умлочанию getWordStat??
$this->search = new Search (array ($this, 'getWord'));
}
/**
* Читает содержимое индексного файла
* Читает содержимое индексного файла
*
* @param string $file Имя файла
* @param string $file Имя файла
*/
function setSource ($fileName)
{
@ -44,7 +44,7 @@ class Searcher {
}
}
// По слову возвращаем список файлов и слово
// По слову возвращаем список файлов и слово
public function getWord ($word)
{
$preword = Stemmer::russian($word); // Index?? -> clean
@ -55,7 +55,7 @@ class Searcher {
}
/**
* Список документов в которых встечается слово
* Список документов в которых встечается слово
*
*/
function getResult (&$query)
@ -74,10 +74,10 @@ class Searcher {
}
/**
* Часть документа в котором встречается слово
* Часть документа в котором встречается слово
*
* @param $word Слово
* @param $text Текст содержащий слово
* @param $word Слово
* @param $text Текст содержащий слово
*/
function getSlice ($word, $text)
{
@ -89,7 +89,7 @@ class Searcher {
}
/**
* Поиск по запросу
* Поиск по запросу
*
*/
function search ($query)

View file

@ -27,7 +27,7 @@ class Stemmer {
static private function rv($word)
{
$vowels = array('à','å','è','î','ó','û','ý','þ','ÿ');
$vowels = array('а','е','и','о','у','ы','э','ю',');
$flag = 0;
$rv = '';
$start = '';
@ -59,7 +59,7 @@ class Stemmer {
static function has_aya ($word, $suffix)
{
return (substr($word,-strlen($suffix)-CHAR_LENGTH,CHAR_LENGTH)=='à' || substr($word,-strlen($suffix)-CHAR_LENGTH,CHAR_LENGTH)=='ÿ');
return (substr($word,-strlen($suffix)-CHAR_LENGTH,CHAR_LENGTH)=='а' || substr($word,-strlen($suffix)-CHAR_LENGTH,CHAR_LENGTH)=='я');
}
static function cut_suffix ($word, $suffix)
@ -69,26 +69,26 @@ class Stemmer {
static private function step1($word)
{
$perfective1 = array('â', 'âøè', 'âøèñü');
$perfective1 = array('в', 'вши', 'вшись');
foreach ($perfective1 as $suffix) {
if (self::has_suffix($word, $suffix) && self::has_aya ($word, $suffix)) {
return self::cut_suffix($word, $suffix);
}
}
$perfective2 = array('èâ','èâøè','èâøèñü','ûâøè','ûâøèñü');
$perfective2 = array('ив','ивши','ившись','ывши','ывшись');
foreach ($perfective2 as $suffix) {
if (self::has_suffix($word, $suffix)) {
return self::cut_suffix($word, $suffix);
}
}
$reflexive = array('ñÿ', 'ñü');
$reflexive = array('ся', 'сь');
$word = self::substitute($word, $reflexive);
$adjective = array('åå','èå','ûå','îå','èìè','ûìè','åé','èé','ûé','îé','åì','èì','ûì','îì','åãî','îãî','åìó','îìó','èõ','ûõ','óþ','þþ','àÿ','ÿÿ','îþ','åþ');
$participle2 = array('åì','íí','âø','þù',');
$participle1 = array('èâø','ûâø','óþù');
$adjective = array('ее','ие','ые','ое','ими','ыми','ей','ий','ый','ой','ем','им','ым','ом','его','ого','ему','ому','их','ых','ую','юю','ая','яя','ою','ею');
$participle2 = array('ем','нн','вш','ющ',');
$participle1 = array('ивш','ывш','ующ');
foreach ($adjective as $suffix) {
if (self::has_suffix($word, $suffix)) {
$word = self::cut_suffix($word, $suffix);
@ -101,17 +101,17 @@ class Stemmer {
}
}
$verb1 = array('ëà','íà','åòå','éòå','ëè','é','ë','åì','í','ëî','íî','åò','þò','íû','òü','åøü','ííî');
$verb1 = array('ла','на','ете','йте','ли','й','л','ем','н','ло','но','ет','ют','ны','ть','ешь','нно');
foreach ($verb1 as $suffix)
if (self::has_suffix($word, $suffix) && self::has_aya ($word, $suffix))
return self::cut_suffix($word, $suffix);
$verb2 = array('èëà','ûëà','åíà','åéòå','óéòå','èòå','èëè','ûëè','åé','óé','èë','ûë','èì','ûì','åí','èëî','ûëî','åíî','ÿò','óåò','óþò','èò','ûò','åíû','èòü','ûòü','èøü','óþ',');
$verb2 = array('ила','ыла','ена','ейте','уйте','ите','или','ыли','ей','уй','ил','ыл','им','ым','ен','ило','ыло','ено','ят','ует','уют','ит','ыт','ены','ить','ыть','ишь','ую',');
foreach ($verb2 as $suffix)
if (self::has_suffix($word, $suffix))
return self::cut_suffix($word, $suffix);
$noun = array('à','åâ','îâ','èå','üå','å','èÿìè','ÿìè','àìè','åè','èè','è','èåé','åé','îé','èé','é','èÿì','ÿì','èåì','åì','àì','îì','î','ó','àõ','èÿõ','ÿõ','û','ü','èþ','üþ','þ','èÿ','üÿ','ÿ');
$noun = array('а','ев','ов','ие','ье','е','иями','ями','ами','еи','ии','и','ией','ей','ой','ий','й','иям','ям','ием','ем','ам','ом','о','у','ах','иях','ях','ы','ь','ию','ью','ю','ия','ья',');
foreach ($noun as $suffix) {
if (self::has_suffix($word, $suffix))
return self::cut_suffix($word, $suffix);
@ -122,14 +122,14 @@ class Stemmer {
static private function step2($word)
{
if (substr($word,-CHAR_LENGTH,CHAR_LENGTH) == 'è')
if (substr($word,-CHAR_LENGTH,CHAR_LENGTH) == 'и')
$word = substr($word, 0, strlen($word)-CHAR_LENGTH);
return $word;
}
static private function step3($word)
{
$vowels = array('à','å','è','î','ó','û','ý','þ','ÿ');
$vowels = array('а','е','и','о','у','ы','э','ю',');
$flag = 0;
$r1 = '';
$r2 = '';
@ -152,7 +152,7 @@ class Stemmer {
if ($flag=1 && array_search(substr($r1,$i,CHAR_LENGTH), $vowels) === false)
$flag=2;
}
$derivational=array('îñò', 'îñòü');
$derivational=array('ост', 'ость');
foreach ($derivational as $suffix)
if (substr($r2,-(strlen($suffix))) == $suffix)
$word=substr($word, 0, strlen($r2)-strlen($suffix));
@ -161,19 +161,19 @@ class Stemmer {
static private function step4($word)
{
if (substr($word,-CHAR_LENGTH*2)=='íí')
if (substr($word,-CHAR_LENGTH*2)=='нн')
$word=substr($word, 0, strlen($word)-CHAR_LENGTH);
else
{
$superlative=array('åéø', 'åéøå');
$superlative=array('ейш', 'ейше');
foreach ($superlative as $suffix)
if (substr($word,-(strlen($suffix))) == $suffix)
$word = substr($word, 0, strlen($word) - strlen($suffix));
if (substr($word,-CHAR_LENGTH*2) == 'íí')
if (substr($word,-CHAR_LENGTH*2) == 'нн')
$word = substr($word, 0, strlen($word) - CHAR_LENGTH);
}
// should there be a guard flag? can't think of a russian word that ends with åéøü or ííü anyways, though the algorithm states this is an "otherwise" case
if (substr($word,-CHAR_LENGTH,CHAR_LENGTH) == 'ü')
// should there be a guard flag? can't think of a russian word that ends with ейшь or ннь anyways, though the algorithm states this is an "otherwise" case
if (substr($word,-CHAR_LENGTH,CHAR_LENGTH) == 'ь')
$word=substr($word, 0, strlen($word)-CHAR_LENGTH);
return $word;
}