1

我正在编写一个使用 NLP 检测命名实体的 Java 应用程序。我在我的应用程序中使用斯坦福大学命名实体代码。我已经编写了一个应用程序来检测名称,并将它们与数据库进行比较。但我对文本本身有疑问。

我想对文本中提到名字的句子进行分类并忽略它们。

例子:

'....这位作家的写作风格与赫尔曼梅尔维尔相同。..'

命名实体是赫尔曼梅尔维尔,但文本不是关于赫尔曼梅尔维尔,而是其他作家。赫尔曼梅尔维尔是一个真正的否定者。

另一个例子

球体。

亚历克斯·帕特森 (Alex Paterson) 为 Orb 在其专辑和音乐会中处理难以辨认的模糊样本而感到自豪。他未经授权使用其他艺术家的作品导致了与音乐家的纠纷,尤其是与 Rickie Lee Jones 的纠纷。在 1990 年代的现场表演中,Orb 使用针对现场混音和采样进行了优化的数字录音磁带机进行表演,然后切换到笔记本电脑和数字媒体。尽管表演方法发生了变化,但 Orb 仍保持其色彩缤纷的灯光秀和迷幻的图像一致。这些视觉密集的表演促使评论家将这个团体与平克弗洛伊德进行比较。

检测到的艺术家是“The Orb”和“Pink Floyd”。文本是关于 The Orb,但该组与 Pink Floyd 进行了比较。所以我想使用 NLP 来忽略“Pink Floyd”并将“The Orb”检测为命名实体作为主题。

我已经有一个包含示例文本的数据库,其中已经检测到作者。我可以将其用作测试集。我有一个包含所有存在的作家的数据库。

我想有一些例子或东西来阅读如何解决这个问题。即使是讨论也会很好。

4

1 回答 1

1

好的,对于您的问题,我更愿意添加一个约束,例如仅处理其中明确包含的句子name。这将帮助您减少经过最终处理的句子集。因为您的要求是决定文本的实际内容(删除真正的否定),我认为在生成的结构中查找rootandnsubj子句将使您朝着正确的方向前进。对于您的示例和语法依赖结构中的子句,看起来像grammatical dependencyStanford parserrootnsubj

nsubj(performed-11, Orb-10)
root(ROOT-0, performed-11)

nn(Paterson-2, Alex-1)
nsubj(prides-3, Paterson-2)
root(ROOT-0, prides-3)

nsubj(maintained-9, Orb-8)
root(ROOT-0, maintained-9)

nsubj(prompted-5, performances-4)
root(ROOT-0, prompted-5)

现在,您可以从这里检查哪些名称(Orb 或 Pink Floyd)在此结构中存在的最大次数。如果 Orb 出现的次数更多,那么Orb就是你的输出,否则Pink Floyd就是你的最终输出。但是您必须考虑名称(orb一个单词,而pink floyd您可以考虑nn从句的两个单词),这将是您的最终输出。

希望这可以帮助。

于 2013-10-25T18:32:29.313 回答