Um exemplo a seguir de um objeto para que os usuários pesquisem texto semelhante comparando string com array para retornar o item mais compatível
//string a ser comparada com o array let str = "uma frase qualquer aqui"; let strArr = str.split(" "); //ao comparar com o array deve retornar o segundo item, pois tem mais palavras compativeis let arr = ["frase qualquer", "uma qualquer aqui", "nada compatível"]; function maisCompativel(){ //Vetor de contagens com tamanho de arr e preenchido com zeros const contagens = new Array(arr.length).fill(0); for(let i = 0; i < strArr.length; i++){ //loop para percorrer as frases for (let j = 0; j < arr.length; j++){ if (arr[j].includes(strArr[i])){ contagens[j]++; //contabilizar a palavra já que existe } } } let maiorContagem = Math.max(...contagens); let posicaoMaior = contagens.indexOf(maiorContagem); return arr[posicaoMaior]; } alert(maisCompativel());
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> Outro exemplo, que mostra com * qual tem palavras com perguntas mais relevântes para resposta <pre> items.push({pergunta:' oi bom dia tarde noite ola ', resposta: "olá tudo bem. Vamos conversar."}); items.push({pergunta:' bem voce, esta, como , diga ', resposta: "Hoje estou de bem com a vida, me diga mais sobre você."}); items.push({pergunta:' filme serie desenho novela ', resposta: "Vamos falar de filme? Eu gosto do filme eu robô. Qual filme você gosta?"}); items.push({pergunta:' oi bem e voce ', resposta: "Legal. Eu estou bem. O que gosta de fazer?"}); items.push({pergunta:' oi, cade, meu carro oi oi oi ', resposta: "nada haver"}); </pre> <input type="text" id="palavra"><input type="button" value="ok" onClick="conversar();"> <div id="result"></div> <script> var items = []; items.push({pergunta:' oi bom dia tarde noite ola ', resposta: "olá tudo bem. Vamos conversar."}); items.push({pergunta:' bem voce, esta, como , diga ', resposta: "Hoje estou de bem com a vida, me diga mais sobre você."}); items.push({pergunta:' filme serie desenho novela ', resposta: "Vamos falar de filme? Eu gosto do filme eu robô. Qual filme você gosta?"}); items.push({pergunta:' oi bem e voce ', resposta: "Legal. Eu estou bem. O que gosta de fazer?"}); items.push({pergunta:' oi, cade, meu carro oi oi oi ', resposta: "nada haver"}); function find(items, text) { text = text.split(' '); return items.filter(function(event) { return event.pergunta.indexOf(text[0]) > -1 || event.pergunta.indexOf(text[1]) > -1 || event.pergunta.indexOf(text[2]) > -1 || event.pergunta.indexOf(text[3]) > -1 || event.pergunta.indexOf(text[4]) > -1 || event.pergunta.indexOf(text[5]) > -1}) } function conversar() { pl = document.getElementById('palavra').value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ""); //retira acento e deixa minuscula var x = (find(items,pl)); //chama a funcao var re = pl.split(' '); var count; document.getElementById('result').innerHTML = x.length+'<br>'; ii = 0; while(ii < x.length){ //mais relevante for(let iq = 0; iq < re.length; iq++){ if(x[ii].pergunta.includes(re[iq])){ count+="<font color=red> * </font>"; }} document.getElementById('result').innerHTML+= x[ii].pergunta +" -> "+ x[ii].resposta + " - relevante " + count + " <hr> "; count = ''; ii++; } } </script>
Veja outra versão
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <input type="text" id="palavra"><input type="button" value="ok" onClick="conversar();"> <div id="result"></div> <script> var items = []; items.push({pergunta:' oi bom dia tarde noite ola ', resposta: "olá tudo bem. Vamos conversar."}); items.push({pergunta:' bem voce, esta, como , diga ', resposta: "Hoje estou de bem com a vida, me diga mais sobre você."}); items.push({pergunta:' filme serie desenho novela ', resposta: "Vamos falar de filme? Eu gosto do filme eu robô. Qual filme você gosta?"}); items.push({pergunta:' oi bem e voce ', resposta: "Legal. Eu estou bem. O que gosta de fazer?"}); items.push({pergunta:' oi, cade, meu carro oi oi oi ', resposta: "nada haver"}); function find(items, text) { text = text.split(' '); return items.filter(function(event) { return event.pergunta.indexOf(text[0]) > -1 || event.pergunta.indexOf(text[1]) > -1 || event.pergunta.indexOf(text[2]) > -1 || event.pergunta.indexOf(text[3]) > -1 || event.pergunta.indexOf(text[4]) > -1 || event.pergunta.indexOf(text[5]) > -1}) } function conversar() { pl = document.getElementById('palavra').value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ""); //retira acento e deixa minuscula var x = (find(items,pl)); //chama a funcao var re = pl.split(' '); var count; var contar = 0; var countmaior = 0; document.getElementById('result').innerHTML = x.length+'<br>'; ii = 0; while(ii < x.length){ //mais relevante for(let iq = 0; iq < re.length; iq++){ if(x[ii].pergunta.includes(re[iq])){ count+="<font color=red> * </font>"; contar++; }} if(contar > countmaior){ countmaior = contar; arrayrelevante = x[ii].pergunta+" - "+x[ii].resposta;} document.getElementById('result').innerHTML+= x[ii].pergunta +" -> "+ x[ii].resposta + " - relevante " + count + " <hr> "; count = ''; contar = 0; ii++; } document.getElementById('result').innerHTML+="<br><b>mais relevânte: "+countmaior+" palavra(s): " + arrayrelevante+"</b>"; } </script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <input type="text" id="palavra"><input type="button" value="ok" onClick="pesquisar();"> <div id="result"></div> <script> //array com perguntas e respostas, vou comparar as perguntas mais relevantes, que tem mais palavras parecidas do input palavra var items = [ {pergunta:"oi bom dia tarde noite ola", resposta: "olá tudo bem. Vamos conversar."}, {pergunta:"filme serie desenho novela", resposta: "Vamos falar de filme? Eu gosto do filme eu robô. Qual filme você gosta?"}, {pergunta:"oi como e seu nome", resposta: "oi meu nome é robota"}, {pergunta:"carro fusca oi", resposta: "Vamos falar de carros? o que quer saber?"} ]; //funcao que filtra o array function find(items, text) { text = text.split(' '); //separo as palavras, e comparo 1 por 1 abaixo limitei para 6, pode colocar mais... return items.filter(function(event) {return event.pergunta.indexOf(text[0]) > -1 || event.pergunta.indexOf(text[1]) > -1 || event.pergunta.indexOf(text[2]) > -1 || event.pergunta.indexOf(text[3]) > -1 || event.pergunta.indexOf(text[4]) > -1 || event.pergunta.indexOf(text[5]) > -1}) } //funcao que trava as palavras e chama a funcao find function pesquisar() { pl = document.getElementById('palavra').value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ""); //retira acento e deixa minuscula var x = (find(items,pl)); //chama a funcao de cima var re = pl.split(' '); // separa a string e abaixo seta as variaveis var todos; var arrayrelevante; var contar = 0; var countmaior = 0; var ii = 0; document.getElementById('result').innerHTML ="0 resultados"; //inicia com 0 resultados //enquanto tiver arrays filtrados acima, faça... while(ii < x.length){ //aqui comparo as palavras que mais se repetem, conto for(let iq = 0; iq < re.length; iq++){ if(x[ii].pergunta.includes(re[iq])){ contar++; }} //quando contar++ for maior que countmaior, quer dizer que tem mais palavras relevantes, entao coloco em arrayrelevante if(contar > countmaior){ countmaior = contar; arrayrelevante = x[ii].pergunta + " - " + x[ii].resposta;} todos+= x[ii].pergunta +" -> "+ x[ii].resposta + " <hr>"; //adiciono para mostrar no final contar = 0; //zero para continuar comparando acima no laço ii++; //adiciono 1 enquanto for menor que os resultados } //mostro na tela document.getElementById('result').innerHTML = x.length+' resultados<br>'+ todos.replace("undefined", "") + "<br><b>mais relevânte: "+countmaior+" palavra(s): " + arrayrelevante+"</b>"; } </script>
<< Anterior Pesquisa de texto completo do lado do cliente na matriz de objetos
Deixe um comentário