There is a fundamental issue here, and the mapper you describe addresses
the symptom, but not the root problem. The problem is that everyone
creates their own schema, ontology, or type system, and is unwilling to
learn or use other type systems until they have been forced to (e.g. by
a standardization process). So, it is inevitable that many different
type systems will be created -- hampering the interoperability of
components. So, a mapper is an essential component that everyone will
continue to re-invent. UIMA definitely needs such a tool.
An alternative way of using a mapper is to consider it a wrapper for a
component. A wrapper would allow a pipeline to be constructed in a
single type system using heterogeneous components. This would be a
useful way of looking at the mapping functionality when adding a limited
number of external components to an existing pipeline. The mapper as
you described would be more useful in an ad hoc construction of
pipelines from pre-existing components. I think both are valid use cases.
Dave
Michael Baessler wrote:
Is there some interest/need in the UIMA community to have an annotation mapping
annotator?
I think some of you might know the issue that different UIMA components work on
different
annotations and type systems. A mapping annotator component could be used to
translate the
annotations between these different requirements. E.g. we have a tokenizer
component at the
beginning of the analysis flow that produces example.Token annotations with a
POS feature set. Later
in the flow have a component that needs that information, but expects an
example.Noun annotation.
Unfortunately there is no way to configure both components to produce or read
different annotation
types, so in that case we need a mapping.
Tokenizer creates:
example.Token (2,8)
POS = NN
Mapping annotator translates this to:
example.Noun (2,8)
posTag = NN
If there is a need for such a component we can reuse some of the code developed
for the UIMA
SimpleServer. The SimpleServer has a mapping syntax with additional filtering
as shown below.
The mapping for the example above looks like:
<type name="example.Token" outputTag="example.Noun">
<filters>
<filter featurePath="POS" operator="=" value="NN" />
</filters>
<outputs>
<output featurePath="pos" outputAttribute="posTag"/>
</outputs>
</type>
Any feedback/comments for such a component?
Are there any implementations available?
-- Michael