使用JavaScript我需要从〜100000个单词文档中有效地移除〜10000个关键字,其中〜1000个关键字将成为关键字。你会建议什么?替换文本中多个单词的高效方法
会不会海量正则表达式实用? 或者我应该只遍历文档字符寻找关键字(无聊)?
编辑:
好点 - 只有整个单词,而不是部分。一些关键字包含空格。
我试图做到所有客户端,以减少后端的压力。
使用JavaScript我需要从〜100000个单词文档中有效地移除〜10000个关键字,其中〜1000个关键字将成为关键字。你会建议什么?替换文本中多个单词的高效方法
会不会海量正则表达式实用? 或者我应该只遍历文档字符寻找关键字(无聊)?
编辑:
好点 - 只有整个单词,而不是部分。一些关键字包含空格。
我试图做到所有客户端,以减少后端的压力。
使用正则表达式可能是一个不错的选择:
var words = ['bon', 'mad'];
'joe bon joe mad'.replace(new RegExp('(' + words.join('|') + ')', 'g'), '');
// 'joe joe '
正则表达式也不是很复杂的事情像前瞻,和正则表达式引擎是用C/C++,所以你可以期待它相当快。尽管如此 - 基准,并看看性能是否符合您的需求。
我不认为实现自己的解析器会更快,但我可能是错的 - 基准测试。
将文档发送到服务器听起来不太好。用100k的话说,您正在查看兆字节范围内的有效负载,并且您仍然必须在服务器上对其执行某些操作并将其推回。
您可能需要调整正则表达式做的空间的东西。
你可能想添加单词边界检查''\\ b('+ words.join('|')+')\\ b'' – 2010-02-03 08:38:48
正则表达式可以使用一些爱,我同意,但它说明了这一点。 – 2010-02-03 08:46:41
我的直觉告诉我,对于如此多的关键字 - 排序关键字和创建每个字符状态机将比正则表达式快得多,因为状态机很平凡,可以自动生成。
状态机似乎经常用于类似的任务,例如, http://www.codeproject.com/KB/string/civstringset.aspx
有趣的问题。一方面,以编译语言手写的状态机将会超出正则表达式,但另一方面,Javascript本身速度很慢,所以您需要尝试并基准测试正则表达式引擎是否由于被编译而更快。 – 2010-02-03 08:15:14
它必须是JavaScript还是可以将它推送到服务器进行转换?如果没有一些数据进行测试,很难说哪种方法更高效。例如,如果您使用的是Python,则可以分段数据并在您真正需要时进行线程处理。 – 2010-02-03 08:18:21
你是否只需要替换整个单词或单词的部分 - 例如单词,关键字,单词都有单词'单词'在其中,他们必须如何处理? – meouw 2010-02-03 08:34:32