我试图用斯坦福coreNLP将一个句子分成单词。 我遇到包含撇号的单词的问题。Stanford coreNLP - 分词忽略撇号
例如,句子: 我今年24岁。
拆分这样的: [I] ['M] [24] [年] [老]
是否有可能像这样使用斯坦福coreNLP ?: 分裂[我] [24 ] [年] [旧]
我试过使用tokenize.whitespace,但它不会在其他标点符号上分割:'?'和','
我试图用斯坦福coreNLP将一个句子分成单词。 我遇到包含撇号的单词的问题。Stanford coreNLP - 分词忽略撇号
例如,句子: 我今年24岁。
拆分这样的: [I] ['M] [24] [年] [老]
是否有可能像这样使用斯坦福coreNLP ?: 分裂[我] [24 ] [年] [旧]
我试过使用tokenize.whitespace,但它不会在其他标点符号上分割:'?'和','
目前,还没有。随后的斯坦福CoreNLP处理工具全部使用Penn Treebank tokenization,它将收缩分成两个标记(关于“I'm”作为“I am”的简化形式,使其成为两个“单词”[I] ['m])。这听起来像你想要一种不同类型的标记。
尽管存在一些标记化选项,但没有人需要更改此选项,并且随后的工具(如POS标记器或解析器)将不会收缩而分裂。您可以将这样的选项添加到标记器,更改(删除)REDAUX和SREDAUX尾随上下文的处理。
你也可以通过后处理加入收缩,就像@dhg所建议的那样,但是你希望在“if”中更仔细一点,这样它就不会加入引号。
目前收缩'can't'被分成'ca'和'n't',它背后的基本原理是什么?我希望它是'可以'和'不'。 –
@Christopher Manning我有一个类似的问题。对于像这样的一个句子 - abc * def - 它分成abc,*,def。但我不希望*被视为另一个令牌。如何解决此问题? – AV94
@ AngularInDepth.com任何一种选择都是可能的,这个选择可能与'不'成为''''''''''''''''''''''''''不''''等等。但是,从根本上来说,我们这样做是因为这是Penn Treebank标记化标准所做的,这是英语中很多NLP资源所使用的。 –
如果您只是重新连接由撇号分割的令牌,那么该怎么办?
这里有一个实施的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, .]
}
有所有格和收缩。你的例子是收缩。只是寻找一个撇号不会找到你们之间的差异。 “这是皮特的回答,我相信你知道这一点。”在这两个句子中,我们有每种情况。
使用词性标签我们可以区分不同的部分。使用树外科医生的语法,你可以组装这些语句,改变它们等等。语法如下:http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/trees/tregex/tsurgeon/package-summary.html。我发现树木外科医生在拆分NP组方面非常有用,因为我喜欢通过连词将它们分开。
或者,是否是“am”?您可能需要查找这些标签并查找它的标签并简单地将其恢复为该值。 Stemming在机器学习和分析的许多其他方面非常有用。
我正在尝试将句子中的单词分开。你是怎么做到的?它真的被他们的API的javadoc困惑了。 – Tim