我需要某种Java解决方案来满足以下要求:
表现是一个重要问题。
谢谢, 杆
答案 0 :(得分:3)
我为定制的垃圾邮件过滤器做了类似的事情。
我发现既简单又快速的技术是:
intern()
,以简化步骤3中的比较。Term
类,封装一个最多包含三个字符串的数组。它的equals()
方法可以对字符串进行指针比较,而不是调用String.equals()
。为输入中每组2或3个连续单词创建一个Term
实例。Multimap
(来自Google收藏集)将每个字词映射到其中显示的文件集。答案 1 :(得分:0)
答案 2 :(得分:0)
这似乎有两个部分。找出一个不错的算法,并用Java实现它。 (暂时让我们放下一个想法,肯定“在那里”有人已经实现了这一点,你可能会找到一些想法。)
似乎我们希望避免重复昂贵的工作。但目前尚不清楚成本在哪里。所以我想你需要准备好对一些候选appraoches进行基准测试。还要记住什么是“足够好”。
从你可以想到的最简单的事情开始。测量它。你可能会得到令人惊讶的结果,它已经足够好了。停在那儿!例如,这真的很蠢:
read text into String (4k, that's not too big)
for each term
use regexp to find matches in text
但它可能会给出亚秒级的响应时间。如果您将200毫秒的响应时间缩短到100毫秒,您的用户会非常关心吗?他们会为此支付多少钱?
另一种方法。我想知道这更快吗?
prepare a collection of terms keyed by first word
tokenize the text
for each token
find terms that match
check for match (using look ahead for multi-word terms)
至于在Java中实现。如果需要,单独的问题会询问具体问题。