java - Java 的自定义分词器

标签 java token tokenize text-processing text-analysis

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

  1. 字母数字
  2. 区分大小写(保留大小写)
  3. '!'和“$”被视为组成字符。例如:免费!!$50 是代币
  4. '.'如果(点)和“,”逗号出现在数字之间,则将它们视为构成字符。例如:

    192.168.1.1,24,500 美元

    是代币。

等等..

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

最佳答案

前面的一些评论:

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

  • 始终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 (假设要包含 .,)?

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

希望这有助于您入门。

关于java - Java 的自定义分词器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17723864/

相关文章:

无法比较 token

c++ - 如何修复 "Expected Primary-expression before ' )' token"错误?

angular - 在 Angular 4 中处理来自 Api 的过期 token

Java 空指针异常 : Tokenizing Input for Lexer

php - 如何从具有特殊编码的单词中获取每个字符

java - 为什么 n+++n 有效而 n++++n 无效?

java - OpenLDAP 2.3/2.4 并发问题

java - 除了制作类型安全集合之外,在 Java 中使用泛型?

java - Eclipse .classpath/.project 文件中有什么?

java - 在 Java 中以编程方式创建 W3C DOM 的有效方法是什么?