Как сделать попроще? Вытащить теги из фразы.

Тема в разделе "Регулярные выражения", создана пользователем virtualbrest, 15 мар 2009.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Подскажите плиз простое решение следующей задачи:

    Есть текстовая фраза, из нее надо вытащить ключевые слова, но не слишком много, и не слишком короткие. В идеале, что бы чем длиннее фраза, тем более длинные слова вытаскивало.

    К примеру:

    Вытащить должно:

    Как бы ничего сложного, но надо учесть что встречаются всякие разные символы, которые не нужны - тире, точки и т.д., тоесть надо оставить английские и русские буквы, остальное убрать. Цифры тоже можно убрать. Ну и не забыть про длинну слов, она полюбому не может быть менше 3 симоволов. Если возможно, то что бы если в фразе более 5 слов, то удаляло все, что меньше 4 символов.
    И самое пожалуй главное! Не должно быть повторяющихся слов :)
     
  2. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    Вы это все одной регуляркой хотите сделать? Или реализация не важна, главное - результат?
     
  3. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    312
    на php
    PHP:
    <?php
    $text
    ="C 11 по 20 марта Госавтоинспекция и УП Белтехосмотр проводит общереспубликанскую декаду Гостехосмотр. Госавтоинспекция";
    $count=count(explode(" ",$text));
    if(
    $count>5)
      
    preg_match_all("/([a-z,A-Z,а-я,А-Я]{3,100})/",$text,$res);
    else
      
    preg_match_all("/([a-z,A-Z,а-я,А-Я]{4,100})/",$text,$res);
    $res=array_unique($res[1]);
    foreach(
    $res as $t){
    echo 
    $t;
    }
    ?>
     
    virtualbrest нравится это.
  4. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    не обязательно одной :) просто с минимальными затратами кода, а то у меня получилось что-то уж больно много, чувствую, есть вариант попроще...

    Спасибо, код что тут приведен имено то, что надо.
     
  5. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Уточню, по условию задачи:

    не
    PHP:
    if($count>5)
    а
    PHP:
    if($count<5)
    надо для приведенного выше кода.

    и походу вопрос... запяты не вырезает, если они стоят вприлипку к слову, а они ессно так и стоят. Остальное вроде бы все вырезает, то что надо. Как можно и от запятых избавиться?
     
  6. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Убрать их из символного класса, естесно. Вместо [a-z,A-Z,а-я,А-Я] - [a-zA-Zа-яА-Я]
     
    virtualbrest нравится это.
Статус темы:
Закрыта.