Stanford coreNLP-忽略撇号的拆分单词

Stanford coreNLP-忽略撇号的拆分单词,nlp,stanford-nlp,Nlp,Stanford Nlp,我想用斯坦福大学的coreNLP把一个句子分成几个词。 我对包含撇号的单词有问题 例如,这句话: 我24岁了 拆分如下: [一] ['m][24][岁][岁] 是否可以使用Stanford coreNLP像这样拆分它 [我][24][岁][岁] 我尝试过使用tokenize.whitespace,但它不会在其他标点符号上拆分,例如:“?”和“,”如果您只是重新连接由撇号拆分的标记,会怎么样 下面是一个Java实现: public static List<String> tokeniz

我想用斯坦福大学的coreNLP把一个句子分成几个词。 我对包含撇号的单词有问题

例如,这句话: 我24岁了

拆分如下: [一] ['m][24][岁][岁]

是否可以使用Stanford coreNLP像这样拆分它 [我][24][岁][岁]


我尝试过使用tokenize.whitespace,但它不会在其他标点符号上拆分,例如:“?”和“,”

如果您只是重新连接由撇号拆分的标记,会怎么样

下面是一个Java实现:

public static List<String> tokenize(String s) {
    PTBTokenizer<CoreLabel> ptbt = new PTBTokenizer<CoreLabel>(
            new StringReader(s), new CoreLabelTokenFactory(), "");
    List<String> sentence = new ArrayList<String>();
    StringBuilder sb = new StringBuilder();
    for (CoreLabel label; ptbt.hasNext();) {
        label = ptbt.next();
        String word = label.word();
        if (word.startsWith("'")) {
            sb.append(word);
        } else {
            if (sb.length() > 0)
                sentence.add(sb.toString());
            sb = new StringBuilder();
            sb.append(word);
        }
    }
    if (sb.length() > 0)
        sentence.add(sb.toString());
    return sentence;
}

public static void main(String[] args) {
    System.out.println(tokenize("I'm 24 years old."));  // [I'm, 24, years, old, .]
}
公共静态列表标记化(字符串s){
PTBTokenizer ptbt=新PTBTokenizer(
新的StringReader,新的CoreLabelTokenFactory(),“”);
列表语句=新的ArrayList();
StringBuilder sb=新的StringBuilder();
for(CoreLabel标签;ptbt.hasNext();){
label=ptbt.next();
字符串单词=label.word();
if(word.startsWith(“')){
某人附加(字);
}否则{
如果(sb.length()>0)
加上(某人的字符串());
sb=新的StringBuilder();
某人附加(字);
}
}
如果(sb.length()>0)
加上(某人的字符串());
返回判决;
}
公共静态void main(字符串[]args){
System.out.println(标记化(“我24岁”);//[我24岁,.]
}

目前,没有。随后的斯坦福CoreNLP处理工具都使用,它将收缩拆分为两个标记(将“I'm”作为“I'm”的简化形式,使其成为两个“单词”[I]['m])。听起来您需要一种不同类型的标记化

虽然有一些标记化选项,但没有一个可以改变这一点,并且后续工具(如POS标记器或解析器)在不拆分收缩的情况下将无法正常工作。您可以向标记器添加这样一个选项,更改(删除)对REDAUX和SREDAUX尾部上下文的处理


你也可以像@dhg建议的那样,通过后期处理加入缩略语,但你需要在“如果”中更加小心一点,这样它就不会在引号中加入缩略语。

有所有格和缩略语。你的例子是一个收缩。仅仅寻找一个撇号,你不会发现两者之间的区别。“这是皮特的答案。我相信你知道。”在这两句话中,我们每个案例都有一个

通过词性标记,我们可以分辨出区别。使用树外科医生语法,您可以组装、更改它们等等。此处列出了语法:。我发现树外科医生在分离NP组时非常有用,因为我喜欢通过连接将它们分开


或者,“m”是否指向“am”?您可能希望查找这些,查找它的stem标记,然后简单地将其还原为该值。词干分析在机器学习和分析的许多其他方面都非常有用。

我也在尝试将单词拆分成一个句子。你是怎么做到的?它被API的javadocs搞糊涂了。目前收缩的
不能
被分为
ca
n不能
,其背后的原理是什么?我希望它是
can
't
@Christopher Manning,我有一个类似的问题。对于这样一个句子-abc def-,它拆分为abc,,def。但我不想*被视为一个不同的标记。如何解决这个问题?@AngularInDepth.com任何一个选择都是可能的,这个选择可能更符合
成为
+
不会
成为
,等等。但是,从根本上说,我们这样做是因为Penn Treebank标记化标准就是这样做的,这是许多英语NLP资源所使用的。