如何select个关键字匹配最多的字符串?
How to select strings with the most keywords matches?
我正在尝试 select 包含最多匹配项的前 3 个字符串..
我会这样解释:
假设我们有以下关键字:"pc, programming, php, java"
以及下面的句子:
a[0]="what is java??"<br>
a[1]="I love playing and programming on pc"<br>
a[2]="I'm good at programming php and java"<br>
a[3]="I'm programming php and java on my pc"<br>
所以只有最后 3 个字符串必须 selected 因为它们是包含最多匹配项的前 3 个字符串。
如何在 java 中做到这一点???
如果您的数据集很小并且您只关心精确匹配,您可以执行以下操作:
循环遍历每个句子,对每个关键字执行 indexOf 检查。如果此 returns 不是 -1,则为该句子增加一个计数器。对每个关键字重复。最后找到计数器最高的 3 个句子。
这种方法会遇到各种问题,但包括:
- 不区分大小写
- 标签匹配部分单词,例如"java" 匹配 "javascript"
理想情况下,您会使用像 Lucene/Solr/ElasticSearch 这样的全文引擎,让它为您完成所有繁重的工作
可以说最简单的方法是使用 Regex,这是一种基于表达式的系统,可在字符串中搜索模式。
选择一个教授 Regex 的网站。我建议初学者使用这个。
http://regexone.com/
然后,熟悉 Java 正则表达式。我建议研究捕获组。
我不会给你代码来做这件事,因为我相信你可以看很多在线例子,而且你最好自己学习如何做这件事。
我正在尝试 select 包含最多匹配项的前 3 个字符串..
我会这样解释:
假设我们有以下关键字:"pc, programming, php, java"
以及下面的句子:
a[0]="what is java??"<br>
a[1]="I love playing and programming on pc"<br>
a[2]="I'm good at programming php and java"<br>
a[3]="I'm programming php and java on my pc"<br>
所以只有最后 3 个字符串必须 selected 因为它们是包含最多匹配项的前 3 个字符串。
如何在 java 中做到这一点???
如果您的数据集很小并且您只关心精确匹配,您可以执行以下操作:
循环遍历每个句子,对每个关键字执行 indexOf 检查。如果此 returns 不是 -1,则为该句子增加一个计数器。对每个关键字重复。最后找到计数器最高的 3 个句子。
这种方法会遇到各种问题,但包括:
- 不区分大小写
- 标签匹配部分单词,例如"java" 匹配 "javascript"
理想情况下,您会使用像 Lucene/Solr/ElasticSearch 这样的全文引擎,让它为您完成所有繁重的工作
可以说最简单的方法是使用 Regex,这是一种基于表达式的系统,可在字符串中搜索模式。
选择一个教授 Regex 的网站。我建议初学者使用这个。 http://regexone.com/
然后,熟悉 Java 正则表达式。我建议研究捕获组。
我不会给你代码来做这件事,因为我相信你可以看很多在线例子,而且你最好自己学习如何做这件事。