0

我正在开发一个应用程序,我需要在其中处理包含电子邮件的文本文件。我需要文本中的所有标记,以下是标记的定义:

  1. 字母数字
  2. 区分大小写(要保留大小写)
  3. '!' 和 '$' 将被视为组成字符。例如:FREE!!,$50是令牌
  4. '。' (dot) 和 ',' 逗号如果出现在数字之间,将被视为组成字符。例如:

    192.168.1.1,24,500 美元

    是令牌。

等等..

请向我推荐一些用于 Java 的开源标记器,这些标记器易于定制以满足我的需求。仅使用 StringTokenizer 和正则表达式就足够了吗?我也必须执行停止,这就是为什么我正在寻找一个开源标记器,它还将执行一些额外的事情,比如停止、词干。

4

1 回答 1

1

前面有几条评论:

StringTokenizer 是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人改用 String 的 split 方法或 java.util.regex 包。

  • 始终首先使用 Google - 目前的第一个结果是JTopas。我没有使用它,但它看起来可以为此工作

至于正则表达式,它真的取决于你的要求。鉴于上述情况,这可能有效:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Mkt {
  public static void main(String[] args) {
    Pattern p = Pattern.compile("([$\\d.,]+)|([\\w\\d!$]+)");
    String str = "--- FREE!! $50 192.168.1.1 $24,500";
    System.out.println("input: " + str);

    Matcher m = p.matcher(str);
    while(m.find()) {
      System.out.println("token: " + m.group());
    }
  }
}

这是一个示例运行:

$ javac Mkt.java && java Mkt
input: --- FREE!! $50 192.168.1.1 $24,500
token: FREE!!
token: $50
token: 192.168.1.1
token: $24,500

现在,您可能需要调整正则表达式,例如:

  • 你举$24,500了个例子。这应该适用于$24,500abcor$24,500EUR吗?
  • 你提到192.168.1.1的应该包括在内。它是否还应该包括192,168.1,1(给定.,将要包括在内)?

我想还有其他事情需要考虑。

希望这有助于您入门。

于 2013-07-19T00:08:49.047 回答