БлогNot. PHP: ищем буквы в словаре...

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

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
 set_time_limit(100); //Выполнять можно до 100 секунд

 function trimall($string) { return trim(preg_replace("/\s+/"," ",$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;
 } //Пара функций для фильтрации ввода пользователя
 
 $params = array ('abc','action'); //Обработка параметров
 while (list($num,$var) = each($params)) {
  if (!empty($_POST[$var])) $$var = trimall(htmlspecialchars(magic($_POST[$var])));
  else if (!empty($_GET[$var])) $$var = trimall(htmlspecialchars(magic($_GET[$var])));
  else $$var = '';
 }

 $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.'" 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 Кб

Кодировка словарей - Windows-1251, разделение строк обычное для Винды - CR/LF. Онлайн сервис пока не ставлю, может попозже...

В реальных и нагруженных скриптах не стоит читать весь файл в оперативную память функцией file, лучше делать это построчно, как в этой заметке.


теги: php сервис словарь поиск

комментарии (1)

19.06.2013, 17:15; рейтинг: 10156

  свежие записипоиск по блогукомментироватьстатистика

Наверх Яндекс.Метрика
© PerS
вход