很多时候,命名实体识别(NER) 不会将连续的 NNP 标记为一个 NE。我认为编辑 NER 以使用 RegexpTagger 也可以改进 NER。
例如,考虑以下输入:
“巴拉克奥巴马是一个伟大的人。”
和输出:
Tree('S', [Tree('PERSON', [('Barack', 'NNP')]), Tree('ORGANIZATION', [('Obama', 'NNP')]),
('is', 'VBZ'), ('a', 'DT'), ('great', 'JJ'), ('person', 'NN'), ('.', '.')])
至于输入:
“前副总统迪克切尼告诉保守派电台主持人劳拉英格拉汉姆,他“很荣幸”在任期间与达斯维德相提并论。
输出是:
Tree('S', [('Former', 'JJ'), ('Vice', 'NNP'), ('President', 'NNP'),
Tree('NE', [('Dick', 'NNP'), ('Cheney', 'NNP')]), ('told', 'VBD'), ('conservative', 'JJ'),
('radio', 'NN'), ('host', 'NN'), Tree('NE', [('Laura', 'NNP'), ('Ingraham', 'NNP')]),
('that', 'IN'), ('he', 'PRP'), ('``', '``'), ('was', 'VBD'), ('honored', 'VBN'),
("''", "''"), ('to', 'TO'), ('be', 'VB'), ('compared', 'VBN'), ('to', 'TO'),
Tree('NE', [('Darth', 'NNP'), ('Vader', 'NNP')]), ('while', 'IN'), ('in', 'IN'),
('office', 'NN'), ('.', '.')])
这里Vice/NNP, President/NNP, (Dick/NNP, Cheney/NNP)
是正确提取的。所以,我认为如果nltk.ne_chunk
首先使用,然后如果两个连续的树是 NNP,那么两者都引用一个实体的可能性更高。
我一直在玩 NLTK 工具包,我经常遇到这个问题,但找不到令人满意的答案。任何建议将不胜感激。我正在寻找我的方法中的缺陷。