如何使用NLP库从报纸文章中提取信息?

我在进行大学的毕业设计项目,我的任务是从包含犯罪的新闻中提取因果关系。我还需要提取犯罪的地点。我使用了OPENNLP的命名实体识别器来提取地点。我为地点名称训练了一个模型,目前在我的场景中运行良好。现在我正在寻找一些东西(一种方法或一个库)来提取因果关系。以下是我正在使用的新闻的快照,加粗和斜体的文本是我想要提取的部分。需要帮助寻找一个类似于OPENNLP的库,或者任何对我完成这项任务有用的东西。

新闻1:

卡拉奇:周一,城市中至少有12人被枪杀,其中两人显然是在宗派袭击中被杀,另一名受害者是穆塔希达民族运动的活动家。

新闻2:

卡拉奇:周二,警方在古利斯坦-贾瓦尔和旅队地区的不同突袭中逮捕了三名嫌疑人,Geo新闻报道。

新闻3:

卡拉奇:周一,在巴尔迪亚镇,一家五口被发现死在家中,Geo新闻报道。

新闻4:

卡拉奇:信德游骑兵队在昨晚对城市的持续目标行动中逮捕了八名职业罪犯,并从他们那里缴获了武器,Geo新闻报道。


回答:

你可以通过使用解析器、分块器或词性标注器来识别动词短语和名词短语,从而提取因果关系。这可以通过提取连续的动词和名词短语来实现。这是如何使用解析器的方法,它将为你提供整个句子结构供你操作,你需要下载解析器模型

使用这个类(我放了一个你的句子在里面)

public class ParseMap {  public static void main(String[] args) throws InvalidFormatException, IOException {    InputStream is = new FileInputStream("c:\\temp\\opennlpmodels\\en-parser-chunking.bin");    ParserModel model = new ParserModel(is);    is.close();    Parser parser = ParserFactory.create(model);    String sentence = "KARACHI: At least 12 people were gunned down in the city on Monday, two of them apparently killed in sectarian attacks and one of the other victims a Muttahida Qaumi Movement activist.";    Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);    Parse p = topParses[0];    p.showCodeTree();    StringBuffer sb = new StringBuffer(sentence.length()*4);    p.show(sb);    System.out.println(sb);  }}

输出看起来像这样(保存在字符串缓冲区中)

(TOP (S (“ KARACHI:) (S (NP (QP (IN At) (JJS least) (CD 12)) (NNS people)) (VP (VBD were) (VP (VBN gunned) (ADVP (RB down)) (PP (IN in) (NP (NP (DT the) (NN city)) (PP (IN on) (NP (NP (NNP Monday,) (CD two)) (PP (IN of) (NP (PRP them))))))) (ADVP (RB apparently)) (VP (VBD killed) (PP (IN in) (NP (JJ sectarian) (NNS attacks))))))) (CC and) (S (NP (NP (CD one)) (PP (IN of) (NP (DT the) (JJ other) (NNS victims)))) (NP (DT a) (NNP Muttahida) (NNP Qaumi) (NNP Movement))) (. activist.)))

注意你正在寻找的因果关系是跟在你的命名实体(卡拉奇)之后的一个名词动词组合。通过一些调整,你可能会得到一些不错的结果。

编辑:只是为了澄清,我写的是一个快速获取一些东西的建议,你应该研究一些语言学启发式方法来做这件事,并确保你想要的确实是因果关系,而不仅仅是事件提取,你可以通过训练一个NER模型来实现这一点。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注