注意:这不是完美的答案。
我认为问题来自Stanford POS Tagger中使用的Tokenizer,而不是来自标记器本身。 Tokenizer(PTBTokenizer)无法正确处理撇号:
1- Stanford PTBTokenizer token's split delimiter。
2- Stanford coreNLP - split words ignoring apostrophe。
当他们在这里Stanford Tokenizer提到的,PTBTokenizer会在标记化的句子:“我们的$ 400搅拌机不能处理这个东西很难 ”
“哦,不,”她说,
到:
......
我们
$ 搅拌机
CA
不
手柄
东西
尝试找到合适的标记化方法并应用它的恶搞如下:
import java.util.List;
import edu.stanford.nlp.ling.HasWord;
import edu.stanford.nlp.ling.Sentence;
import edu.stanford.nlp.ling.TaggedWord;
import edu.stanford.nlp.tagger.maxent.MaxentTagger;
public class Test {
public static void main(String[] args) throws Exception {
String model = "F:/code/stanford-postagger-2015-04-20/models/english-left3words-distsim.tagger";
MaxentTagger tagger = new MaxentTagger(model);
List<HasWord> sent;
sent = Sentence.toWordList("He", "can", "'t", "do", "that", ".");
//sent = Sentence.toWordList("He", "can't", "do", "that", ".");
List<TaggedWord> taggedSent = tagger.tagSentence(sent);
for (TaggedWord tw : taggedSent) {
System.out.print(tw.word() + "=" + tw.tag() + " , ");
}
}
}
输出:
他= PRP,可以= MD,“T = VB,做= VB,即= DT =。 ,
谢谢,我可能会考虑这种方法。但它产生的结果与原来的结果不同 - 将VB标记为“RB”而不是“RB” - 所以也许我会坚持原始标记化。 –
这不是一个问题,而是一个选择。我们选择遵循Penn Treebank语音标签集的一部分,从而实现标记化.... –