Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Эвристическое (без словаря) извлечение корня из русского слова. (Дмитрий Кóтеров)
Автор Сообщение
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Фев 16, 2005 10:13 pm (написано за 2 минуты 33 секунды)
   Заголовок сообщения: Эвристическое (без словаря) извлечение корня из русского слова.
Ответить с цитатой

Стеммер Портера.
Код (php): скопировать код в буфер обмена
<?php
class Lingua_Stem_Ru
{
    var $VERSION = "0.02";
    var $Stem_Caching = 0;
    var $Stem_Cache = array();
    var $VOWEL = '/аеиоуыэюя/';
    var $PERFECTIVEGROUND = '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/';
    var $REFLEXIVE = '/(с[яь])$/';
    var $ADJECTIVE = '/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)$/';
    var $PARTICIPLE = '/((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))$/';
    var $VERB = '/((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$/';
    var $NOUN = '/(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|иям|ям|ием|ем|ам|ом|о|у|ах|иях|ях|ы|ь|ию|ью|ю|ия|ья|я)$/';
    var $RVRE = '/^(.*?[аеиоуыэюя])(.*)$/';
    var $DERIVATIONAL = '/[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?$/';

    function s(&$s, $re, $to)
    {
        $orig = $s;
        $s = preg_replace($re, $to, $s);
        return $orig !== $s;
    }

    function m($s, $re)
    {
        return preg_match($re, $s);
    }

    function stem_word($word)
    {
        $word = strtolower($word);
        $word = strtr($word, 'ё', 'е');
        # Check against cache of stemmed words
        if ($this->Stem_Caching && isset($this->Stem_Cache[$word])) {
            return $this->Stem_Cache[$word];
        }
        $stem = $word;
        do {
          if (!preg_match($this->RVRE, $word, $p)) break;
          $start = $p[1];
          $RV = $p[2];
          if (!$RV) break;

          # Step 1
          if (!$this->s($RV, $this->PERFECTIVEGROUND, '')) {
              $this->s($RV, $this->REFLEXIVE, '');

              if ($this->s($RV, $this->ADJECTIVE, '')) {
                  $this->s($RV, $this->PARTICIPLE, '');
              } else {
                  if (!$this->s($RV, $this->VERB, ''))
                      $this->s($RV, $this->NOUN, '');
              }
          }

          # Step 2
          $this->s($RV, '/и$/', '');

          # Step 3
          if ($this->m($RV, $this->DERIVATIONAL))
              $this->s($RV, '/ость?$/', '');

          # Step 4
          if (!$this->s($RV, '/ь$/', '')) {
              $this->s($RV, '/ейше?/', '');
              $this->s($RV, '/нн$/', 'н');
          }

          $stem = $start.$RV;
        } while(false);
        if ($this->Stem_Caching) $this->Stem_Cache[$word] = $stem;
        return $stem;
    }

    function stem_caching($parm_ref)
    {
        $caching_level = @$parm_ref['-level'];
        if ($caching_level) {
            if (!$this->m($caching_level, '/^[012]$/')) {
                die(__CLASS__ . "::stem_caching() - Legal values are '0','1' or '2'. '$caching_level' is not a legal value");
            }
            $this->Stem_Caching = $caching_level;
        }
        return $this->Stem_Caching;
    }

    function clear_stem_cache()
    {
        $this->Stem_Cache = array();
    }
}
?>
Пример использования:
Код (php): скопировать код в буфер обмена
$stemmer = new Lingua_Stem_Ru();
echo $stemmer->stem_word('Котеровыми');
Естественно, библиотека иногда ошибается, однако в большинстве случаев все же срабатывает вполне удовлетворительно. Может использоваться в поисковых системах (здесь на форуме, к примеру).

Последний раз редактировалось: Дмитрий Кóтеров (Сб Фев 26, 2005 7:30 pm), всего редактировалось 2 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Фев 16, 2005 10:15 pm (спустя 2 минуты; написано за 33 секунды)
   Заголовок сообщения:
Ответить с цитатой

Алгоритм взят вот отсюда: http://search.cpan.org/~algdr/Lingua-Stem-Ru/Ru.pm
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Nick Bubelo
Заглянувший



Зарегистрирован: 26.02.2005
Сообщ.: 3
Карма: 0
   поощрить/наказать

Откуда: Днепропетровск

СообщениеДобавлено: Сб Фев 26, 2005 2:03 pm (спустя 9 дней 15 часов 47 минут)
   Заголовок сообщения:
Ответить с цитатой

Это стеммер Портера:
http://snowball.tartarus.org/russian/stemmer.html

Алгоритм нуждается в маленькой доработке: перед началом стемминга в слове следует заменить все буквы 'ё' на 'е'. Сам Портер, кстати, на вышеуказанной страничке это же и советует.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Сб Фев 26, 2005 7:32 pm (спустя 5 часов 28 минут; написано за 12 секунд)
   Заголовок сообщения:
Ответить с цитатой

Поправил, спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Сый
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Вс Авг 14, 2005 1:47 pm (спустя 5 месяцев 15 дней 18 часов 14 минут; написано за 3 минуты 5 секунд)
   Заголовок сообщения:
Ответить с цитатой

Ну как я понял, скрипт вырезает лишь окончания и некоторые суффиксы. Но он не может различить (и не сможет) корень во многих словах, использующих, например суффикс "ок", ибо этот суффикс во многих случаях является частью корня. Так что словарь к такому скрипту должен прилагаться.
Вернуться к началу
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Вс Авг 14, 2005 2:46 pm (спустя 59 минут; написано за 17 секунд)
   Заголовок сообщения:
Ответить с цитатой

Кому "должен"?
Вы читали, что такое "стеммер Портера"?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Eugene Babushkin
Участник форума



Зарегистрирован: 01.08.2003
Сообщ.: 263
Карма: 3
   поощрить/наказать

Откуда: 59, Russia

СообщениеДобавлено: Чт Авг 18, 2005 2:57 pm (спустя 4 дня 11 минут; написано за 29 секунд)
   Заголовок сообщения:
Ответить с цитатой

Ссылка
Nick Bubelo писал(а):
http://snowball.tartarus.org/russian/stemmer.html
переехала
http://snowball.tartarus.org/algorithms/russian/stemmer.html
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
vutsh
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Чт Фев 01, 2007 3:04 pm (спустя 1 год 5 месяцев 14 дней 6 минут; написано за 16 секунд)
   Заголовок сообщения:
Ответить с цитатой

'/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/';
чем здесь віступает ая.
Вернуться к началу
cosmos
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Чт Июл 12, 2007 2:02 pm (спустя 5 месяцев 10 дней 22 часа 58 минут; написано за 24 секунды)
   Заголовок сообщения:
Ответить с цитатой

не могу понять на локале класс работает
копирую на хостинг не фига не пашет
Вернуться к началу
cosmos-web
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Вс Июл 22, 2007 11:23 am (спустя 9 дней 21 час 21 минуту; написано за 4 секунды)
   Заголовок сообщения:
Ответить с цитатой

strtolower
Вернуться к началу
Setti
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Пт Сен 14, 2007 9:38 am (спустя 1 месяц 22 дня 22 часа 14 минут; написано за 40 секунд)
   Заголовок сообщения:
Ответить с цитатой

Подскажите, пожалуйста, как подключить к этому стеммеру словарь словоформ? Спасибо.
Вернуться к началу
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Чт Сен 27, 2007 6:38 pm (спустя 13 дней 9 часов 6 секунд; написано за 24 секунды)
   Заголовок сообщения:
Ответить с цитатой

Никак не подключить. Словоформы - совершенно отдельная штука. Ищите по словам "php ispell".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Зарегистрирован: 12.06.2004
Сообщ.: 2265
Карма: 111
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Вт Окт 02, 2007 2:57 pm (спустя 4 дня 20 часов 19 минут; написано за 2 минуты 13 секунд)
   Заголовок сообщения:
Ответить с цитатой

Пришло письмо недавно от некой конторы, которая вроде как подрядилась нашей текстовой оптимизацией заниматься примерно следующего содержания:
Цитата:
Мы вот тут нашли код для определения словоформ, который поможет вам улучшить поиск на сайте:
Код (php): скопировать код в буфер обмена
class Lingua_Stemmer_Ru {
//...
 
Посмеялся (-;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Никита Ковалев
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Пт Янв 18, 2008 11:40 am (спустя 3 месяца 15 дней 20 часов 43 минуты; написано за 1 минуту 14 секунд)
   Заголовок сообщения:
Ответить с цитатой

Замену нужно делать не так:
$word = strtr($word, 'ё', 'е');

а так
$word = strtr($word, array('ё'=>'е'));

В теории отличаться не должно, в реальности с Unicode работает правильно только второй вариант. (PHP 5.2.3)
Вернуться к началу
deli6z
Заглянувший



Зарегистрирован: 03.10.2007
Сообщ.: 3
Карма: 1
   поощрить/наказать


СообщениеДобавлено: Пн Мар 03, 2008 11:37 pm (спустя 1 месяц 16 дней 11 часов 56 минут; написано за 1 минуту 10 секунд)
   Заголовок сообщения:
Ответить с цитатой

никому не попадалось на глаза вот такое:

Пользователь вводит русскуюсловоформу и получает нормальную форму и морфологические атрибуты либо, по желанию, всю парадигму слова.

пример сервиса

http://www.aot.ru/demo/morph.html
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Gilthoniel
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Сб Мар 08, 2008 9:21 pm (спустя 4 дня 21 час 43 минуты; написано за 31 секунду)
   Заголовок сообщения:
Ответить с цитатой

А нет ли где-нибудь такой же красивой и готовой на PHP реализации того же алгоритма, только для английского языка?
Вернуться к началу
virus126
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Пт Мар 28, 2008 11:25 am (спустя 19 дней 14 часов 3 минуты; написано за 24 секунды)
   Заголовок сообщения:
Ответить с цитатой

эхх... кровать-кроватить... :\
Вернуться к началу
bolteg86
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Пт Июн 06, 2008 1:20 pm (спустя 2 месяца 9 дней 1 час 54 минуты; написано за 2 минуты 18 секунд)
   Заголовок сообщения:
Ответить с цитатой

У меня всё отлично работает на денвере. ВСЁ ПРСТО ОТМЕННО. Разработал такую штуку, которая ищет введённые слова по базе данных во всех формах с учётом чередований в корнях даже. Но на сервере, на зеноне эта хрень не работает. Корень не выделяется. Чё делать, подскажите, плиз
Вернуться к началу
rassol
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Сб Июн 21, 2008 3:34 pm (спустя 15 дней 2 часа 14 минут; написано за 2 минуты 23 секунды)
   Заголовок сообщения:
Ответить с цитатой

Спасибо за стеммер.
Работает на ура (правда таки да, ошибается).
Небольшое дополнение от мну:
Код (php): скопировать код в буфер обмена
$word = strtr($word, 'ё', 'е');
у меня некорректно работала с UTF-8 general_ci;
Поэтому советую заменить на более универсальную
Код (php): скопировать код в буфер обмена
$word= str_ireplace('ё', 'е', $word);
Вернуться к началу
qfox.ru
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Пн Dec 01, 2008 10:05 pm (спустя 5 месяцев 10 дней 6 часов 30 минут; написано за 4 минуты 26 секунд)
   Заголовок сообщения: script, utf8 & debian
Ответить с цитатой

С утф изза регулярок дикая проблема.
После танцов с бубном выяснилось, что класс выделяет НЕ КОРЕНЬ слова, а его ОСНОВУ.
Жалко :(

p.s. Работу скрипта под дебианом с утф решал примерно так:
Код (any language): скопировать код в буфер обмена
// для начала локаль, если не стоит как надо.
mb_regex_encoding( 'UTF-8' );
mb_internal_encoding( 'UTF-8' );
// меняем strtolower на mb_strtolower
// меняем strtr на str_replace( 'ё', 'е', $word )
// далее меняем preg_replace на mb_ereg_replace в функции s
// далее меняем preg_match на mb_ereg_match в функции m
// и меняем preg_match в функции word на mb_ereg
// удаляем ограничители (/) во всех выражениях. не забываем про функцию word
Вернуться к началу
Миша Спларов
Участник форума



Зарегистрирован: 17.11.2003
Сообщ.: 798
Карма: 63
   поощрить/наказать

Откуда: Россия, Томск

СообщениеДобавлено: Вт Dec 02, 2008 7:27 am (спустя 9 часов 21 минуту; написано за 1 минуту 4 секунды)
   Заголовок сообщения:
Ответить с цитатой

qfox.ru
Не правильно решали, в preg_replace есть модификатор "u". И синтаксис pcre отличается от синтаксиса posix - одинаковая работа тех же регулярных выражений - случайное совпадение.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Elfet
Заглянувший
Заблокирован


Зарегистрирован: 27.01.2007
Сообщ.: 8
Карма: -2
   поощрить/наказать


СообщениеДобавлено: Чт Фев 05, 2009 12:24 pm (спустя 2 месяца 3 дня 4 часа 57 минут; написано за 20 секунд)
   Заголовок сообщения:
Ответить с цитатой

У меня под UTF-8 выдаёт вот что: �������
Как исправить?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
almix
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Пн Июн 08, 2009 4:03 pm (спустя 4 месяца 3 дня 3 часа 38 минут; написано за 14 секунд)
   Заголовок сообщения:
Ответить с цитатой

спасибо! очень помогло qfox.ru , вамотдельное спасибо за правки!
Вернуться к началу
Gamer09
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Чт Июн 18, 2009 3:16 am (спустя 9 дней 11 часов 12 минут; написано за 19 секунд)
   Заголовок сообщения:
Ответить с цитатой

А как это реализовать на Delphi кто-нибудь знает?
Вернуться к началу
Александр Firestarte1987
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Пн Ноя 30, 2009 12:52 am (спустя 5 месяцев 11 дней 21 час 36 минут; написано за 15 секунд)
   Заголовок сообщения: Не подскажите как по этому алгиритму определить часть речи
Ответить с цитатой

Подскажите пожалуйста
Вернуться к началу
78464
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Вт Янв 12, 2010 7:43 pm (спустя 1 месяц 12 дней 18 часов 51 минуту; написано за 36 секунд)
   Заголовок сообщения:
Ответить с цитатой

ваще не могу прочитать!!! на китайском написано чтоли????!!!!
Вернуться к началу
bæv
Модератор «Дзена»



Зарегистрирован: 27.08.2003
Сообщ.: 5737
Карма: ∞
   поощрить/наказать


СообщениеДобавлено: Вт Янв 12, 2010 8:36 pm (спустя 52 минуты; написано за 34 секунды)
   Заголовок сообщения:
Ответить с цитатой

78464 писал(а):
ваще не могу прочитать!!! на китайском написано чтоли????!!!!
— это Вы про что?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Гость






Карма: 367
   поощрить/наказать


СообщениеДобавлено: Чт Фев 18, 2010 5:57 pm (спустя 1 месяц 5 дней 21 час 20 минут; написано за 54 секунды)
   Заголовок сообщения:
Ответить с цитатой

Gamer09 писал(а):
А как это реализовать на Delphi кто-нибудь знает?
Uses
RegExpr

function TForm1.WordStem(InWord: String):String;

     function ExistReg(var InStr:String; RgExp, RpStr : String):Boolean;
     var
     TempStr: String;
     begin
     TempStr := ReplaceRegExpr(RgExp, InStr, RpStr);
     Result := TempStr <> InStr;
     InStr := TempStr;
     end;
var
RVRE, PERFECTIVEGROUND, REFLEXIVE, ADJECTIVE, PARTICIPLE, VERB, NOUN, DERIVATIONAL: String;
RE: TRegExpr;
Stem, Start, Rv: String;
begin
  Result := '';
  RE := TRegExpr.Create;
  try
  RVRE := '^(.*?[аеиоуыэюя])(.*)$';

  PERFECTIVEGROUND := '((ив|ивши|ившись|ыв|ывши|ывшись)|(((?i)[ая])(в|вши|вшись)))$';
  REFLEXIVE := '(с[яь])$';

  ADJECTIVE := '(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)$';
  PARTICIPLE := '((ивш|ывш|ующ)|(((?i)[ая])(ем|нн|вш|ющ|щ)))$';

  VERB := '((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)|(((?i)[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$';
  NOUN := '(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|иям|ям|ием|ем|ам|ом|о|у|ах|иях|ях|ы|ь|ию|ью|ю|ия|ья|я)$';

  DERIVATIONAL := '[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+[аеиоуыэюя].*((?i)о)сть?$';

  InWord := LowerCase(InWord);
  InWord := StringReplace(InWord, 'ё', 'е', [rfReplaceAll]);
  Stem := InWord;

     repeat
     RE.Expression := RVRE;
     if not RE.Exec(Stem) then Break;
     Start := RE.Match[1];
     Rv := RE.Match[2];
     if not ExecRegExpr(RVRE, Rv) then Break;

     if not(ExistReg(Rv, PERFECTIVEGROUND, '')) then ExistReg(Rv, REFLEXIVE, '');

     if (ExistReg(Rv, ADJECTIVE, '')) then ExistReg(Rv, PARTICIPLE, '') else
     if not(ExistReg(Rv, VERB, '')) then ExistReg(Rv, NOUN, '');

     ExistReg(Rv, 'и$', '');

     if ExecRegExpr(DERIVATIONAL, Rv) then ExistReg(Rv, 'ость?$', '');

     if not ExistReg(Rv, 'ь$', '') then
          begin
          ExistReg(Rv, 'ейше?', '');
          ExistReg(Rv, 'нн$', 'н');
          end;

     Stem := Start+Rv;
     Until true;

  Result := Stem;
  finally
  if Assigned (RE) then RE.Free;
  end;
end;
Вернуться к началу
Гость






Карма: 367
   поощрить/наказать


СообщениеДобавлено: Ср Мая 26, 2010 11:48 am (спустя 3 месяца 7 дней 17 часов 51 минуту; написано за 2 минуты 30 секунд)
   Заголовок сообщения:
Ответить с цитатой

Можно алгоритм в коммерческих проектах использоть? К примеру поиск в системе управления сайтом реализовать на этом алгорите, потом получить патент и продавать?
Вернуться к началу
zael
Заглянувший
Заблокирован


Зарегистрирован: 28.05.2010
Сообщ.: 2
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Пт Мая 28, 2010 3:20 pm (спустя 2 дня 3 часа 31 минуту; написано за 3 минуты 59 секунд)
   Заголовок сообщения:
Ответить с цитатой

Anonymous писал(а):
Можно алгоритм в коммерческих проектах использоть? К примеру поиск в системе управления сайтом реализовать на этом алгорите, потом получить патент и продавать?
это что-бы как у google однокоренные в выдачу попадали, так что не получится запатентовать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Гость






Карма: 367
   поощрить/наказать


СообщениеДобавлено: Вс Мая 30, 2010 9:26 pm (спустя 2 дня 6 часов 6 минут; написано за 5 минут 21 секунду)
   Заголовок сообщения:
Ответить с цитатой

zael писал(а):
это что-бы как у google однокоренные в выдачу попадали, так что не получится запатентовать.
Нет, не систему поиска запатентовать, а CMS с поиском, использующем этот алгоритм? Т. е. имею ли я право пользоваться алготритмом как хочу, и в коммерческих целях?
Вернуться к началу
TruBrite
Заглянувший
Заблокирован


Зарегистрирован: 06.06.2010
Сообщ.: 3
Карма: -1
   поощрить/наказать


СообщениеДобавлено: Вс Июн 06, 2010 4:43 pm (спустя 6 дней 19 часов 16 минут; написано за 12 секунд)
   Заголовок сообщения:
Ответить с цитатой

Спасибо!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начaть нoвую тeму   Ответить на тему Часовой пояс: GMT + 3 (Москва)
Страница 1 из 1   
Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать в опросах. Вы не можете прилагать файлы к сообщениям. Вы можете скачивать файлы.
  XML