Java中的文本分类

时间:2009-10-14 16:52:21

标签: java classification

我需要某种Java解决方案来满足以下要求:

  1. 在文本中搜索某些字词(每个字词可以是1-3个字)。例如:{“hello world”,“hello”}。匹配需要准确。
  2. 大约有500种类型的术语组,每组包含约30个术语。
  3. 每个文字最多可包含4000个字。
  4. 表现是一个重要问题。

    谢谢, 杆

3 个答案:

答案 0 :(得分:3)

我为定制的垃圾邮件过滤器做了类似的事情。

我发现既简单又快速的技术是:

  1. 首先将输入文件拆分为单词。
  2. 在每个单词上调用intern(),以简化步骤3中的比较。
  3. 创建一个Term类,封装一个最多包含三个字符串的数组。它的equals()方法可以对字符串进行指针比较,而不是调用String.equals()。为输入中每组2或3个连续单词创建一个Term实例。
  4. 使用Multimap(来自Google收藏集)将每个字词映射到其中显示的文件集。

答案 1 :(得分:0)

使用正则表达式。请参阅:http://java.sun.com/docs/books/tutorial/essential/regex/

答案 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中实现。如果需要,单独的问题会询问具体问题。