Con số đầu tiên là một id cụm (đại diện cho thẻ, trong đó đại diện cho cùng một thực thể), xem mã nguồn của SieveCoreferenceSystem#coref(Document)
. Những con số cặp là outout của CorefChain # toString():
public String toString(){
return position.toString();
}
nơi vị trí là một tập hợp các cặp vị thế của tổ chức nhắc đến (để có được chúng sử dụng CorefChain.getCorefMentions()
). Dưới đây là một ví dụ về một mã hoàn chỉnh (trong groovy), trong đó cho thấy làm thế nào để có được từ các vị trí để tokens:
class Example {
public static void main(String[] args) {
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
props.put("dcoref.score", true);
pipeline = new StanfordCoreNLP(props);
Annotation document = new Annotation("The atom is a basic unit of matter, it consists of a dense central nucleus surrounded by a cloud of negatively charged electrons.");
pipeline.annotate(document);
Map<Integer, CorefChain> graph = document.get(CorefChainAnnotation.class);
println aText
for(Map.Entry<Integer, CorefChain> entry : graph) {
CorefChain c = entry.getValue();
println "ClusterId: " + entry.getKey();
CorefMention cm = c.getRepresentativeMention();
println "Representative Mention: " + aText.subSequence(cm.startIndex, cm.endIndex);
List<CorefMention> cms = c.getCorefMentions();
println "Mentions: ";
cms.each { it ->
print aText.subSequence(it.startIndex, it.endIndex) + "|";
}
}
}
}
Output (Tôi không hiểu nơi 's' có nguồn gốc từ):
The atom is a basic unit of matter, it consists of a dense central nucleus surrounded by a cloud of negatively charged electrons.
ClusterId: 1
Representative Mention: he
Mentions: he|atom |s|
ClusterId: 6
Representative Mention: basic unit
Mentions: basic unit |
ClusterId: 8
Representative Mention: unit
Mentions: unit |
ClusterId: 10
Representative Mention: it
Mentions: it |
ps. Tôi không nghĩ rằng các thiết lập mặc định (mô hình) sẽ hoạt động cho miền của bạn. Các nlp lõi stanford có vẻ phù hợp hơn để trích xuất ngữ nghĩa từ tin tức, bài viết, v.v. Ví dụ, Stanford NER - một phần của NLP cốt lõi - được đào tạo và thử nghiệm trên các tập hợp dữ liệu CoNLL 2002 và 2003. – Skarab
Thuật toán này hữu ích một phần và dẫn tôi đến đúng thuật toán, nhưng đầu ra ở đây không đúng cho câu, không có "anh ta" trong câu hoặc "s" và "nó" chỉ được ánh xạ với chính nó mà thất bại điểm của giải pháp lõi. – user1084563
Tôi nghĩ bạn đã xem 'startIndex' và' endIndex' như thể chúng là các chỉ số ký tự (dựa trên 0), nhưng chúng là các chỉ mục mã thông báo (dựa trên 1). Ngoài ra, bạn không xác định 'aText'. Giả sử bạn có nghĩa là văn bản trong chú thích, thay vì "anh" (ký tự 1 và 2), bạn nên có "Nguyên tử" (từ 1 và 2), v.v. –