【发布时间】:2017-01-26 16:35:54
【问题描述】:
我有一组预定义的单词,例如谋杀、犯罪、警官、抢劫、罪魁祸首、事故、事故、撞车、死亡……(大约 5000 个单词)
我想在一篇新闻文章(大约 1kb-5kb 文本)中匹配这些词,如果找到,然后对这些词进行相应的分类。最初我只是在单词之前和之后使用空格,即
if(article.contains(" "+word+" ")) { \*do something*\ }
但是当单词后跟句号,逗号或其他符号时,这不起作用,单词开头也是如此
所以我切换到带有单词边界的正则表达式,但现在代码运行速度慢了 20 倍,并且 CPU 使用率在 5 个线程中达到 100%。
有没有人在java中有更好的解决方案?感谢所有帮助:)
【问题讨论】:
-
它也会匹配包含的单词,即'con'和'constable'是不同的单词'con'不应该匹配文本中的'constable'。
-
您首先需要确定算法,然后寻找 Java 中的实现,例如见here
-
这个问题stackoverflow.com/questions/225337/…的答案可能有用。
-
有为matching multiple patterns at the same time设计的算法。如果我是你,我会选择其中之一。请记住(至少在英语中),找到单词的边界并非易事,因为有些单词可能以撇号合法结束(并且半合法地开始)。
标签: java regex optimization text