DraKiNs Posted March 28, 2011 at 05:38 AM Report #377348 Posted March 28, 2011 at 05:38 AM Então gente estou pensado em criar um Chat Bot em PHP. Está tudo bem por enquanto porém preciso de dicas e algumas ajudas. Tanto dica lógica,quanto dica a melhor o código ou até dicas para colocar no banco de dados. O arquivo esta da seguinte forma: Oi:Olá como vai: Bem:Legal,eu estou bem: O ':' separa a pergunta da resposta (o último : é para separar a próxima pergunta) E o código <?php //ler dados $sFile = "data.txt"; $bHandle = fopen($sFile, "r"); $sContents = fread($bHandle, filesize($sFile)); fclose($bHandle); $sSplit = explode(':',$sContents); // verificar foreach($sSplit as $iValue => $sWord) { if(!($iValue % 2)) { if(strpos($sWord,$_GET['msg']) !== false) { echo $sSplit[ $iValue + 1] . "<br>"; break; } } } ?> Então usas: http://127.0.0.1/bot.php?msg=Oi Como podem ver está bem simples,é que no caso após terminado as perguntas e banco de dados e códigos php irei usar request em javascript para enviar as perguntas usando o query string atual,assim muito mais prático,sem precisar atualizar a página. Por enquanto é isto galera,os créditos serão mantido a todos que me ajudarem. Abraços Atenciosamente DraKiNs @EDIT Fiz desta forma também <?php $respostas = array ( //resposta => pergunta 'Oi como vai' => 'Oi', 'legume' => 'cenoura' ); foreach($respostas as $word) { if(strpos($_GET['msg'],$word) !== false) die(array_search($word,$respostas)); } ?> [/php]
Lfscoutinho Posted March 28, 2011 at 08:21 AM Report #377350 Posted March 28, 2011 at 08:21 AM Boas, Na verdade, não consegui perceber qual é a tua dúvida... Mas aqui vão umas sugestões: No caso de usares ficheiros, sugiro o seguinte: que coloques só a pergunta no ficheiro, onde cada linha corresponde a uma pergunta. Depois, o código ficaria assim: <?php $id = (int) $_GET['msg']; $id = ( $id > -1 ) ? $id : 0; $file = 'data.txt'; // Ficheiro $resposta = file( $file ); // Coloca todas as linhas num array $resposta = $resposta[ $id ]; // Linha com o id indicado echo $resposta; ?> Desta forma, não precisas de abrir e fechar ficheiros, percorreres um array até encontrares a linha que procuras, etc... No caso de optares pelos arrays, eu aconselharia usares um número como chave, em vez de usares palavras. Assim, ficaria algo como o seguinte: <?php $respostas[] = 'Oi como vai?'; $respostas[] = 'Legal,eu estou bem?'; $id = (int) $_GET['msg']; $id = ( $id > -1 ) ? $id : 0; if( array_key_exists( $id, $respostas ) ) { echo $respostas[ $id ]; } ?> Em ambos os casos, o url passa a ser algo como: http://127.0.0.1/bot.php?msg=1 Espero que tenha conseguido ajudar de alguma forma 👍
DraKiNs Posted March 28, 2011 at 02:45 PM Author Report #377457 Posted March 28, 2011 at 02:45 PM @POST EDITADO Ah deixa,terminei já praticamente tudo,inclusive se alguém quiser utilizar ele,contanto que tenha meus créditos,é bem simples <?php $sPerguntas[0] = "Olá como vai tudo bom"; $sRespostas[0] = "Vou bem muito obrigado e você"; $sPerguntas[1] = "O que é [iPs]"; $sRespostas[1] = "[iPs] é uma equipe de programadores qualificados e reconhecidos no mundo todo"; $sPerguntas[2] = "legal"; $sRespostas[2] = "É bem legal"; $sPerguntas[3] = "voce e inutil"; $sRespostas[3] = "Engano seu,os robos são muito úteis,meu amigo Ed me contou isto"; echo sWords($_GET['msg'],$sRespostas,$sPerguntas); function sWords($sPergunta,$sResposta,$sPart) { $iAnterior = -1; sRemoveAcentos($sPergunta); foreach($sPart as $iValue => $sWord) { $iTemp = iLevenshteinWord($sPergunta,$sWord) ; if($iTemp > $iAnterior) $iAnterior = $iValue; } return $sResposta[$iAnterior]; } function iLevenshteinWord($sStr1,$sStr2) { $iReturn = 0; $sSplit = explode(' ',$sStr1); foreach($sSplit as $sWord) { if(strripos($sStr2, $sWord) !== false || strripos($sWord,$sStr2 ) !== false) { $iReturn++; } } return $iReturn; } function sRemoveAcentos($sString) { $a = array ( '/[ÂÀÁÄÃ]/'=>'A', '/[âãàáä]/'=>'a', '/[ÊÈÉË]/'=>'E', '/[êèéë]/'=>'e', '/[ÎÍÌÏ]/'=>'I', '/[îíìï]/'=>'i', '/[ÔÕÒÓÖ]/'=>'O', '/[ôõòóö]/'=>'o', '/[ÛÙÚÜ]/'=>'U', '/[ûúùü]/'=>'u', '/ç/'=>'c', '/Ç/'=> 'C' ); return preg_replace(array_keys($a), array_values($a), $sString); } ?> Se alguém ainda tiver alguma dica de como otimizar meu código,ou até para colocar frases,eu aceito Abraços ~ [iPs]TeaM
DraKiNs Posted March 30, 2011 at 04:59 AM Author Report #377936 Posted March 30, 2011 at 04:59 AM Alguém teria a resposta? Desculpa se estou fazendo Double Post,creio que já passou 24 Horas.
Lfscoutinho Posted March 30, 2011 at 09:05 AM Report #377950 Posted March 30, 2011 at 09:05 AM Boas, Qual é a tua dúvida, concretamente? Bem, dei uma olhada no código e então aqui vão algumas opiniões. Variáveis, funções, etc.. ou tudo em português ou tudo em inglês! O PHP tem uma função para remover os acentos: iconv Na função iLevenshteinWord, em vez de teres o foreach, podes fazer também o explode da variável $sStr2, utilizas a função array_intersect e depois usas a função count() Também tens de remover os acentos das perguntas que tens no teu array, não é só da pergunta que vem na variável msg
DraKiNs Posted March 31, 2011 at 07:31 PM Author Report #378366 Posted March 31, 2011 at 07:31 PM sim,verei que irei fazer. Não existe um Parser AIML em PHP?
taviroquai Posted April 2, 2011 at 06:12 PM Report #378792 Posted April 2, 2011 at 06:12 PM NLP? Ui! Dá pano para mangas...
DraKiNs Posted April 7, 2011 at 02:19 PM Author Report #379641 Posted April 7, 2011 at 02:19 PM Da na mesma,ainda não acho parser NLP ou AIML..
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now