我正试图将一些句子标记出来。例如句子:
String sentence = "The sky is blue. A cat is #blue.";
我在Open nlp中使用以下命令:
SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;
String[] result = tokenizer.tokenize(sentence);
但我希望opennlp认为'#
'是一个单词的字母。所以'#blue#
'将是一个令牌。
怎么做?
答案 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的一种方法。传递一个空格(即" "
)只会给你一个由空格分隔的字符串中的所有标记