public void updatePanel(AjaxRequestTarget aTarget, CurationContainer aCC) throws UIMAException, ClassNotFoundException, IOException, BratAnnotationException { JCas jCas = repository.readCurationCas(bModel.getDocument()); final int sentenceAddress = getAddr( selectSentenceAt(jCas, bModel.getSentenceBeginOffset(), bModel.getSentenceEndOffset())); bModel.setSentenceAddress(sentenceAddress); final Sentence sentence = selectByAddr(jCas, Sentence.class, sentenceAddress); List<Sentence> followingSentences = selectFollowing(jCas, Sentence.class, sentence, bModel.getPreferences().getWindowSize()); // Check also, when getting the last sentence address in the display window, if this is the // last sentence or the ONLY sentence in the document Sentence lastSentenceAddressInDisplayWindow = followingSentences.size() == 0 ? sentence : followingSentences.get(followingSentences.size() - 1); if (curationView == null) { curationView = new SourceListView(); } curationView.setCurationBegin(sentence.getBegin()); curationView.setCurationEnd(lastSentenceAddressInDisplayWindow.getEnd()); int ws = bModel.getPreferences().getWindowSize(); Sentence fs = BratAjaxCasUtil.selectSentenceAt( jCas, bModel.getSentenceBeginOffset(), bModel.getSentenceEndOffset()); int l = BratAjaxCasUtil.getLastSentenceAddressInDisplayWindow(jCas, getAddr(fs), ws); Sentence ls = (Sentence) selectByAddr(jCas, FeatureStructure.class, l); fSn = BratAjaxCasUtil.getSentenceNumber(jCas, fs.getBegin()); lSn = BratAjaxCasUtil.getSentenceNumber(jCas, ls.getBegin()); sentencesListView.addOrReplace(sentenceList); aTarget.add(sentencesListView); /* * corssSentAnnoView.addOrReplace(crossSentAnnoList); aTarget.add(corssSentAnnoView); */ aTarget.add(suggestionViewPanel); if (annotate) { annotator.bratRender(aTarget, editor.getCas(bModel)); annotator.bratSetHighlight(aTarget, bModel.getSelection().getAnnotation()); } else { annotator.bratRenderLater(aTarget); } annotate = false; CuratorUtil.updatePanel( aTarget, suggestionViewPanel, aCC, annotator, repository, annotationSelectionByUsernameAndAddress, curationView, annotationService, userRepository); }
private void verifySentence(Sentence sentence, TestSentenceInfo info) throws LAPVerificationException { if (!info.text.equals(sentence.getCoveredText())) throw new LAPVerificationException( "Bad sentence text, expected \"" + info.text + "\", got \"" + sentence.getCoveredText() + "\""); if (info.begin != sentence.getBegin()) throw new LAPVerificationException( "Bad sentence begin index, expected " + info.begin + ", got " + sentence.getBegin()); if (info.end != sentence.getEnd()) throw new LAPVerificationException( "Bad sentence end index, expected " + info.end + ", got " + sentence.getEnd()); System.out.println("Verified sentence: " + info); }
/** * Puts JCases into a list and get a random annotation document that will be used as a base for * the diff. * * @throws IOException * @throws ClassNotFoundException * @throws UIMAException */ private void updateSegment( BratAnnotatorModel aBratAnnotatorModel, Map<Integer, Integer> segmentBeginEnd, Map<Integer, Integer> segmentNumber, Map<String, Map<Integer, Integer>> segmentAdress, JCas jCas, String username, int aWinSize) throws UIMAException, ClassNotFoundException, IOException { Sentence firstSentence = selectSentenceAt( jCas, aBratAnnotatorModel.getSentenceBeginOffset(), aBratAnnotatorModel.getSentenceEndOffset()); Sentence lastSentence = selectByAddr( jCas, Sentence.class, getLastSentenceAddressInDisplayWindow(jCas, getAddr(firstSentence), aWinSize)); begin = firstSentence.getBegin(); end = lastSentence.getEnd(); sentenceNumber = getFirstSentenceNumber(jCas, getAddr(firstSentence)); segmentAdress.put(username, new HashMap<Integer, Integer>()); for (Sentence sentence : selectCovered(jCas, Sentence.class, begin, end)) { sentenceNumber += 1; segmentBeginEnd.put(sentence.getBegin(), sentence.getEnd()); segmentNumber.put(sentence.getBegin(), sentenceNumber); segmentAdress.get(username).put(sentence.getBegin(), getAddr(sentence)); } /* * if (segmentBeginEnd.isEmpty()) { for (Sentence sentence : selectCovered(mergeJCas, * Sentence.class, begin, end)) { * * } } */ }
private void ubdateSentenceNumber(JCas aJCas, int aAddress) { bModel.setSentenceAddress(aAddress); Sentence sentence = selectByAddr(aJCas, Sentence.class, aAddress); bModel.setSentenceBeginOffset(sentence.getBegin()); bModel.setSentenceEndOffset(sentence.getEnd()); bModel.setSentenceNumber(BratAjaxCasUtil.getSentenceNumber(aJCas, sentence.getBegin())); Sentence firstSentence = selectSentenceAt(aJCas, bModel.getSentenceBeginOffset(), bModel.getSentenceEndOffset()); int lastAddressInPage = getLastSentenceAddressInDisplayWindow( aJCas, getAddr(firstSentence), bModel.getPreferences().getWindowSize()); // the last sentence address in the display window Sentence lastSentenceInPage = (Sentence) selectByAddr(aJCas, FeatureStructure.class, lastAddressInPage); bModel.setFSN(BratAjaxCasUtil.getSentenceNumber(aJCas, firstSentence.getBegin())); bModel.setLSN(BratAjaxCasUtil.getSentenceNumber(aJCas, lastSentenceInPage.getBegin())); }
private void updateCrossSentAnnoList( Map<Integer, Integer> segmentBeginEnd, Map<String, JCas> jCases, List<Type> entryTypes) { crossSentenceLists = new HashMap<>(); for (Integer begin : segmentBeginEnd.keySet()) { int thisSent = -1; Set<Integer> crossSents = new HashSet<>(); for (Type t : entryTypes) { for (JCas c : jCases.values()) { if (thisSent == -1) { thisSent = BratAjaxCasUtil.getSentenceNumber(c, begin); } // update cross-sentence annotation lists for (AnnotationFS fs : selectCovered(c.getCas(), t, this.begin, end)) { // CASE 1. annotation begins here if (fs.getBegin() >= begin && fs.getBegin() <= segmentBeginEnd.get(begin)) { if (fs.getEnd() > segmentBeginEnd.get(begin) || fs.getEnd() < begin) { Sentence s = BratAjaxCasUtil.getSentenceByAnnoEnd(c, fs.getEnd()); int thatSent = BratAjaxCasUtil.getSentenceNumber(c, s.getBegin()); crossSents.add(thatSent); } } // CASE 2. Annotation ends here else if (fs.getEnd() >= begin && fs.getEnd() <= segmentBeginEnd.get(begin)) { if (fs.getBegin() > segmentBeginEnd.get(begin) || fs.getBegin() < begin) { int thatSent = BratAjaxCasUtil.getSentenceNumber(c, fs.getBegin()); crossSents.add(thatSent); } } } for (AnnotationFS fs : selectCovered(c.getCas(), t, begin, end)) { if (fs.getBegin() <= segmentBeginEnd.get(begin) && fs.getEnd() > segmentBeginEnd.get(begin)) { Sentence s = BratAjaxCasUtil.getSentenceByAnnoEnd(c, fs.getEnd()); segmentBeginEnd.put(begin, s.getEnd()); } } } } crossSentenceLists.put(thisSent, crossSents); } }
private void setCurationSegmentBeginEnd() throws UIMAException, ClassNotFoundException, IOException { JCas jCas = repository.readAnnotationCas(bModel.getDocument(), bModel.getUser()); final int sentenceAddress = getAddr( selectSentenceAt(jCas, bModel.getSentenceBeginOffset(), bModel.getSentenceEndOffset())); final Sentence sentence = selectByAddr(jCas, Sentence.class, sentenceAddress); List<Sentence> followingSentences = selectFollowing(jCas, Sentence.class, sentence, bModel.getPreferences().getWindowSize()); // Check also, when getting the last sentence address in the display window, if this is the // last sentence or the ONLY sentence in the document Sentence lastSentenceAddressInDisplayWindow = followingSentences.size() == 0 ? sentence : followingSentences.get(followingSentences.size() - 1); curationSegment.setBegin(sentence.getBegin()); curationSegment.setEnd(lastSentenceAddressInDisplayWindow.getEnd()); }
private void updateCurationView( final CurationContainer curationContainer, final SourceListView curationViewItem, AjaxRequestTarget aTarget, JCas jCas) { int currentSentAddress = BratAjaxCasUtil.getCurrentSentence( jCas, curationViewItem.getBegin(), curationViewItem.getEnd()) .getAddress(); bModel.setSentenceAddress( BratAjaxCasUtil.getSentenceBeginAddress( jCas, currentSentAddress, curationViewItem.getBegin(), bModel.getProject(), bModel.getDocument(), bModel.getPreferences().getWindowSize())); Sentence sentence = selectByAddr(jCas, Sentence.class, bModel.getSentenceAddress()); bModel.setSentenceBeginOffset(sentence.getBegin()); bModel.setSentenceEndOffset(sentence.getEnd()); Sentence firstSentence = selectSentenceAt(jCas, bModel.getSentenceBeginOffset(), bModel.getSentenceEndOffset()); int lastAddressInPage = getLastSentenceAddressInDisplayWindow( jCas, getAddr(firstSentence), bModel.getPreferences().getWindowSize()); // the last sentence address in the display window Sentence lastSentenceInPage = (Sentence) selectByAddr(jCas, FeatureStructure.class, lastAddressInPage); bModel.setFSN(BratAjaxCasUtil.getSentenceNumber(jCas, firstSentence.getBegin())); bModel.setLSN(BratAjaxCasUtil.getSentenceNumber(jCas, lastSentenceInPage.getBegin())); curationContainer.setBratAnnotatorModel(bModel); onChange(aTarget); }
@Override public void process(JCas aJCas) throws AnalysisEngineProcessException { // Convert UIMA to LIF Container Container container = new Container(); container.setLanguage(aJCas.getDocumentLanguage()); container.setText(aJCas.getDocumentText()); View view = container.newView(); // Paragraph for (Paragraph p : select(aJCas, Paragraph.class)) { view.newAnnotation(id(PARAGRAPH, p), Discriminators.Uri.PARAGRAPH, p.getBegin(), p.getEnd()); } // Sentence for (Sentence s : select(aJCas, Sentence.class)) { view.newAnnotation(id(SENTENCE, s), Discriminators.Uri.SENTENCE, s.getBegin(), s.getEnd()); } // Token, POS, Lemma for (Token t : select(aJCas, Token.class)) { Annotation a = view.newAnnotation(id(TOKEN, t), Discriminators.Uri.TOKEN, t.getBegin(), t.getEnd()); if (t.getPos() != null) { a.addFeature(Features.Token.POS, t.getPos().getPosValue()); } if (t.getLemma() != null) { a.addFeature(Features.Token.LEMMA, t.getLemma().getValue()); } } // NamedEntity for (NamedEntity neAnno : select(aJCas, NamedEntity.class)) { Annotation ne = view.newAnnotation( id(NAMED_ENTITY, neAnno), Discriminators.Uri.NE, neAnno.getBegin(), neAnno.getEnd()); ne.setLabel(neAnno.getValue()); } // Dependency for (Sentence s : select(aJCas, Sentence.class)) { Set<String> depRelIds = new TreeSet<>(); for (Dependency dep : selectCovered(Dependency.class, s)) { String depRelId = id(DEPENDENCY, dep); // LAPPS dependencies inherit from Relation which has no offsets Annotation depRel = view.newAnnotation(depRelId, Discriminators.Uri.DEPENDENCY); depRel.setLabel(dep.getDependencyType()); depRel.addFeature(Features.Dependency.GOVERNOR, id(TOKEN, dep.getGovernor())); depRel.addFeature(Features.Dependency.DEPENDENT, id(TOKEN, dep.getDependent())); depRelIds.add(depRelId); } if (!depRelIds.isEmpty()) { Annotation depStruct = view.newAnnotation( id(DEPENDENCY_STRUCTURE, s), Discriminators.Uri.DEPENDENCY_STRUCTURE, s.getBegin(), s.getEnd()); depStruct.addFeature(Features.DependencyStructure.DEPENDENCIES, depRelIds); } } // Constituents for (ROOT r : select(aJCas, ROOT.class)) { Set<String> constituents = new LinkedHashSet<>(); convertConstituent(view, r, constituents); Annotation phraseStruct = view.newAnnotation( id(PHRASE_STRUCTURE, r), Discriminators.Uri.PHRASE_STRUCTURE, r.getBegin(), r.getEnd()); phraseStruct.addFeature(Features.PhraseStructure.CONSTITUENTS, constituents); } try (OutputStream docOS = getOutputStream(aJCas, filenameSuffix)) { String json = Serializer.toPrettyJson(container); IOUtils.write(json, docOS, encoding); } catch (Exception e) { throw new AnalysisEngineProcessException(e); } }