0

我正在尝试标记一些句子。例如句子:

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

我将以下命令与 Open nlp 一起使用:

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

但我希望 opennlp 将 ' #' 视为一个单词的字母。所以 ' #blue#' 将是一个标记。

这个怎么做 ?

4

3 回答 3

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”模型才能使其工作。

于 2013-08-13T09:46:45.227 回答
1

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

Tokenizer t = new Tokenizer() {

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


    }

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


        }
};

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

并将“#”与其他字母数字值相关联:

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;
}
于 2013-06-17T13:55:21.843 回答
-1

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

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

于 2013-06-17T12:45:53.050 回答