首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么POS标记算法标记“不能”作为单独的单词?

为什么POS标记算法标记“不能”作为单独的单词?
EN

Stack Overflow用户
提问于 2015-04-30 19:44:30
回答 1查看 639关注 0票数 0

我使用的是斯坦福日志-线性词性标注器,下面是我标记的示例语句:

他不能那样做

标记后,我得到了这样的结果:

He_PRP ca_MD n_RB do_VB that_DT

如您所见,can't被分成两个单词,ca标记为Modal (MD),n't标记为副词(RB)?

如果单独使用can not,我实际上得到了相同的结果:can是MD,not是RB,所以这种分手方式是预期的,而不是像can_MD't_RB那样中断。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-30 21:36:32

注:这不是完美的答案。

我认为问题的根源是斯坦福POS标签所使用的托肯器,而不是标签本身。托卡器(PTBTokenizer)不能正确处理撇号:

1- 斯坦福PTBTokenizer令牌的分隔符

2- 斯坦福大学coreNLP -分隔词忽略撇号

正如他们在这里提到的,斯坦福托卡器,PTBTokenizer将标记这个句子:

“哦,不,”她说,“我们价值400美元的搅拌机处理不了这么难的事情!”

至:

. 我们的 $ 400 搅拌机 ca n t 手柄 某物

尝试找到合适的标记化方法,并将其应用于标记器,如下所示:

代码语言:javascript
复制
    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() + " , " );

            }

        }

}

产出:

He=PRP,can=MD,t=VB,do=VB,that=DT,.=.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29976457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档