使用Open nlp忽略标签的Tokenize单词

时间:2013-06-17 12:40:53

标签: java tokenize opennlp

我正试图将一些句子标记出来。例如句子:

String sentence = "The sky is blue. A cat is #blue.";

我在Open nlp中使用以下命令:

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;
String[] result = tokenizer.tokenize(sentence);

但我希望opennlp认为'#'是一个单词的字母。所以'#blue#'将是一个令牌。

怎么做?

3 个答案:

答案 0 :(得分:1)

您只需要创建一个新的Tokenizer对象(实现Tokenizer)。

Tokenizer t = new Tokenizer() {

    @Override
    public Span[] tokenizePos(String arg0) {


    }

    @Override
        public String[] tokenize(String arg0) {


        }
};

然后,将SimpleTokenizer代码复制/粘贴到2个函数中。

将'#'与其他字母数字值相关联:

if (StringUtil.isWhitespace(c)) {
    charType = CharacterEnum.WHITESPACE;
} else if (Character.isLetter(c) || c=='#') {
    charType = CharacterEnum.ALPHABETIC;
} else if (Character.isDigit(c)) {
    charType = CharacterEnum.NUMERIC;
} else {
    charType = CharacterEnum.OTHER;
}

答案 1 :(得分:1)

也许你只是不走运,试试这个:

public static void tokenize() throws InvalidFormatException, IOException {
    InputStream is = new FileInputStream("models/en-token.bin");
    TokenizerModel model = new TokenizerModel(is);
    Tokenizer tokenizer = new TokenizerME(model);
    String tokens[] = tokenizer.tokenize("The sky is blue. A cat is #blue. ");
    for (String a : tokens)
        System.out.println(a);
    is.close();
}

如您所见,“#blue”被标记为单个标记。并且Tokenizer的智能仍然存在。 为此,您需要使用“en-token.bin”模型才能使用。

答案 2 :(得分:-1)

您可以尝试String[] tokens = sentence.split(" ");

split()是java中String的一种方法。传递一个空格(即" ")只会给你一个由空格分隔的字符串中的所有标记