From 00d4bd83d912f2070a60ea801565378d4f42b36e Mon Sep 17 00:00:00 2001 From: jcorvi Date: Wed, 21 Sep 2022 17:04:51 +0200 Subject: [PATCH 1/3] textual evidence by section draft dev --- .../api/controllers/ReportController.java | 16 +- .../api/services/TextualEvidenceService.java | 4 + .../services/TextualEvidenceServiceImpl.java | 156 ++++++++++-------- 3 files changed, 104 insertions(+), 72 deletions(-) diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java index 22e8aa9..77957e9 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java @@ -124,16 +124,28 @@ public class ReportController { } @GetMapping(value = "/{reportId}/evidence/findings") - public ResponseEntity findAllFindingEvidence(@PathVariable(value="reportId") String reportId) { + public ResponseEntity findAllFindingEvidenceByReport(@PathVariable(value="reportId") String reportId) { String snippet = textualEvidenceService.findFindingsEvidenceByReportId(reportId); return new ResponseEntity(snippet, HttpStatus.OK); } + @GetMapping(value = "/{reportId}/{sectionId}/evidence/findings") + public ResponseEntity findAllFindingEvidenceByDocumentAnnotations(@PathVariable(value="reportId") String reportId, @PathVariable(value="sectionId") Long sectionId) { + String snippet = textualEvidenceService.findFindingsEvidenceByDocumentAnnotationsId(sectionId); + return new ResponseEntity(snippet, HttpStatus.OK); + } + @GetMapping(value = "/{reportId}/evidence/sentences") - public ResponseEntity findSentencesEvidence(@PathVariable(value="reportId") String reportId) { + public ResponseEntity findSentencesEvidenceByReport(@PathVariable(value="reportId") String reportId) { String snippet = textualEvidenceService.findSentencesEvidenceByReportId(reportId); return new ResponseEntity(snippet, HttpStatus.OK); } + @GetMapping(value = "/{reportId}/{sectionId}/evidence/sentences") + public ResponseEntity findSentencesEvidenceBySection(@PathVariable(value="reportId") String reportId, @PathVariable(value="sectionId") Long sectionId) { + String snippet = textualEvidenceService.findSentencesEvidenceByDocumentAnnotationsId(sectionId); + return new ResponseEntity(snippet, HttpStatus.OK); + } + } \ No newline at end of file diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceService.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceService.java index f715d1d..cd48152 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceService.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceService.java @@ -12,4 +12,8 @@ public interface TextualEvidenceService { String findSentencesEvidenceByReportId(String reportId); + String findFindingsEvidenceByDocumentAnnotationsId(Long documentAnnotationsId); + + String findSentencesEvidenceByDocumentAnnotationsId(Long documentAnnotationsId); + } diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceServiceImpl.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceServiceImpl.java index c88f8d1..02d4b86 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceServiceImpl.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceServiceImpl.java @@ -44,67 +44,45 @@ public class TextualEvidenceServiceImpl implements TextualEvidenceService{ } - /** - * Generate the snippet only of the text without annotations. - * @param text - * @return - */ - private String generateOnlyTextSnippet(String text) { - Gson gsonBuilder = new GsonBuilder().create(); - JsonObject findings_evidence = new JsonObject(); - findings_evidence.addProperty("text", text); - JsonArray entities = new JsonArray(); - JsonArray attributes = new JsonArray(); - JsonArray relations = new JsonArray(); - findings_evidence.add("entities", entities); - findings_evidence.add("attributes", attributes); - findings_evidence.add("relations", relations); - return gsonBuilder.toJson(findings_evidence).toString(); + + + public String findDocumentTextSubstringByDocumentId(Long id, Integer start, Integer end) { + return sectionRepository.findSectionTextSubstringByDocumentId(id, start, end); } + @Override - public String findFindingEvidenceByDocumentAnnotationsIdAndFindingId(Long documentAnnotationsId, Integer findingId) { - DocumentAnnotations documentAnnotations = documentAnnotationsRepository.findByDocumentId(documentAnnotationsId); - Finding findingSelected = null; - Annotation sentenceRelevantText = null; - for (Annotation annotation : documentAnnotations.getRelevantSentences()) { - for (Finding finding : annotation.getFindings()) { - if(finding.getFindingId().equals(findingId)) { - findingSelected = finding; - sentenceRelevantText = annotation; - break; - } - } - } - if(findingSelected!=null) { - //I removed relevant text as atribute so ... - //Annotation annotation = findingSelected.getRelevant_text(); - Annotation annotation = sentenceRelevantText; - int text_size = annotation.getEndOffset() - annotation.getStartOffset(); - int start_ = 0; - int start_off = 0; - if(annotation.getStartOffset()-Constants.SLICE_START >= 0) { - start_ = annotation.getStartOffset()-Constants.SLICE_START; - start_off = Constants.SLICE_START; - }else { - start_off = annotation.getStartOffset(); - } - String subtext = this.findDocumentTextSubstringByDocumentId(documentAnnotationsId, start_, text_size + Constants.SLICE_END); - subtext = Constants.POINTS + subtext + Constants.POINTS; - int start_annotation_aux = annotation.getStartOffset(); - annotation.setStartOffset(Constants.SLICE_START + Constants.POINTS_INT); - annotation.setEndOffset(Constants.SLICE_START + Constants.POINTS_INT + text_size); - return this.generateFindingSnippet(subtext, findingSelected, start_off, start_annotation_aux); + public String findFindingsEvidenceByReportId(String reportId) { + Report report = reportRepository.findById(reportId).get(); + if(report.getSections()!=null && report.getSections().size()>0) { + Section section = report.getSections().get(0); + return this.generateAllFindingsEvidenceSnippet(section.getText(), section.getAnnotations().getRelevantSentences()); } return ""; } - public String findDocumentTextSubstringByDocumentId(Long id, Integer start, Integer end) { - return sectionRepository.findSectionTextSubstringByDocumentId(id, start, end); + @Override + public String findSentencesEvidenceByReportId(String reportId) { + Report report = reportRepository.findById(reportId).get(); + if(report.getSections()!=null && report.getSections().size()>0) { + Section section = report.getSections().get(0); + return this.generateAllRelevantSentenceEvidenceSnippet(section.getText(), section.getAnnotations().getRelevantSentences()); + } + return ""; } - + @Override + public String findFindingsEvidenceByDocumentAnnotationsId(Long documentAnnotationsId) { + Section section = sectionRepository.findById(documentAnnotationsId.toString()).get(); + return this.generateAllFindingsEvidenceSnippet(section.getText(), section.getAnnotations().getRelevantSentences()); + } + + @Override + public String findSentencesEvidenceByDocumentAnnotationsId(Long documentAnnotationsId) { + Section section = sectionRepository.findById(documentAnnotationsId.toString()).get(); + return this.generateAllRelevantSentenceEvidenceSnippet(section.getText(), section.getAnnotations().getRelevantSentences()); + } /** @@ -242,26 +220,7 @@ public class TextualEvidenceServiceImpl implements TextualEvidenceService{ return gsonBuilder.toJson(json_to_return).toString(); } - - @Override - public String findFindingsEvidenceByReportId(String reportId) { - Report report = reportRepository.findById(reportId).get(); - if(report.getSections()!=null && report.getSections().size()>0) { - Section section = report.getSections().get(0); - return this.generateAllFindingsEvidenceSnippet(section.getText(), section.getAnnotations().getRelevantSentences()); - } - return ""; - } - @Override - public String findSentencesEvidenceByReportId(String reportId) { - Report report = reportRepository.findById(reportId).get(); - if(report.getSections()!=null && report.getSections().size()>0) { - Section section = report.getSections().get(0); - return this.generateAllRelevantSentenceEvidenceSnippet(section.getText(), section.getAnnotations().getRelevantSentences()); - } - return ""; - } /** * Generate the evidence of view all button. @@ -377,7 +336,64 @@ public class TextualEvidenceServiceImpl implements TextualEvidenceService{ return gsonBuilder.toJson(relevant_evidence).toString(); } + + + /** + * Generate the snippet only of the text without annotations. + * @param text + * @return + */ + private String generateOnlyTextSnippet(String text) { + Gson gsonBuilder = new GsonBuilder().create(); + JsonObject findings_evidence = new JsonObject(); + findings_evidence.addProperty("text", text); + JsonArray entities = new JsonArray(); + JsonArray attributes = new JsonArray(); + JsonArray relations = new JsonArray(); + findings_evidence.add("entities", entities); + findings_evidence.add("attributes", attributes); + findings_evidence.add("relations", relations); + return gsonBuilder.toJson(findings_evidence).toString(); + } + + + @Override + public String findFindingEvidenceByDocumentAnnotationsIdAndFindingId(Long documentAnnotationsId, Integer findingId) { + DocumentAnnotations documentAnnotations = documentAnnotationsRepository.findByDocumentId(documentAnnotationsId); + Finding findingSelected = null; + Annotation sentenceRelevantText = null; + for (Annotation annotation : documentAnnotations.getRelevantSentences()) { + for (Finding finding : annotation.getFindings()) { + if(finding.getFindingId().equals(findingId)) { + findingSelected = finding; + sentenceRelevantText = annotation; + break; + } + } + } + if(findingSelected!=null) { + //I removed relevant text as atribute so ... + //Annotation annotation = findingSelected.getRelevant_text(); + Annotation annotation = sentenceRelevantText; + int text_size = annotation.getEndOffset() - annotation.getStartOffset(); + int start_ = 0; + int start_off = 0; + if(annotation.getStartOffset()-Constants.SLICE_START >= 0) { + start_ = annotation.getStartOffset()-Constants.SLICE_START; + start_off = Constants.SLICE_START; + }else { + start_off = annotation.getStartOffset(); + } + String subtext = this.findDocumentTextSubstringByDocumentId(documentAnnotationsId, start_, text_size + Constants.SLICE_END); + subtext = Constants.POINTS + subtext + Constants.POINTS; + int start_annotation_aux = annotation.getStartOffset(); + annotation.setStartOffset(Constants.SLICE_START + Constants.POINTS_INT); + annotation.setEndOffset(Constants.SLICE_START + Constants.POINTS_INT + text_size); + return this.generateFindingSnippet(subtext, findingSelected, start_off, start_annotation_aux); + } + return ""; + } } -- GitLab From c2f24696bff584273e8ad86d0c5c28caacebece8 Mon Sep 17 00:00:00 2001 From: Javi Corvi Date: Thu, 22 Sep 2022 12:33:54 +0200 Subject: [PATCH 2/3] new entry points --- .../api/controllers/ReportController.java | 27 +++++++++++-------- .../pretox/rest/api/model/Section.java | 10 +++++++ .../api/repository/SectionRepository.java | 5 +++- .../rest/api/services/ReportService.java | 7 +++++ .../rest/api/services/ReportServiceImpl.java | 15 +++++++++++ .../services/TextualEvidenceServiceImpl.java | 11 ++++---- 6 files changed, 58 insertions(+), 17 deletions(-) diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java index 77957e9..a93e562 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java @@ -100,9 +100,14 @@ public class ReportController { return ResponseEntity.ok().body(reportService.restore(reportId)); } - @GetMapping(value ="/{id}") - public ResponseEntity find(@PathVariable(value="id") String id) { - return new ResponseEntity(reportService.findById(id), HttpStatus.OK); + @GetMapping(value ="/{reportId}") + public ResponseEntity find(@PathVariable(value="reportId") String reportId) { + return new ResponseEntity(reportService.findById(reportId), HttpStatus.OK); + } + + @GetMapping(value ="/{reportId}/section/{sectionId}") + public ResponseEntity findBySectionId(@PathVariable(value="reportId") String reportId, @PathVariable(value="sectionId") Long sectionId) { + return new ResponseEntity(reportService.findReportByIdAndSectionById(reportId, sectionId), HttpStatus.OK); } @GetMapping(value = "/{reportId}/text") @@ -111,15 +116,15 @@ public class ReportController { return new ResponseEntity(snippet, HttpStatus.OK); } - @GetMapping(value = "/{documentAnnotationsId}/evidence/finding/{findingId}") - public ResponseEntity findFinding(@PathVariable(value="documentAnnotationsId") Long documentAnnotationsId, @PathVariable(value="findingId") Integer findingId) { - String snippet = textualEvidenceService.findFindingEvidenceByDocumentAnnotationsIdAndFindingId(documentAnnotationsId, findingId); + @GetMapping(value = "/{sectionId}/evidence/finding/{findingId}") + public ResponseEntity findFinding(@PathVariable(value="sectionId") Long sectionId, @PathVariable(value="findingId") Integer findingId) { + String snippet = textualEvidenceService.findFindingEvidenceByDocumentAnnotationsIdAndFindingId(sectionId, findingId); return new ResponseEntity(snippet, HttpStatus.OK); } - @GetMapping(value = "/{documentAnnotationsId}/evidence/sentence/{sentenceId}") - public ResponseEntity findSentence(@PathVariable(value="documentAnnotationsId") Long documentAnnotationsId, @PathVariable(value="sentenceId") Integer sentenceId) { - String snippet = textualEvidenceService.findSentenceEvidenceByDocumentAnnotationsIdAndSentenceId(documentAnnotationsId, sentenceId); + @GetMapping(value = "/{sectionId}/evidence/sentence/{sentenceId}") + public ResponseEntity findSentence(@PathVariable(value="documentAnnotationsId") Long sectionId, @PathVariable(value="sentenceId") Integer sentenceId) { + String snippet = textualEvidenceService.findSentenceEvidenceByDocumentAnnotationsIdAndSentenceId(sectionId, sentenceId); return new ResponseEntity(snippet, HttpStatus.OK); } @@ -129,7 +134,7 @@ public class ReportController { return new ResponseEntity(snippet, HttpStatus.OK); } - @GetMapping(value = "/{reportId}/{sectionId}/evidence/findings") + @GetMapping(value = "/{reportId}/section/{sectionId}/evidence/findings") public ResponseEntity findAllFindingEvidenceByDocumentAnnotations(@PathVariable(value="reportId") String reportId, @PathVariable(value="sectionId") Long sectionId) { String snippet = textualEvidenceService.findFindingsEvidenceByDocumentAnnotationsId(sectionId); return new ResponseEntity(snippet, HttpStatus.OK); @@ -141,7 +146,7 @@ public class ReportController { return new ResponseEntity(snippet, HttpStatus.OK); } - @GetMapping(value = "/{reportId}/{sectionId}/evidence/sentences") + @GetMapping(value = "/{reportId}/section/{sectionId}/evidence/sentences") public ResponseEntity findSentencesEvidenceBySection(@PathVariable(value="reportId") String reportId, @PathVariable(value="sectionId") Long sectionId) { String snippet = textualEvidenceService.findSentencesEvidenceByDocumentAnnotationsId(sectionId); return new ResponseEntity(snippet, HttpStatus.OK); diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Section.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Section.java index 33999f7..ed39ac9 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Section.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Section.java @@ -78,4 +78,14 @@ public class Section{ this.annotations = annotations; } + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + + } diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/SectionRepository.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/SectionRepository.java index 8e4dbb2..f47a410 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/SectionRepository.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/SectionRepository.java @@ -1,8 +1,11 @@ package es.bsc.inb.etransafe.pretox.rest.api.repository; +import java.util.Optional; + import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; +import es.bsc.inb.etransafe.pretox.rest.api.model.Report; import es.bsc.inb.etransafe.pretox.rest.api.model.Section; @@ -10,7 +13,7 @@ import es.bsc.inb.etransafe.pretox.rest.api.model.Section; @Repository public interface SectionRepository extends SectionRepositoryCustom, MongoRepository { - + Optional
findById(Long sectionId); } diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportService.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportService.java index 4dae592..b9a596b 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportService.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportService.java @@ -54,6 +54,13 @@ public interface ReportService { * @return */ public Report findById(String id); + /** + * + * @param reportId + * @param sectionId + * @return + */ + public Report findReportByIdAndSectionById(String reportId, Long sectionId); } diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportServiceImpl.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportServiceImpl.java index 0b63885..35de1b0 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportServiceImpl.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportServiceImpl.java @@ -22,6 +22,7 @@ import com.mongodb.client.gridfs.model.GridFSFile; import es.bsc.inb.etransafe.pretox.rest.api.model.RecordState; import es.bsc.inb.etransafe.pretox.rest.api.model.Report; import es.bsc.inb.etransafe.pretox.rest.api.model.ReportStatus; +import es.bsc.inb.etransafe.pretox.rest.api.model.Section; import es.bsc.inb.etransafe.pretox.rest.api.repository.ReportRepository; @Service @@ -124,5 +125,19 @@ public class ReportServiceImpl implements ReportService { return reportRepository.save(report); } + @Override + public Report findReportByIdAndSectionById(String reportId, Long sectionId) { + Report report = reportRepository.findById(reportId).get(); + Section selected = null; + for (Section section : report.getSections()) { + if(section.getId().equals(sectionId)) { + selected = section; + } + } + report.getSections().clear(); + report.getSections().add(selected); + return report; + } + } diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceServiceImpl.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceServiceImpl.java index 02d4b86..355071c 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceServiceImpl.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/TextualEvidenceServiceImpl.java @@ -73,14 +73,14 @@ public class TextualEvidenceServiceImpl implements TextualEvidenceService{ } @Override - public String findFindingsEvidenceByDocumentAnnotationsId(Long documentAnnotationsId) { - Section section = sectionRepository.findById(documentAnnotationsId.toString()).get(); + public String findFindingsEvidenceByDocumentAnnotationsId(Long sectionId) { + Section section = sectionRepository.findById(sectionId).get(); return this.generateAllFindingsEvidenceSnippet(section.getText(), section.getAnnotations().getRelevantSentences()); } @Override - public String findSentencesEvidenceByDocumentAnnotationsId(Long documentAnnotationsId) { - Section section = sectionRepository.findById(documentAnnotationsId.toString()).get(); + public String findSentencesEvidenceByDocumentAnnotationsId(Long sectionId) { + Section section = sectionRepository.findById(sectionId).get(); return this.generateAllRelevantSentenceEvidenceSnippet(section.getText(), section.getAnnotations().getRelevantSentences()); } @@ -318,7 +318,8 @@ public class TextualEvidenceServiceImpl implements TextualEvidenceService{ int t = 1; for (Annotation sentenceAnnotation : sentences) { JsonArray values_sentence = new JsonArray(); - values_sentence.add("T"+t + " - SCORE: " + sentenceAnnotation.getFeature("PRETOX_REL_SCORE")); + values_sentence.add("T"+t); + //values_sentence.add("T"+t + " - SCORE: " + sentenceAnnotation.getFeature("PRETOX_REL_SCORE")); values_sentence.add("RELEVANT_SENTENCE"); JsonArray offste_sentence = new JsonArray(); JsonArray offste2_sentence = new JsonArray(); -- GitLab From cbd6c4eccd06f15b967149524bd3f4f47637aac2 Mon Sep 17 00:00:00 2001 From: jcorvi Date: Fri, 23 Sep 2022 12:49:46 +0200 Subject: [PATCH 3/3] fig sentence evidence bug --- .../etransafe/pretox/rest/api/controllers/ReportController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java index a93e562..987fe12 100644 --- a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java @@ -123,7 +123,7 @@ public class ReportController { } @GetMapping(value = "/{sectionId}/evidence/sentence/{sentenceId}") - public ResponseEntity findSentence(@PathVariable(value="documentAnnotationsId") Long sectionId, @PathVariable(value="sentenceId") Integer sentenceId) { + public ResponseEntity findSentence(@PathVariable(value="sectionId") Long sectionId, @PathVariable(value="sentenceId") Integer sentenceId) { String snippet = textualEvidenceService.findSentenceEvidenceByDocumentAnnotationsIdAndSentenceId(sectionId, sentenceId); return new ResponseEntity(snippet, HttpStatus.OK); } -- GitLab