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