Air_O
@Air_O
Начинающий web-разработчик

Как выводить совпадения с учетом окончаний?

Добрый вечер, пользователи тостера.
У меня есть худо-бедно работающий модуль на PHP, который выводит строку с ключевым словом, которая ищется в файлах на сервере. Теперь мне необходимо, чтоб при поиске, допустим, слова "Москва" так же выводилось "Москве", "Москвой"....
Вот мой код
<?php 

function getFiles() {

	$dir = './files';
	$files = array_diff(scandir($dir), array('..', '.'));
	foreach ($files as $key => $value) {
		// echo $value . ', ';
	}
	return $files;
}

function search($fileName, $searchText, $pattern) {

	$contents = file_get_contents('./files/' . $fileName);

	if (preg_match_all($pattern, $contents, $matches)) {
		echo "<span class = 'spoiler'>Результат поиска в файле: $fileName</span>
		<div class = 'spoiler-content'>";

		$string = implode($matches[0], "<br>");
		$search = preg_quote($searchText);
		$string = preg_replace("/($search)/iu", "<span style='background-color: #44FF00'>$1</span>", $string);
		
		echo $string;
		echo "</div>";
	} else {
		echo "Нет совпадений в файле " . $fileName;
	}
}

function searchAnyWord() {

	if ($_POST['word'] != '' && $_POST['word'] != ' ') {
		$arSeacrh = GetFiles();
		$searchText = $_POST['word'];
		foreach ($arSeacrh as $k=>$fileName) {
	    	search($fileName, $searchText, "/^.*?$searchText.*$/imu");
	    	echo "<br>";
		}
	} else {
		echo '<span style="color: #D10000">Ошибка, заполните поле поиска!</span>';
	}
}

function searchSpecWord() {

	if ($_POST['word'] != '' && $_POST['word'] != ' ') {
		$arSeacrh = GetFiles();
		$searchText = $_POST['word'];
		foreach ($arSeacrh as $k=>$fileName) {
	    	search($fileName, $searchText, "/^.*?$searchText.*$/mu");
	    	echo "<br>";
		}
	} else {
		echo '<span style="color: #D10000">Ошибка, заполните поле поиска!</span>';
	}

}

function changeOptions() {

	if ($_POST['anyWord'] == true) {
		searchAnyWord();
	} else {
		searchSpecWord();
	}
}

changeOptions();

?>


UPD: Нужна помощь с тем, как применить stemmer. Пробовал много раз, но я так и не понимаю что у себя поменять, чтоб выводилось корректно всё......

UPD: Разобрался, спасибо!
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
Можете копнуть в сторону https://packagist.org/packages/nxp/russian-porter-... и аналагов
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы