这个算法可以怎么优化?

2017-07-31 09:33:54 +08:00
 xu33

有一段文本 要在几万个关键词里搜索 然后替换成固定格式

我现在是遍历这几万个关键词 依次在给定文本中查找和替换 但是效率很低

求优化算法

4523 次点击
所在节点    程序员
25 条回复
ZSeptember
2017-07-31 13:27:52 +08:00
本来觉的楼上的分词可以,就看分词的性能了。然后仔细想想,虽然不是做 NLP 的,但是分词肯定也是要用到前缀树的吧。
所以,还是裸的前缀树吧。
troycheng
2017-07-31 13:31:13 +08:00
ac 自动机足够好用了,扫描文本的过程中就可以完成多模匹配了,替换也就是顺手加一行的事情
zjsxwc
2017-07-31 13:39:51 +08:00
单独开个机器作为敏感词过滤服务,使用 Trie 树,推荐这个 go 写的项目,https://github.com/huayuego/wordfilter
guyskk
2017-07-31 13:42:08 +08:00
把关键词构造成一个正则表达式,然后调用正则的 API 直接替换
```
>>> import re
>>> kws = ['几万', '关键词', '查找', '替换']
>>> r = '|'.join(kws)
>>> text = """
... 有一段文本 要在几万个关键词里搜索 然后替换成固定格式
...
... 我现在是遍历这几万个关键词 依次在给定文本中查找和替换 但是效率很低
...
... 求优化算法
... """
>>> re.sub(r, '[马赛克]', text)
'\n 有一段文本 要在[马赛克]个[马赛克]里搜索 然后[马赛克]成固定格式\n\n 我现在是遍历这[马赛克]个[马赛克] 依次在给定文本中[马赛克]和[马赛克] 但是效率很低\n\n 求优化算法\n'
>>>
```
hxndg
2017-07-31 14:12:21 +08:00
@gamexg
我倒没觉得“看什么都是钉子”有什么问题,如果旧有的工具能够满足性能需求,追求新方法未必是好的,毕竟不是系统瓶颈。。。
毕竟这么久了字符串算法还是就那么几个,手动斜眼

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/379140

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX