Java中的文本分类

Java中的文本分类,java,classification,Java,Classification,我需要某种Java解决方案来满足以下要求: 在文本中搜索某些术语(每个术语可以是1-3个单词)。例如:{“你好,世界”,“你好”}。比赛必须精确 有大约500种类型的术语组,每个组包含大约30个术语 每个文本最多可包含4000个单词 性能是一个重要问题 谢谢, Rod使用正则表达式。请参阅:使用正则表达式。请参阅:我为定制的垃圾邮件过滤器做了类似的工作 我发现一种既简单又快速的技术是: 首先将输入文件拆分为单词 对每个单词调用intern(),以简化步骤3中的比较 创建一个术语类,封装最多三个字

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

  • 在文本中搜索某些术语(每个术语可以是1-3个单词)。例如:{“你好,世界”,“你好”}。比赛必须精确
  • 有大约500种类型的术语组,每个组包含大约30个术语
  • 每个文本最多可包含4000个单词
  • 性能是一个重要问题

    谢谢,
    Rod

    使用正则表达式。请参阅:

    使用正则表达式。请参阅:

    我为定制的垃圾邮件过滤器做了类似的工作

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

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

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

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

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

  • 这似乎有两个部分。设计一个合适的算法,并用Java实现。(现在让我们暂且不提“外面”肯定有人已经实现了这一点,你可能会找到一些想法。)

    似乎我们想避免重复昂贵的工作。但目前还不清楚成本会在哪里。所以我想你需要准备好对一些候选方法进行基准测试。还要记住什么是“足够好”

    用你能想到的最简单的方法开始。测量一下。你可能会得到一个令人惊讶的结果,那就是它已经足够好了。停在那里!例如,这真的很愚蠢:

     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实现。单独的问题如果需要,可以问具体的问题

    这似乎有两个部分。设计一个合适的算法,并用Java实现。(现在让我们暂且不提“外面”肯定有人已经实现了这一点,你可能会找到一些想法。)

    似乎我们想避免重复昂贵的工作。但目前还不清楚成本会在哪里。所以我想你需要准备好对一些候选方法进行基准测试。还要记住什么是“足够好”

    用你能想到的最简单的方法开始。测量一下。你可能会得到一个令人惊讶的结果,那就是它已经足够好了。停在那里!例如,这真的很愚蠢:

     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实现。单独的问题如果需要,可以问具体的问题

    听起来不错。那么你做了什么来解决这个问题呢?听起来不错。那么你做了什么来尝试解决这个问题呢?+1回答得好,实习生的想法是一个有用的实现提示。谢谢。把课文分成几个部分是个好主意。这样的复杂性是合理的(~文本中的字数*术语中的最大字数(在我的案例3中))。+1回答不错,实习生的想法是一个有用的实现提示。谢谢。把课文分成几个部分是个好主意。这样的复杂性是合理的(~文本中的字数*术语中的最大字数(在我的案例3中))。