我正在做大学最后一年的项目,我的任务是从包含犯罪的新闻中提取因果关系。我还得找出犯罪地点。我使用OPENNLP名称实体识别器提取位置。我训练了一个定位名的模型,到目前为止,它对我的场景很好。现在我正在搜索一些东西(一种方法或一种图书馆)来提取因果关系。这是我正在使用的一条新闻的快照,而我想要提取的是粗体和意大利语文本。为了这个目的,需要一个库的帮助,就像OPENNLP一样,或者任何可能有用的东西或者我来执行这个任务。
新闻1: 卡拉奇:周一,至少有12人在城市被枪杀,其中两人显然死于宗派袭击,另一人是穆塔希达·卡米运动( Muttahida Qaumi )活动分子。 新闻2: 卡拉奇:据Geo新闻报道,周二,在对Gulistan和旅地区的不同突袭中逮捕了三名被告。 新闻3: 卡拉奇:据Geo新闻报道,周一,一家的五名成员在巴尔迪娅镇的家中被发现死亡。 新闻4: 卡拉奇:据“地理新闻”报道,昨晚在该市继续开展有针对性的行动,逮捕了8名职业罪犯,并从他们手中缴获了武器。
发布于 2013-12-11 14:08:08
您可以通过使用解析器、分词或词性标记来识别动词短语和名词短语来提取因果关系。这可以通过提取连续的动词和名词短语来完成。这就是如何使用解析器,它将为您提供要使用的整个句子结构,您需要下载解析器模型。
用这门课(我把你的一个句子放进去)
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);
}
}输出如下所示(保存在字符串缓冲区中)
(S (卡拉奇:) (S (QP ( in ) (JJS至少) (CD 12) (VP (VBD were) ) (VP (VBN Were) (ADVP (RB DT)) (PP (IN ) (NP (DT ) (NN市) (PP ( on) (NP (NNP )NNP,星期一)( (CD 2) (PP ( in ) (NP (PRP )) (NP (PRP他们) (ADVP (显然)) (VP (VBD被害) (PP (IN ) (NP (JJ教派) (NNS攻击) (CC和) (NP (NP (CD 1)) (PP (IN )) (NP (DT ) (JJ其他) (NNS受害者)(NP (DT a) )(NNP Muttahida) (NNP Qaumi) (NNP运动)) (。))
请注意,您正在寻找的因果关系是在一个命名实体(卡拉奇)后面的名词动词组合体。经过一些修修补补,你可能会得到一些不错的结果。
编辑:为了清楚的是,我写的是一个快速获得一些东西的建议,你应该考虑一些语言上的启发,并确保你想要的是因果关系,而不仅仅是事件抽取,这也许可以实现一个新模型的训练。
https://stackoverflow.com/questions/20512228
复制相似问题