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

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 [13439 просмотров]


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

показать комментарии (2)