PHP: ищем буквы в словаре...
Для решения одной задачки понадобилась проверка слов по словарю, в смысле, сколько раз и в каких словах встречается нужное сочетание букв. Вот небольшой и оперативно написанный скрипт, который мне помог в решении этой проблемы:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta content="text/html; charset=Windows-1251" http-equiv="content-type"> <title>Проверка по словарю</title> </head> <body> <?php error_reporting (E_ALL); set_time_limit (100); //Выполнять можно до 100 секунд function trimall($string) { return preg_replace("/\s+/"," ",trim($string)); } function magic ($path) { @ini_set('magic_quotes_runtime', '0'); @ini_set('magic_quotes_sybase', '0'); if (@get_magic_quotes_gpc()=='1') $path=stripslashes($path); return $path; } //Пара функций для фильтрации ввода пользователя //Обработка параметров $abc = ''; if (!empty($_POST['abc'])) $abc = trimall(htmlspecialchars(magic($_POST['abc']),ENT_QUOTES,'Windows-1251')); $action = ''; if (!empty($_POST['action'])) $action = trimall(htmlspecialchars(magic($_POST['action']),ENT_QUOTES,'Windows-1251')); $n=3; //До скольки букв проверяем? $file = 'russian_big.txt'; //Файл со словарём if (strlen($abc)>$n) $abc=substr($abc,0,$n); //На всякий случай обрезаем слово echo ' <form name="f1" method="post" action="'.$_SERVER['PHP_SELF'].'"> <p>Введите буквы (до '.$n.', только кириллица, большие и маленькие различаются!): <input type="text" name="abc" maxlength="'.$n.'" size="'.($n+1).'" value="'.$abc.'"> <input type="submit" name="action" value="Отправить"></p></form>'; //Вывод формы if (!empty($action)) { //Если была отправка данных $words=file ($file); $letters="абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ- "; for ($i=0; $i<strlen($abc); $i++) { if (strpos($letters,$abc[$i])===false) exit ('Обрабатываем только русские буквы!'); } $k=0; foreach ($words as $word) { //Цикл обработки $r=strpos($word,$abc); //Это быстрее, чем ststr или регулярные выражения if ($r!==false) { echo $word.'<br>'; $k++; } } echo 'Всего: '.$k; } ?> </body></html>
Полагаю, это можно использовать как небольшой онлайн-сервис, кому серверного ресурса не жалко :) Просто измените значение $n
в программе, чтобы искать побольше символов. "Понимаются" только маленькие и БОЛЬШИЕ русские буквы, ещё можно вводить пробел и дефис, т.к. в словарях могут быть такие слова. При поиске большие и маленькие буквы также различаются, обычно так и в словарях.
Вот сами словарики в простейшем текстовом формате "одно слово - одна строка", если кому нужны такие:
5000 самых употребительных русских слов, txt в архиве zip (16 Кб)
Более 160000 тысяч русских слов, txt в архиве zip - скачать с Яндекс.Диска, 568 Кб
Первый файл называтся russian.txt
, второй - big_russian.txt
, из кода видно, что предполагается открытие второго словаря из папки скрипта на сервере.
Кодировка словарей - Windows-1251, разделение строк обычное для Винды - CR/LF. Онлайн сервис пока не ставлю, может попозже... При размещении на локальном хосте в папке со скриптом, как обычно, будет полезно создать файл .htaccess
с директивой
AddDefaultCharset Windows-1251
В реальных и нагруженных скриптах не стоит читать весь файл в оперативную память функцией file, лучше делать это построчно, как в этой заметке.
19.06.2013, 17:15 [13524 просмотра]