Поиск в текстовой базе....

Discussion in 'PHP' started by marlen, 2 Sep 2008.

  1. marlen

    marlen New Member

    Joined:
    5 Apr 2008
    Messages:
    17
    Likes Received:
    2
    Reputations:
    0
    В текстовом документе есть около 100.000 слов, нужен скрипт который проводил бы поиск определенного слово или похожего слова.
    Пример: Ищем слово "домофон"
    Результат поиска:
    домофон
    дом
    фон
    Пример: ищём номер Icq: 348657695
    Результат поиска:
    348657696
    348657685
    348557695
    338657695
    348657695
     
  2. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    ...
     
  3. D Mak

    D Mak Elder - Старейшина

    Joined:
    23 Jun 2007
    Messages:
    136
    Likes Received:
    27
    Reputations:
    0
    PHP:
    $str "matc1 matc2 matc3 matcd";
    $search_str "match";
    $matches = array();
    for(
    $i=0$i<strlen($search_str); $i++) {
    $temp_str $search_str;
    $temp_str[$i] = ".";
    $search_regexp "#".$temp_str."#i";
    preg_match_all($search_regexp$str$m);
    $matches array_merge($matches$m[0]);
    }
    print_r($matches);
    находит слово с одной неверной буквой

    аналогично для поиска асек:
    PHP:
    $str "21232 11231 11111";
    $search_str "21231";
    $matches = array();
    for(
    $i=0$i<strlen($search_str); $i++) {
    $temp_str $search_str;
    $num $temp_str[$i]; $b_num $num-1$e_num $num+1;
    $temp_str substr($temp_str0$i)."[".$b_num."-".$e_num."]".substr($temp_str$i+1);
    $search_regexp "#".$temp_str."#i";
    preg_match_all($search_regexp$str$m);
    $matches array_merge($matches$m[0]);
    }
    print_r($matches);
    еще для домофона:
    PHP:
    $str "дом фон домофон гггг";
    $search_str "домофон";
    $m2 = array();
    for(
    $i=0$i<strlen($search_str)-2$i++) {
    $temp_str substr($search_str$i3);
    $search_regexp "#[^ ]*".$temp_str."[^ *]*#i";
    echo 
    $search_regexp."<br>";
    preg_match_all($search_regexp$str$m);
    $m2 array_merge($matches$m[0]);
    }
    $matches array_unique($m2); //избавляемся от повторов
    print_r($matches);
     
    #3 D Mak, 2 Sep 2008
    Last edited: 2 Sep 2008
  4. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,192
    Reputations:
    430
    А не проще ли...
    PHP:
    $fp=file('стотыщъ.тхт');
    foreach(
    $fp AS $str) {
    if (
    $str='двеститыщ') { echo("Есть такое слово..."); }} 
     
  5. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    вообщем D Mak реализовал ТС скрипт асечки по поиску асек)) :rolleyes:
     
    3 people like this.
  6. D Mak

    D Mak Elder - Старейшина

    Joined:
    23 Jun 2007
    Messages:
    136
    Likes Received:
    27
    Reputations:
    0
    Ch3ck ты что нужно сделать читал?
    и ваще даже если по твоему можно проще
    PHP:
    $fp=file('стотыщъ.тхт');
    if(
    in_array($fp'двеститыщ')) echo "good :)"
    )
     
    #6 D Mak, 2 Sep 2008
    Last edited: 2 Sep 2008
    1 person likes this.
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Причем условие if ($str='двеститыщ') будет выполняться всегда

    2TC лично для меня слова "мент" и "козел" очень созвучны, как ты предлагаешь искать настолько похожие слова?)
     
    _________________________
  8. SponS

    SponS Banned

    Joined:
    8 Apr 2006
    Messages:
    10
    Likes Received:
    1
    Reputations:
    -1
    А для меня ТС и ебло.
     
  9. heretic1990

    heretic1990 Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    487
    Likes Received:
    182
    Reputations:
    5
    тоже мне мыслители, есть такой скипт!


    За подробностями в асю 44600577
     
    #9 heretic1990, 3 Sep 2008
    Last edited: 3 Sep 2008