我正在使用 MaxEntTagger 通过使用以下代码进行 pos-tagging 和句子拆分:
MaxentTagger tagger = new MaxentTagger("models/left3words-wsj-0-18.tagger");
@SuppressWarnings("unchecked")
List<Sentence<? extends HasWord>> sentences = MaxentTagger.tokenizeText(new BufferedReader(new StringReader(out2)));
for (Sentence<? extends HasWord> sentence : sentences) {
content.append(sentence + "\n");
Sentence<TaggedWord> tSentence = MaxentTagger.tagSentence(sentence);
out.append(tSentence.toString(false) + "\n");
}
问题是它会抱怨文本中有不可标记的字符。并且标记的输出将省略那些不可标记的字符。所以比如原文是:设Σ为函数符号的有限集合,即签名。
其中 Σ 在 big5 代码中。但是程序会显示以下警告信息: Untokenizable: Σ (first char in decimal: 931)
并且标记的输出是:设/VB 是/VB a/DT 有限/JJ 集/NN of/IN 函数/NN 符号/NNS ,/,/DT 签名/NN ./。
我得到的拆分后的句子是: Let be afinite set of function symbols , the signature 。
我的问题是如何保留这些不可标记的字符?
我试过修改模式的道具文件,但没有运气:
标注器训练在 2008 年 9 月 21 日星期日 23:03:26 PDT 2008 调用,参数如下: 模型 = left3words-wsj-0-18.tagger 拱 = left3words,naacl2003unknowns,wordshapes(3) trainFile = /u/nlp/data/pos-tagger/train-wsj-0-18 ... 编码 = Big5 initFromTrees = 假
有什么建议吗?
感谢Manning教授的帮助。但是我在使用解析器树时遇到了同样的问题。
续集
我需要得到一个句子的解析器树,所以我使用了以下代码:
PTBTokenizer<Word> ptb = PTBTokenizer.newPTBTokenizer(new StringReader(sentences));
List<Word> words = ptb.tokenize();
Tree parseTree2 = lp.apply(words);
TreebankLanguagePack tlp = new PennTreebankLanguagePack();
GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();
GrammaticalStructure gs = gsf.newGrammaticalStructure(parseTree2);
但是这次我不知道如何设置 PTBTokenizer 来解决不可标记字符的问题。如果使用工厂方法生成 PTBTokenizer 对象,我不知道如何将其连接到 StringReader。
List<Word> words = ptb.getTokenizer(new StringReader(sentences));
不起作用。