Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wykrywanie poszczególnych słów wśród tekstu.
Forum PHP.pl > Forum > Przedszkole
pedobearpl
Witam. Piszę autoresponder pod botapi (boty.gg.pl) i właśnie się zawiesiłem na tym żeby skrypt wykrywał słowa z tekstu tzn jak ktoś napisze "cześć" to bot zwraca dobrą odpowiedź ale jak np "cześć biggrin.gif" to wyświetla wiadomość podstawową ..

Przykład:
  1. <?
  2. require_once('MessageBuilder.php');
  3. $M=new MessageBuilder();
  4. switch ($HTTP_RAW_POST_DATA) {
  5. case "cześć": $M->addText('Twój numer to ' . $_GET['from']); break;
  6. case "kim jesteś?": $M->addText('Jestem botem.'); break;
  7. default: $M->addText('Nie rozumiem...');
  8. }
  9. $M->reply();

Jest jakiś sposób na zrobienie tego aby nie czytał tylko słowa "cześć" tylko wynajdywał je np w zdaniu albo z znakami interpunkcyjnymi czy emotikonami ?

wNogachSpisz
Wrzucić do bazy i walić zapytaniami LIKE
pedobearpl
może ktoś to jakoś łatwiej wytłumaczyć? biggrin.gif jakiś przykład ?
kristaps
Cytat
może ktoś to jakoś łatwiej wytłumaczyć? jakiś przykład ?


  1. SELECT * FROM tabela WHERE tresc LIKE '%cześć%'

zwróci, np:

  1. "Cześć, jak się masz"
  2. "Cześć smile.gif"
  3. "Co tam u Ciebie? Cześć tak poza tym"


Mógłbyś też spróbować wykorzystać funkcję preg_match lub strpos.
pedobearpl
Cytat(kristaps @ 16.12.2012, 12:13:01 ) *
  1. SELECT * FROM tabela WHERE tresc LIKE '%cześć%'

zwróci, np:

  1. "Cześć, jak się masz"
  2. "Cześć smile.gif"
  3. "Co tam u Ciebie? Cześć tak poza tym"

a podpowiesz mi jak to wdrążyć w kod? biggrin.gif
kristaps
Cytat(pedobearpl @ 16.12.2012, 12:17:00 ) *
a podpowiesz mi jak to wdrążyć w kod? biggrin.gif


Już to zrobiłem. Nie wiem co więcej mógłbym zrobić. Pokaż co napisałeś, postaramy się pomóc. Całość polega na tym, że albo zapisujesz wszystko w bazie danych i na niej operujesz, albo wykorzystujesz funkcje, o których wspomniałem wyżej. W sumie jeżeli piszesz autoresponder, to lepsze jest drugie rozwiązanie.
!*!
Boty GG operują na bazach? Od kiedy... Poza tym LIKE do wyszukiwania? Napisać "zarżniesz tym bazę" to mało.

Zmienna $HTTP_RAW_POST_DATA, obejmuje wysłany tekst jak mniemam?

  1. if (preg_match('/cześć/i', $HTTP_RAW_POST_DATA))
  2. {
  3. echo 'Znalazłem cześć';
  4. } else {
  5. echo 'Nie przywitał się :(';
  6. }


Oczywiście to tylko przykład, musisz to bardziej obudować.
pedobearpl
  1. <?
  2. require_once('MessageBuilder.php');
  3. $M=new MessageBuilder();
  4. switch ($HTTP_RAW_POST_DATA) {
  5. case "hej": $M->addText('no siema.'); break;
  6. case "co tam?": $M->addText('okej a tam? biggrin.gif'); break;
  7. case "co robisz": $M->addText('oddycham i takie tam ;) a Ty? ;D'); break;
  8. case "ide": $M->addText('yo'); jbreak;
  9. default: $M->addText(' ');
  10. }
  11. $M->reply();


wiem, prymitywne takie..

Cytat(!*! @ 16.12.2012, 12:29:45 ) *
Boty GG operują na bazach? Od kiedy... Poza tym LIKE do wyszukiwania? Napisać "zarżniesz tym bazę" to mało.

Zmienna $HTTP_RAW_POST_DATA, obejmuje wysłany tekst jak mniemam?

  1. if (preg_match('/cześć/i', $HTTP_RAW_POST_DATA))
  2. {
  3. echo 'Znalazłem cześć';
  4. } else {
  5. echo 'Nie przywitał się :(';
  6. }


Oczywiście to tylko przykład, musisz to bardziej obudować.

Zrobiłem według tego ale do odpowiedz dodaje mi "S" .. wiesz jak to usunąć? biggrin.gif

  1. <?
  2. require_once('MessageBuilder.php');
  3. $M=new MessageBuilder();
  4. if (preg_match('/cześć/i', $HTTP_RAW_POST_DATA))
  5. {
  6. echo 'Znalazłem cześć';
  7. } else {
  8. echo 'Nie przywitał się :(';
  9. }
  10. $M->reply();
!*!
  1. $HTTP_RAW_POST_DATA = 'cześć sldlasdlas';
  2. if(preg_match('/cześć/i', $HTTP_RAW_POST_DATA))
  3. {
  4. echo 'Znalazłem cześć';
  5. }
  6. else
  7. {
  8. echo 'Nie przywitał się :(';
  9. }


Nie widzę tu żadnego "S". Sprawdź co zawiera ta zmienną przez var_dump(), jak również
  1. $M->reply();
pedobearpl
Cytat(!*! @ 16.12.2012, 13:13:43 ) *
  1. $HTTP_RAW_POST_DATA = 'cześć sldlasdlas';
  2. if(preg_match('/cześć/i', $HTTP_RAW_POST_DATA))
  3. {
  4. echo 'Znalazłem cześć';
  5. }
  6. else
  7. {
  8. echo 'Nie przywitał się :(';
  9. }


Nie widzę tu żadnego "S". Sprawdź co zawiera ta zmienną przez var_dump(), jak również
  1. $M->reply();

nadal nie wiem jak to naprawić ;) że jak zrobić generator plików ? tzn żeby był osobny folder "odpowiedzi" a w nim pliki np "hej.php" i inne a w nich
  1. <?
  2. if (preg_match('/hej/', $HTTP_RAW_POST_DATA))
  3. {
  4. echo 'no siema';
  5. }
  6. ?>
aby dodawał to do jakieś listy plików (?) żeby wszystko mogło być w jednym pliku tzn
  1. <?
  2. require_once('MessageBuilder.php');
  3. $M=new MessageBuilder();
  4. include 'odpowiedzi/hej.yml';
  5. include 'odpowiedzi/costam.yml';
  6. include 'odpowiedzi/inne.yml';
  7. include 'odpowiedzi/dafgj.yml';
  8. include 'odpowiedzi/fs.yml';
  9. include 'odpowiedzi/sfj.yml';
  10. $M->reply();
i aby te odpowiedzi automatycznie dodawały się do skryptu? biggrin.gif
Generator jaki narazie mam
  1. <form action="#" method="post" >
  2. <b>Jeżeli wiadomość będzie o treści:</b> <input type="text" name="pytanie" /><br><br>
  3. <b>to odpowiedz na nią:</b> <input type="text" name="odpowiedz" /><br><br>
  4. <br><br><input type="submit" value="GENERUJ" />
  5. <br><br>
  6. <textarea name="kod" rows="15" cols="62">
  7. if (preg_match('/<?php echo $_POST['pytanie']; ?>/', $HTTP_RAW_POST_DATA))
  8. {
  9. echo '<?php echo $_POST['odpowiedz']; ?>';
  10. </textarea></form>
!*!
  1. $words = array('cześć', 'jaki czas');
  2. $iWords = implode('|', $words);
  3.  
  4. print_r($iWords);
  5.  
  6. $HTTP_RAW_POST_DATA = 'cześć sldlasdlas';
  7. if(preg_match('/'.$iWords.'/i', $HTTP_RAW_POST_DATA, $match))
  8. {
  9. print_r($match);
  10. echo 'Znalazłem cześć';
  11. }
  12. else
  13. {
  14. echo 'Nie przywitał się :(';
  15. }


A jak chcesz w pliku, to tablice $words zapisujesz przez var_export() i file_put_contents, a później odczytujesz.
pedobearpl
Cytat(!*! @ 16.12.2012, 14:08:08 ) *
  1. $words = array('cześć', 'jaki czas');
  2. $iWords = implode('|', $words);
  3.  
  4. print_r($iWords);
  5.  
  6. $HTTP_RAW_POST_DATA = 'cześć sldlasdlas';
  7. if(preg_match('/'.$iWords.'/i', $HTTP_RAW_POST_DATA, $match))
  8. {
  9. print_r($match);
  10. echo 'Znalazłem cześć';
  11. }
  12. else
  13. {
  14. echo 'Nie przywitał się :(';
  15. }


A jak chcesz w pliku, to tablice $words zapisujesz przez var_export() i file_put_contents, a później odczytujesz.

tylko jak? gdy próbuje to co wysłałeś odpalić jakieś błędy lecą . mógłbyś pokazać jak to zrobić ? biggrin.gif
!*!
Co zrobić? Powyższy kod działa. Opcje exportu i zapisu masz opisane w manualu (var_export() i file_put_contents)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.