用的 Boyre-Moore 算法
现在遇到了一个问题
后台数据返回的文本字符串会包含高亮关键字,这个关键字是数据自带的,非搜索关键字
例如:
界面显示是这样的: "你好世界"
原数据是这样: "你好<em>世界</em>"
在搜索关键词为"好世界"时, 因为 em 标签(高亮)的缘故, 导致无法正确匹配
请问怎样修改算法, 能达到:
输入"好世界"
可以匹配到例如以下情况: 好<em>世界</em> 、好</em>世界 、 好世</em>界
1
Kaakira OP 求助...
|
2
Tomotoes 2020-02-18 00:22:39 +08:00 via Android
正则表达式啊。。
|
3
AmosAlbert 2020-02-18 00:37:11 +08:00
正则表达式
|
4
felix021 2020-02-18 00:45:30 +08:00
All problems in computer science can be solved by another level of indirection
比如:match(filter_tags(input_string), pattern) |
6
Kaakira OP 我想过把搜索关键词所有的可能性组合遍历 -> 算法搜索 -> 命中就结束。
搜索 好世界 未命中 ↓ 搜索 好<em>世界 未命中 ↓ 搜索 好<em 世</em>界 命中了 √ 不过还是挺笨的 |
7
gaobing 2020-02-18 01:04:18 +08:00 via Android
为文本生成去除标签的副本,对副本进行查找,就是比较浪费空间。
|
8
enlight 2020-02-18 01:30:25 +08:00
|
9
Kaakira OP @enlight 哎挺麻烦的,我们已经是用 elasticsearch 从大量数据里筛选出来的, 然后高亮了, 我要对这些筛选出来的数据 在进行搜索, 算了, 返回上一个版本(正则表达式)...
|
10
laminux29 2020-02-18 03:11:04 +08:00
......
上面都答错了。 你这哪里是什么搜索问题,而是一个简单的网页制作的问题(前端问题)。 1.<em>是 html 的标签,当它出现在网页源代码里,它的功能是强调标签内的文字。 2.你的搜索结果字符串里,包含了 html 标签,如果你把这个字符串,没做任何处理,直接放在前端网页里显示,搜索结果字符串里的<em>标签,就成了 html 网页源代码里的一部分,也就变成了强调功能,并且最终在显示出来的网页上面,也没有<em>这个子串。 2.你现在要做的是,把搜索结果,先进行 html 转义。转义后,再放在前端网页上显示,它就不会成为 html 功能的一部分,而会成为前端网页上的一个完整的字符串。 |
13
jmc891205 2020-02-18 13:02:16 +08:00
只需要考虑<em>标签吗?还是所有 html 标签甚至非 html 标签的其他字符串都需要考虑?
|
15
jmc891205 2020-02-18 15:15:16 +08:00 1
@Kaakira 那我想你在实现 BM 算法比较 pattern 和当前 string window 发现 mismatch 的时候,看一下当前字符是不是'>',如果是的话再去检查前面是不是<em>或</em>,如果是这两个标签就跳过去检查这两个标签前面的字符是不是 mismatch。另外还要再额外维护一个跳转表,因为现在有忽略的字符,pattern 和 string 的 index 不是通过简单自增可以一一对应的了。
|
16
coderEOS 2020-02-19 16:16:34 +08:00
1.去格式 2.正则 3.FlashText
|