本文整理了Java中org.apache.uima.cas.text.AnnotationIndex.subiterator()
方法的一些代码示例,展示了AnnotationIndex.subiterator()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。AnnotationIndex.subiterator()
方法的具体详情如下:
包路径:org.apache.uima.cas.text.AnnotationIndex
类名称:AnnotationIndex
方法名:subiterator
[英]Return a subiterator whose bounds are defined by the input annotation.
The annot
is used for 3 purposes:
The starting position is computed by first finding a position whose annotation compares equal with the annot
(this might be one of several), and then advancing until reaching a position where the annotation there is not equal to the annot
. If no item in the index is equal (meaning it has the same begin, the same end, and is the same type as the annot
) then the iterator is positioned to the first annotation which is greater than the annot
, or if there are no annotations greater than the annot
, the iterator is marked invalid.
The iterator will stop (become invalid) when
annot's
end position, orWhile iterating, it operates like a strict
iterator; annotations whose end positions are > the end position of annot
are skipped.
This is equivalent to returning annotations b
such that
annot < b
, andannot.getEnd() >= b.getBegin()
, skipping b's
whose end position is > annot.getEnd().For annotations x, y, x < y
here is to be interpreted as "x comes before y in the index", according to the rules defined in the description of AnnotationIndex.
This definition implies that annotations b
that have the same span as annot
may or may not be returned by the subiterator. This is determined by the type priorities; the subiterator will only return such an annotation b
if the type of annot
precedes the type of b
in the type priorities definition. If you have not specified the priority, or if annot
and b
are of the same type, then the behavior is undefined.
For example, if you have an annotation S
of type Sentence
and an annotation P
of type Paragraph
that have the same span, and you have defined Paragraph
before Sentence
in your type priorities, then subiterator(P)
will give you an iterator that will return S
, but subiterator(S)
will give you an iterator that will NOT return P
. The intuition is that a Paragraph is conceptually larger than a Sentence, as defined by the type priorities.
Calling subiterator(a)
is equivalent to calling subiterator(a, true, true).
. See #subiterator(AnnotationFS,boolean,boolean).
[中]返回一个子迭代器,其边界由输入注释定义。annot
有三个用途:
*它用于计算迭代开始时索引中的位置。
*它用于计算迭代器前进时停止的终点。
*它用于指定迭代时将跳过哪些注释。
计算起始位置的方法是:首先查找注释与annot
比较相等的位置(这可能是几个位置之一),然后前进,直到到达注释不等于annot
的位置。如果索引中没有相等的项(意味着它与annot
具有相同的开始、结束和相同的类型),则迭代器定位到大于annot
的第一个注释,或者如果没有大于annot
的注释,则迭代器被标记为无效。
迭代器将在以下情况下停止(变得无效)
*向前或向后运行时,索引中的项目已用完,或
*向前移动时,它到达一个点,该位置的注释的起点超出annot's
结束位置,或
*当向后移动时,它到达其原始起始位置之前的位置。
迭代时,它的运行方式类似于strict
迭代器;跳过结束位置大于annot
结束位置的批注。
这相当于返回注释b
,以便
*annot < b
,以及
*annot.getEnd() >= b.getBegin()
,跳过结束位置为>annot的b's
。getEnd()。
根据AnnotationIndex描述中定义的规则,对于注释x,y,x < y
这里被解释为“索引中x在y之前”。
此定义意味着子迭代器可能返回或不返回与annot
具有相同跨度的注释b
。这取决于类型优先级;如果类型优先级定义中annot
的类型先于b
的类型,子迭代器将仅返回此类注释b
。如果未指定优先级,或者annot
和b
属于同一类型,则该行为未定义。
例如,如果您有类型为Sentence
的注释S
和类型为Paragraph
的注释P
具有相同的跨度,并且您在类型优先级中的Sentence
之前定义了Paragraph
,那么subiterator(P)
将为您提供一个返回S
的迭代器,但subiterator(S)
将为您提供一个不会返回[$30$]的迭代器。直觉是段落在概念上比句子大,这是由类型优先级定义的。
调用subiterator(a)
等同于调用subiterator(a, true, true).
。请参见#子迭代器(注释、布尔、布尔)。
代码示例来源:origin: org.apache.ctakes/ctakes-assertion
protected void buildSentenceToTokenNumberMap() {
sentenceToTokenNumberMap = new HashMap<Sentence, List<BaseToken>>();
for (Sentence s : beginTreeMap.values()) {
FSIterator<Annotation> tokensInSentenceIterator = jcas
.getAnnotationIndex(BaseToken.type).subiterator(s);
List<BaseToken> btList = new ArrayList<BaseToken>();
BaseToken bt = null;
while ((bt = this.getNextNonEOLToken(tokensInSentenceIterator)) != null) {
btList.add(bt);
}
sentenceToTokenNumberMap.put(s, btList);
}
}
代码示例来源:origin: apache/ctakes
protected void buildSentenceToTokenNumberMap() {
sentenceToTokenNumberMap = new HashMap<Sentence, List<BaseToken>>();
for (Sentence s : beginTreeMap.values()) {
FSIterator<Annotation> tokensInSentenceIterator = jcas
.getAnnotationIndex(BaseToken.type).subiterator(s);
List<BaseToken> btList = new ArrayList<BaseToken>();
BaseToken bt = null;
while ((bt = this.getNextNonEOLToken(tokensInSentenceIterator)) != null) {
btList.add(bt);
}
sentenceToTokenNumberMap.put(s, btList);
}
}
代码示例来源:origin: apache/ctakes
/**
* Gets a list of annotations within the specified window annotation.
*
// * @param annotItr
* @param jCas
* @param window
* @return
* @throws Exception
*/
private List<Annotation> constrainToWindow(JCas jCas, int type, Annotation window) {
List<Annotation> list = new ArrayList<Annotation>();
FSIterator subiterator = jCas.getAnnotationIndex(type).subiterator(window);
while (subiterator.hasNext()) {
Annotation annot = (Annotation) subiterator.next();
list.add(annot);
}
return list;
}
代码示例来源:origin: org.apache.ctakes/ctakes-ne-contexts
/**
* Gets a list of annotations within the specified window annotation.
*
// * @param annotItr
* @param jCas
* @param window
* @return
* @throws Exception
*/
private List<Annotation> constrainToWindow(JCas jCas, int type, Annotation window) {
List<Annotation> list = new ArrayList<Annotation>();
FSIterator subiterator = jCas.getAnnotationIndex(type).subiterator(window);
while (subiterator.hasNext()) {
Annotation annot = (Annotation) subiterator.next();
list.add(annot);
}
return list;
}
代码示例来源:origin: apache/uima-uimaj
public static FeatureStructure[] getDebugLogicalStructure_SubAnnotations(AnnotationFS fs) {
// uses sub iterators - may cause apparant skipping of initial annotations due to type
// priorities.
return getIndexContents(fs.getCAS().getAnnotationIndex().subiterator(fs)); // built-in
// annotation
// index
}
代码示例来源:origin: apache/ctakes
protected List<Annotation> getMiddleScopeContextAnnotations(JCas jCas, Annotation focus)
throws AnalysisEngineProcessException {
List<Annotation> scopeContextAnnotations = new ArrayList<Annotation>();
FSIterator subiterator = jCas.getAnnotationIndex(contextType).subiterator(focus);
while (subiterator.hasNext()) {
scopeContextAnnotations.add((Annotation) subiterator.next());
}
if (scopeContextAnnotations.size() == 0 && JCasUtil.getType(focus.getClass()) == contextType)
scopeContextAnnotations.add(focus);
else if (scopeContextAnnotations.size() == 0) {
TypeSystem typeSystem = jCas.getTypeSystem();
Type superType = jCas.getType(focusType).casType;
Type subType = focus.getType();
if (typeSystem.subsumes(superType, subType))
scopeContextAnnotations.add(focus);
}
return scopeContextAnnotations;
}
代码示例来源:origin: org.apache.ctakes/ctakes-ne-contexts
protected List<Annotation> getMiddleScopeContextAnnotations(JCas jCas, Annotation focus)
throws AnalysisEngineProcessException {
List<Annotation> scopeContextAnnotations = new ArrayList<Annotation>();
FSIterator subiterator = jCas.getAnnotationIndex(contextType).subiterator(focus);
while (subiterator.hasNext()) {
scopeContextAnnotations.add((Annotation) subiterator.next());
}
if (scopeContextAnnotations.size() == 0 && JCasUtil.getType(focus.getClass()) == contextType)
scopeContextAnnotations.add(focus);
else if (scopeContextAnnotations.size() == 0) {
TypeSystem typeSystem = jCas.getTypeSystem();
Type superType = jCas.getType(focusType).casType;
Type subType = focus.getType();
if (typeSystem.subsumes(superType, subType))
scopeContextAnnotations.add(focus);
}
return scopeContextAnnotations;
}
代码示例来源:origin: org.apache.uima/ruta-core
public List<RutaBasic> getBasicsInWindow(AnnotationFS windowAnnotation) {
List<RutaBasic> result = new ArrayList<RutaBasic>();
if (windowAnnotation instanceof RutaBasic) {
result.add((RutaBasic) windowAnnotation);
return result;
}
FSMatchConstraint defaultConstraint = filter.getDefaultConstraint();
FSIterator<AnnotationFS> iterator = cas.createFilteredIterator(
cas.getAnnotationIndex(basicType).subiterator(windowAnnotation), defaultConstraint);
while (iterator.isValid()) {
result.add((RutaBasic) iterator.get());
iterator.moveToNext();
}
return result;
}
代码示例来源:origin: org.apache.uima/textmarker-core
public List<TextMarkerBasic> getBasicsInWindow(AnnotationFS windowAnnotation) {
List<TextMarkerBasic> result = new ArrayList<TextMarkerBasic>();
if (windowAnnotation instanceof TextMarkerBasic) {
result.add((TextMarkerBasic) windowAnnotation);
return result;
}
FSMatchConstraint defaultConstraint = filter.getDefaultConstraint();
FSIterator<AnnotationFS> iterator = cas.createFilteredIterator(cas
.getAnnotationIndex(basicType).subiterator(windowAnnotation), defaultConstraint);
while (iterator.isValid()) {
result.add((TextMarkerBasic) iterator.get());
iterator.moveToNext();
}
return result;
}
代码示例来源:origin: nlpie/biomedicus
private void divideAnnotation(AnnotationFS annotation) {
Objects.requireNonNull(typeToCreate);
Objects.requireNonNull(dividers);
FSIterator<AnnotationFS> subiterator = dividers.subiterator(annotation);
int begin = annotation.getBegin();
while (subiterator.hasNext()) {
int end = subiterator.next().getBegin();
cas.addFsToIndexes(cas.createAnnotation(typeToCreate, begin, end));
begin = end;
}
}
代码示例来源:origin: org.apache.uima/ruta-core
private void updateIterators(CAS cas, Type basicType, FilterManager filter,
AnnotationFS additionalWindow) {
if (additionalWindow != null) {
this.basicIt = cas.getAnnotationIndex(basicType).subiterator(additionalWindow);
} else {
this.basicIt = cas.getAnnotationIndex(basicType).iterator();
}
currentIt = filter.createFilteredIterator(cas, basicType);
}
代码示例来源:origin: apache/ctakes
/**
* For correct behavior, requires types to be listed in TypePriorities so that the subiterator works as expected
*/
public static FSIterator getAnnotationsIteratorInSpan(JCas jcas, int type, int beginSpan, int endSpan)
{
Annotation ann = new Annotation(jcas, beginSpan, endSpan);
ann.addToIndexes();
AnnotationIndex<?> annIdx = jcas.getAnnotationIndex(type);
FSIterator<?> itr = annIdx.subiterator(ann);
ann.removeFromIndexes();
return itr;
}
代码示例来源:origin: org.apache.uima/textmarker-core
private void updateIterators(CAS cas, Type basicType, FilterManager filter,
AnnotationFS additionalWindow) {
if (additionalWindow != null) {
this.basicIt = cas.getAnnotationIndex(basicType).subiterator(additionalWindow);
} else {
this.basicIt = cas.getAnnotationIndex(basicType).iterator();
}
currentIt = filter.createFilteredIterator(cas, basicType);
}
代码示例来源:origin: org.apache.ctakes/ctakes-core
/**
* For correct behavior, requires types to be listed in TypePriorities so that the subiterator works as expected
*/
public static FSIterator getAnnotationsIteratorInSpan(JCas jcas, int type, int beginSpan, int endSpan)
{
Annotation ann = new Annotation(jcas, beginSpan, endSpan);
ann.addToIndexes();
AnnotationIndex<?> annIdx = jcas.getAnnotationIndex(type);
FSIterator<?> itr = annIdx.subiterator(ann);
ann.removeFromIndexes();
return itr;
}
代码示例来源:origin: org.apache.uima/uimafit-core
/**
* Convenience method to get a sub-iterator for the specified type.
*
* @param <T>
* the iteration type.
* @param container
* the containing annotation.
* @param type
* the type.
* @param ambiguous
* If set to <code>false</code>, resulting iterator will be unambiguous.
* @param strict
* Controls if annotations that overlap to the right are considered in or out.
* @return A sub-iterator.
* @see <a href="package-summary.html#SortOrder">Order of selected feature structures</a>
*/
@SuppressWarnings("unchecked")
public static <T extends AnnotationFS> Iterator<T> iterator(AnnotationFS container,
Class<T> type, boolean ambiguous, boolean strict) {
CAS cas = container.getCAS();
return ((AnnotationIndex<T>) cas.getAnnotationIndex(CasUtil.getType(cas, type))).subiterator(
container, ambiguous, strict);
}
代码示例来源:origin: org.apache.uima/ruta-core
public FSIterator<AnnotationFS> createFilteredIterator(CAS cas, Type basicType) {
if (windowAnnotation != null) {
FSIterator<AnnotationFS> windowIt = cas.getAnnotationIndex(basicType)
.subiterator(windowAnnotation);
FSIterator<AnnotationFS> iterator = cas.createFilteredIterator(windowIt,
createCurrentConstraint(false));
return iterator;
} else {
FSIterator<AnnotationFS> iterator = cas.createFilteredIterator(
cas.getAnnotationIndex(basicType).iterator(), createCurrentConstraint(false));
return iterator;
}
}
代码示例来源:origin: org.apache.uima/textmarker-core
public FSIterator<AnnotationFS> createFilteredIterator(CAS cas, Type basicType) {
if (windowAnnotation != null) {
FSIterator<AnnotationFS> windowIt = cas.getAnnotationIndex(basicType).subiterator(
windowAnnotation);
FSIterator<AnnotationFS> iterator = cas.createFilteredIterator(windowIt,
createCurrentConstraint(false));
return iterator;
} else {
FSIterator<AnnotationFS> iterator = cas.createFilteredIterator(
cas.getAnnotationIndex(basicType).iterator(), createCurrentConstraint(false));
return iterator;
}
}
代码示例来源:origin: org.apache.ctakes/ctakes-ytex-uima
private void negateAnnotations(JCas aJCas, AnnotationIndex sentenceIdx,
AnnotationIndex targetIdx, TargetAnnoFilter filter) {
FSIterator sentenceIter = sentenceIdx.iterator();
while (sentenceIter.hasNext()) {
Sentence s = (Sentence) sentenceIter.next();
FSIterator neIter = targetIdx.subiterator(s);
while (neIter.hasNext()) {
Annotation ne = (Annotation) neIter.next();
if (filter == null || filter.filter(ne))
checkNegation(aJCas, s, ne);
// checkNegation2(aJCas, s, ne);
}
}
}
代码示例来源:origin: apache/ctakes
private void negateAnnotations(JCas aJCas, AnnotationIndex sentenceIdx,
AnnotationIndex targetIdx, TargetAnnoFilter filter) {
FSIterator sentenceIter = sentenceIdx.iterator();
while (sentenceIter.hasNext()) {
Sentence s = (Sentence) sentenceIter.next();
FSIterator neIter = targetIdx.subiterator(s);
while (neIter.hasNext()) {
Annotation ne = (Annotation) neIter.next();
if (filter == null || filter.filter(ne))
checkNegation(aJCas, s, ne);
// checkNegation2(aJCas, s, ne);
}
}
}
代码示例来源:origin: de.julielab/jcore-opennlp-parser-ae
private void addHeadAnnotation(Constituent cons, Span headSpan) throws CASRuntimeException, CASException {
FSIterator tokens = cons.getCAS().getJCas().getAnnotationIndex(Token.type).subiterator(cons);
int headStart = offsetMap.getMapping(headSpan.getStart());
int headEnd = offsetMap.getMapping(headSpan.getEnd());
while (tokens.hasNext()) {
Token token = (Token) tokens.next();
if (token.getBegin() == headStart && token.getEnd() == headEnd) {
cons.setHead(token);
tokens.moveToLast();
tokens.next();
}
}
}
内容来源于网络,如有侵权,请联系作者删除!