我有特殊的单词和复合名词 应该在我的系统中被识别为名词。
例如:
i。)" XYZBrand"品牌名称不在标准词典中
ii。)"铜线"在整个系统中应该被视为1个令牌。
"" XYZBrand"和"铜线"上面应该被视为每个名词。 更确切地说, 如果按照任何其他名词的方式对待它,那就没关系了 "套"是。
就我所见,StanfordNLP正在为上述第一个案例做这样的事情。 当它看到一个不在字典中的令牌时,它就是 把它当作名词(?)。 所以这就是复合名词 - 比如"铜线"以上。
从我看到的,有以下方法:
1。)从一开始就将复合词添加到词典中: 这样StanfordNLP就会对它们进行标记,并从头开始处理。 这该怎么做?这就是我想要的方式。
2。)在GrammaticalRelation
中定义UniversalEnglishGrammaticalRelations
看到这些复合词。这会奏效。但是我不总是需要parser
在管道中,这并没有感觉到"喜欢适当的扭曲。
3。)将它们标记出来 - 只要有铜"铜"和"电线"并排,将两者作为一个标记。
然而,这需要edu.stanford.nlp.process.PTBLexer
进行调整
而且我不太愿意这样做。
4。)写一个注释器,在TokenizerAnnotator
之后立即进入。
5.)在进入Stanford-NLP之前对文本进行预处理:转动"铜线" 进入"铜线"例如。这是我最不喜欢的解决方案。
如何在系统中的字典中添加新术语?
TIA。
// ===========================
编辑:
"铜"和"电线"当用空格分隔并排出现时 始终作为一个标记有意义 - "铜线"在我们的背景下。
查找类型依赖关系以查看它是否为a 复合名词与"右" 其他一些令牌并不是一个有利的选择:
我们的"复合名词"并不总是名词组。 "小型手提包" 也应该是我们系统中的一个标记。
会查找令牌,说"铜"并检查 它的依赖关系 与其他令牌,并将减慢它。 这是查找我们的单词和 跟踪依赖关系 - " amod" for" container"和"化合物" for" wire" 几乎每一步都是如此。
我希望扭转其他事情。例如:
"some sugar and a bit of salt"
"糖"和" bit" " conj:和" -ed准确地由语法。 然而," conj:和" -ing"糖"和"盐"在我们的背景下更准确。
一旦我找到了一个很好的方式来注入我自己的字典来覆盖 tokenizer和tagger正在使用的字典,或者更确切地说,是覆盖 在标记器和标记器的训练行为,我可以弯曲系统 按照我们自己的条款处理。这个Q是寻找这种方式来做这个弯曲。
答案 0 :(得分:3)
我认为斯坦福CoreNLP运行的基础技术存在一些混乱。我试着澄清一些混乱,然后在帖子的底部建议一种方法。
我们的标记器确实是一个确定性的词法分析器。有可能改变它来治疗铜线"作为一个单一的标记,但这实际上我认为不是预期的行为:铜"铜"和"电线"是不同的代币,一起形成复合名词。
我们的词性标注系统根本不是基于字典的。相反,它是一个概率序列模型,在训练样例集上训练。我们可以添加其他培训数据,但不能添加其他字典项。此外,标记器 正确地获得"铜"和"电线"作为名词。
GrammaticalRelation
定义了一种依赖关系边 - 例如compound
。我相信,这已经是您想要的优势,并且不应该需要定义其他关系。
就解决方案而言,您可以通过运行依赖关系解析器(depparse
非常快)轻松找到复合名词,然后查找与compound
弧连接的名词组。找到这些复合名词后,你可以做两件事之一。
少推荐:重新标记句子,使这些名词被视为单个标记;或
建议:将复合名词span的头部词(即compound
边缘出来的词)作为你的令牌,然后当你必须恢复完整的名词时添加所有compound
边缘。所以,在你的情况下,对待" wire"作为"铜线的占位符,"并简单地恢复"铜"需要时从依赖树中按需部分。