注意:這不是完美的答案。
我認爲問題來自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語音標籤集的一部分,從而實現標記化.... –