DraKiNs 0 Posted March 28, 2011 Report Share Posted March 28, 2011 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] Link to post Share on other sites
Lfscoutinho 2 Posted March 28, 2011 Report Share Posted March 28, 2011 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 Link to post Share on other sites
DraKiNs 0 Posted March 28, 2011 Author Report Share Posted March 28, 2011 @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 Link to post Share on other sites
DraKiNs 0 Posted March 30, 2011 Author Report Share Posted March 30, 2011 Alguém teria a resposta? Desculpa se estou fazendo Double Post,creio que já passou 24 Horas. Link to post Share on other sites
Lfscoutinho 2 Posted March 30, 2011 Report Share Posted March 30, 2011 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 Link to post Share on other sites
DraKiNs 0 Posted March 31, 2011 Author Report Share Posted March 31, 2011 sim,verei que irei fazer. Não existe um Parser AIML em PHP? Link to post Share on other sites
taviroquai 55 Posted April 2, 2011 Report Share Posted April 2, 2011 NLP? Ui! Dá pano para mangas... Link to post Share on other sites
DraKiNs 0 Posted April 7, 2011 Author Report Share Posted April 7, 2011 Da na mesma,ainda não acho parser NLP ou AIML.. Link to post Share on other sites
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