Как получить наиболее связанный вопрос по ключевым словам - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу найти ответ, просмотрев вводимые пользователем данные и проверив, какой ответ содержит наиболее подходящие ключевые слова.У меня есть массив объектов.Когда пользователь отправляет форму, я хочу просмотреть пользовательский ввод и проверить, какой ответ имеет больше тегов, которые находятся внутри пользовательского ввода.

Я не знаю с чего начать.Кто-нибудь знает, как я могу сделать это в JS или jQuery?
Мне нужно найти ответ, где большинство ключевых слов (тегов) в пользовательском вводе.

Этокод у меня сейчас:

var objectArr = [{
    "tags": ["windows", "3cx", "webclient", "hoe", "venster", "windows-venster"],
    "answer": "Maak op je bureaublad een sneltoets aan en kies als doel:<br/>“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” –app=https://pbx000000.fluxcloud.eu:5001/webclient <br/>Hier verander je de 000000 in de link naar het juiste PBX-nummer wat er hoort."
  },
  {
    "tags": ["swyx", "toestel", "opstarten", "blijft", "opnieuw", "mijn", "werkt niet"],
    "answer": "Tijdens een software-update is de stroom mogelijk van het toestel af geweest. <br/> Je kan het toestel opsturen naar ons om de software te herstellen.<br/> De kosten van het herstellen van het toestel bedraagt €25,-"
  },
  {
    "tags": ["toestel", "vast", "bellen", "kan niet", "werkt niet"],
    "answer": "Zorg ervoor dat de telefonie-applicatie (SwyxIt!) is opgestart en dat jouw toestel is ingelogd op je eigen naam.<br/> Als dat het geval is, ga dan in SwyxIt! naar: Instellingen – CTI – CTI gebruiken – start koppelen."
  },
  {
    "tags": ["client", "swyx", "inloggen", "kan niet", "werkt niet"],
    "answer": "Controleer de tijd op de pc, deze mag niet meer dan 3 minuten afwijken van de tijd op de Swyxserver.<br/> Klopt de tijd op je pc, maar kun je nog steeds niet inloggen?<br/> Controleer dan je SwyxIt!-versie. Deze mag niet nieuwer zijn dan de OZMO cloud-omgeving."
  },
  {
    "tags": ["beltoon", "geen", "swyx", "swyxphone", "mijn"],
    "answer": "SwyxPhone L640 laat in het display een belsymbool zien waar een streep doorheen staat.<br/> De beltonen van het toestel zijn op dat moment uitgeschakeld.<br/> Door de <b>“*”</b> toets voor langere tijd in te drukken, kun je de beltonen weer activeren."
  }
];

$("#submit").click(function(e) {
  var input = $("#user_input").val();
  // the part that searches in the object array for an answer by tags that are inside user input
  var answer = "find in object";

  /////////
  $("#answer").html(answer);

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="text" id="user_input">
<button id="submit">Send</button>
<div id="answer">

</div>

Я пробовал это:

 var answer = "";
 for(var i=0;i<objectArr.length;i++){
    for(var o=0;o<objectArr[i].tags.length;o+++){
       if($("#user_input").val().includes(objectArr[i].tags[o])){
         answer = objectArr[i]['answer'];
       }
     }
  }
  $("#answer").html(answer);

Но таким образом он просто ищет одно ключевое слово.Я хочу найти тот, который соответствует большинству ключевых слов.

1 Ответ

2 голосов
/ 19 сентября 2019

Вы имеете в виду что-то вроде этого

Вы можете сосчитать результаты, чтобы сузить их

var objectArr = [{ "tags": ["windows", "3cx", "webclient", "hoe", "venster", "windows-venster"], "answer": "Maak op je bureaublad een sneltoets aan en kies als doel:<br/>“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” –app=https://pbx000000.fluxcloud.eu:5001/webclient <br/>Hier verander je de 000000 in de link naar het juiste PBX-nummer wat er hoort." }, { "tags": ["swyx", "toestel", "opstarten", "blijft", "opnieuw", "mijn", "werkt niet"], "answer": "Tijdens een software-update is de stroom mogelijk van het toestel af geweest. <br/> Je kan het toestel opsturen naar ons om de software te herstellen.<br/> De kosten van het herstellen van het toestel bedraagt €25,-" }, { "tags": ["toestel", "vast", "bellen", "kan niet", "werkt niet"], "answer": "Zorg ervoor dat de telefonie-applicatie (SwyxIt!) is opgestart en dat jouw toestel is ingelogd op je eigen naam.<br/> Als dat het geval is, ga dan in SwyxIt! naar: Instellingen – CTI – CTI gebruiken – start koppelen." }, { "tags": ["client", "swyx", "inloggen", "kan niet", "werkt niet"], "answer": "Controleer de tijd op de pc, deze mag niet meer dan 3 minuten afwijken van de tijd op de Swyxserver.<br/> Klopt de tijd op je pc, maar kun je nog steeds niet inloggen?<br/> Controleer dan je SwyxIt!-versie. Deze mag niet nieuwer zijn dan de OZMO cloud-omgeving." }, { "tags": ["beltoon", "geen", "swyx", "swyxphone", "mijn"], "answer": "SwyxPhone L640 laat in het display een belsymbool zien waar een streep doorheen staat.<br/> De beltonen van het toestel zijn op dat moment uitgeschakeld.<br/> Door de <b>“*”</b> toets voor langere tijd in te drukken, kun je de beltonen weer activeren." } ]; 

const finder = function(search, target) { return search.map(function (val) { return target.filter(function (e) {return val === e;}).length;});}


$("form").on("submit", function(e) {
  e.preventDefault();
  $("#answer").empty();
  const input = $("#user_input").val().toLowerCase().split(" ");
  let answer = "Nothing found";
  let most = 0;
  objectArr.forEach(item => {
    const count = finder(input,item.tags).reduce((a, b) => a + b, 0)
    if (count > most) {
      answer = item.answer
    }  
  })
  $("#answer").html(answer);
});


/* Just find any
  var answers = objectArr.filter(item => {
    return input.some(r => item.tags.includes(r))
  })
*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <input type="text" id="user_input" value="swyx toestel opstarten" />
  <button id="send">Send</button>
</form>
<div id="answer">

</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...