Java的自定义标记生成器

时间:2013-07-18 12:46:47

标签: java token tokenize text-processing text-analysis

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

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

    192.168.1.1,$ 24,500

    是令牌。

  5. 依旧......

    请为我推荐一些Java的开源标记器,它们易于定制以满足我的需求。简单地使用StringTokenizer和regex就足够了吗?我也必须执行停止,这就是为什么我正在寻找一个开源标记器,它还会执行一些额外的操作,如停止,阻塞。

1 个答案:

答案 0 :(得分:1)

前面有几条评论:

  

StringTokenizer是为保持兼容性而保留的旧类   原因虽然在新代码中不鼓励使用它。建议   任何寻求此功能的人都使用String的split方法   或者改为java.util.regex包。

  • 始终use 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,500abc$24,500EUR
  • 您提到192.168.1.1应该包括在内。是否还应包含192,168.1,1(包括.,?)

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

希望这有助于您入门。