首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过关键字获取最相关的问题

如何通过关键字获取最相关的问题
EN

Stack Overflow用户
提问于 2019-09-19 11:47:27
回答 1查看 69关注 0票数 0

我想找到一个答案,通过审查用户的输入,并检查什么答案确实有最匹配的关键字。

我有一个对象数组。当用户提交表单时,我希望查看用户输入,并检查在用户输入中有最多标签的答案。

我不知道怎么开始。

有人知道我是如何在JSjQuery中做到这一点的吗?

我需要找到答案,其中大多数关键字(标签)是在用户输入。

这是我现在的代码:

代码语言:javascript
复制
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);

});
代码语言:javascript
复制
<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>

我试过这个:

代码语言:javascript
复制
 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);

但以这种方式,它只是查找一个关键字。

我想找到一个与关键字匹配最多的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-19 12:06:16

你是说像这样的事

你可以数数结果来缩小范围。

代码语言:javascript
复制
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))
  })
*/
代码语言:javascript
复制
<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>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58010311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档