实现关键词匹配,按照关键词长短匹配,每个关键词只匹配一次。
现在我有这样一个需求,给我一篇文章,我有一个关键词池,我需要将文章中出现到关键词池中的关键词都匹配上,并且增加标签(这个不重要)。匹配原则是:1、关键词按照长短顺序进行匹配,如“百度”,“百度一下”,则优先匹配“百度一下”。2:每个关键词只匹配一次,哪怕在文章中出现多次也只有第一个出现的关键词会被匹配。要用java实现,各位大神有没有思路。
回答:
1.首先对文章进行分词
2.然后每个分词进去与关键词池存在分词,进行多个分词组合判断,比如百度一下分词分成可能是“百度”“一下”进行匹配
3.如果关键词池存在分词,进行多个分词组合判断,比如百度一下分词分成可能是“百度”,“一下”,那我进进行当前分词和下一个分词进制组合检查关键词池中是否存,存在就继续组合检测,不存在就记录当前分词,并记录改分词已经匹配,下一次匹配到匹配到的就忽略掉
回答:
从需求上分析,如果是长期需求,不建议直接用正则来做,这个逻辑比较绕,后期维护是问题;如果是短期的就往下看吧。
一方面需要对关键词池进行处理,分组,比如关键词中有百度和百度一下,就放一起;但这里注意可能冗余,比如百度一下和一下也是一组这种情况;这种可以在后处理搞定;
对比过程中,实时记录情况就行,而且java的regex包的Matcher本身就可以去findFirst,满足你现在的要求;
对比过程之后,就是后处理,需要把结果再收拢并检查一遍。
整个对代码规范要求较高
以上是 实现关键词匹配,按照关键词长短匹配,每个关键词只匹配一次。 的全部内容, 来源链接: utcz.com/p/944171.html