我正在尝试使用LingPipe和遵循this tutorial来提取命名实体(个人、个人和组织)。下面是我试图从中提取名称的full text,下面是代码(为简洁起见,省略了异常处理):
Chunker chunker = readChunker("/path-to-chunker"); // custom method for
reading the model
String article = "Some long news article spanning multiple lines...";
Chunking chunking = chunker.chunk(article);
Set<Chunk> chunkingSet = chunking.chunkSet();
for (Chunk chunk : chunkingSet) {
String name = article.substring(chunk.start(), chunk.end()));
System.out.println(name);
}这是我得到的输出的一部分:
Tony Abbott
Indonesia
Joko Widodo
Sukumaran
Andrew Chan
Bali.
pair
the Bali
Nusa Kambangan
Indonesian
Indonesian
I’
Widodo. I
” Abbott
Julie Bishop
Widodo
al-Jazeera
Sukumaran
Chan
Bishop
”如你所见,有很多不匹配/部分匹配,比如Bali.,pair,the Bali,I',Widodo. I," Abbott,"。我假设库的NER运行得很好,问题是上面的代码不知何故滥用了这个库中的类/方法。但我似乎就是找不到代码的错误之处?
有什么想法吗?
发布于 2015-03-07 05:21:02
看起来问题出在你在第一行读到的chunker模型中。可能,它使用了错误的标记器,这是Bali.、I'、Widodo. I、" Abbott、"的来源。pair和the Bali可以用普通误差来解释(标记器的精度通常不超过80-90% )。然而,这种错误的来源也可以通过糟糕的模型来解释-例如,它可以针对另一个领域进行训练。
顺便说一句,为什么你使用longpipe,而不是Stanford NER?一般来说,它会显示更好的结果;例如,第一个可用的(即随机的) article。此外,对于Standford NER来说,here是一个很好的分步教程。
https://stackoverflow.com/questions/28901640
复制相似问题