2015-04-30 58 views
0

我使用Stanford Log-linear Part-Of-Speech Tagger,这里是我的标签样品一句话:为什么POS标签算法标签`不能'作为单独的单词?

他不能这样做,

标签化时我得到这样的结果:

He_PRP ca_MD n't_RB do_VB that_DT

正如你所看到的,can't被分成tw o词,ca被标记为模态(MD),并且n't被标记为ADVERB(RB)?

我居然得到同样的结果,如果我使用can not分开:can是MD和not是RB,所以分手的这种方式有望代替说破喜欢can_MD't_RB

回答

1

注意:这不是完美的答案。
我认为问题来自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 =。 ,

+0

谢谢,我可能会考虑这种方法。但它产生的结果与原来的结果不同 - 将VB标记为“RB”而不是“RB” - 所以也许我会坚持原始标记化。 –

+0

这不是一个问题,而是一个选择。我们选择遵循Penn Treebank语音标签集的一部分,从而实现标记化.... –

相关问题