Замена слов по словарю

Тема в разделе "PHP", создана пользователем g00dwin, 18 янв 2009.

Модераторы: latteo
  1. g00dwin

    g00dwin

    Регистр.:
    9 ноя 2006
    Сообщения:
    164
    Симпатии:
    68
    Каким образом организовать замену слов по словарю?
    Видимо, примерно по такому принципу работают синонимайзеры, но тут задача в следующем.

    Есть карточки товаров (достаточно много), в них есть поле - технические характеристики, в котором они собственно и перечислены, т.е. size, weight, power, capacity и т.п. Всего порядка 50 слов и словосочетаний. Нужно перевести их на русский - размер, вес и т.п. Прогонять каждую карточку через гугль-переводчик - получается громоздко, да и перевод не тот. Хочется просто заменить слова size на размер, weight на вес и т.д., т.е. составить этот словарик и пргнать через него карточки. В голову приходит только такой алгоритм - брать по слову или словосочетанию из словарика, искать его в карточке, при нахождении - заменять, и так все слова из словаря, потом так же следующую карточку и так пока карточки не кончатся. Но вроде как слишком громоздко получается. Что если карточек несколько тысяч? Может кто подскажет более изящное решение? Если можно, то сразу с куском кода.
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Не думаю, что у тебя текст больших объёмов.
    Загоняешь текст карточки в один массив, словарь в другой и делаешь замену по массивам.
    Читать внимательно ман
    http://ru2.php.net/manual/ru/function.str-replace.php
     
  3. g00dwin

    g00dwin

    Регистр.:
    9 ноя 2006
    Сообщения:
    164
    Симпатии:
    68
    Текст конечно небольшой.
    Можно поподробнее, по какому принципу их в массив загнать?
     
  4. Dicken

    Dicken Создатель

    Регистр.:
    11 авг 2008
    Сообщения:
    10
    Симпатии:
    0
    через пробелы
     
  5. g00dwin

    g00dwin

    Регистр.:
    9 ноя 2006
    Сообщения:
    164
    Симпатии:
    68
    Народ, ну вы че, издеваетесь? Раздел же вроде и так для начинающих. Можно просто кусок кода для примера привести? Как это "через пробелы"? А если некоторые фразы не в одно слово, а в несколько? И еще, желательно сохранить html - форматирование. Как с ним быть?
     
  6. timati

    timati Постоялец

    Регистр.:
    14 июл 2008
    Сообщения:
    134
    Симпатии:
    13
    короче вот код.Возможно будут ошибки но только в синтаксисе
    Код:
    <?php
    $f='тут текст карточки';
    $f=str_replace('size:','размер:',$f); 
    $f=str_replace('weigth:','вес:',$f);
    ?>
    Если и это непонятно то отписывай в теме. Помогу
     
  7. TS.ka

    TS.ka Постоялец

    Регистр.:
    13 сен 2008
    Сообщения:
    66
    Симпатии:
    13
    PHP:
    $text "Текст карточки";
    $words = array('size','weight', ...); //Список слов для замены
    $translate = array('размер','вес', ...); //Список переведенных слов
    for($i=0,$i<length($words),$i++){
         
    $text str_replace($words['i'],$translate['i'],$f);
    }
    Как-то так...
     
    g00dwin нравится это.
  8. funman

    funman

    Регистр.:
    28 дек 2007
    Сообщения:
    155
    Симпатии:
    25
    можно как ф-цию оформить...

    PHP:
    <?php


    $card_text 
    "size = 10cm, weight = 10х10, power=220v, capacity = 40Gb  ";

     function 
    translate($st)
      {
       
        
    $st=strtr($st
                        array(
                            
    "size"=>"размер""weight"=>"вес""power"=>"энергия""capacity"=>"емкость" 
                            
    )
                 );

        return 
    $st;
      }

    print(
    translate($card_text));
    ?>
     
  9. timati

    timati Постоялец

    Регистр.:
    14 июл 2008
    Сообщения:
    134
    Симпатии:
    13
    Все варианты приблизительно одинаковые но советую взять вариант FunMan'a
     
  10. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    Ребят, вы о чем? ф-ция str_replace позволяет использовать массивы в аргументах:
    Код:
    mixed str_replace (mixed search, mixed replace, mixed subject)
    Эта функция возвращает строку или массив со всеми вхождениями search
    в subject, заменёнными данным значением replace.
    В PHP 4.0.5 и новее каждый параметр для str_replace() может быть массивом.
    итого:
    PHP:
    $text "Текст карточки"
    $words = array('size','weight', ...); //Список слов для замены 
    $translate = array('размер','вес', ...); //Список переведенных слов
    $text str_replace($words,$translate,$text);
     
    TS.ka нравится это.