-
Notifications
You must be signed in to change notification settings - Fork 36
Type Mapping
Das Mapping wird verwendet, um zum Beispiel die verschiedenen POS Typen den passenden POS Klassen zuzuweisen. Da jedes Tool verschiedene Bezeichnungen für die POS Typen haben kann, müssen wir eine Map erstellen. Diese ist wie folgt strukturiert. Links schreibt man die Bezeichnung des POS Tags vom Tool. Dann kommt ein Gleichheitszeichen gefolgt von der Bezeichnung der Klasse auf die verwiesen werden soll. Auserdem benötigt jede Map eine Catch-all rule.
# Catch-all rule
*=de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.O
# N common noun
N=de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.N
# R proper noun
R=de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.NP
Um im Programmcode zu mappen, benötigen wir den Speicherort der Map. Dazu nutzen wir die ComponentParameters, mit denen wir beim Testen den Pfad übergeben können. Für einen POS-Taggger müssen dafür folgende Variablen der Klasse hinzugefügt werden.
public static final String PARAM_MODEL_LOCATION = ComponentParameters.PARAM_MODEL_LOCATION;
@ConfigurationParameter(name = PARAM_MODEL_LOCATION, mandatory = false)
protected String modelLocation;
public static final String PARAM_POS_MAPPING_LOCATION = ComponentParameters.PARAM_POS_MAPPING_LOCATION;
@ConfigurationParameter(name = PARAM_POS_MAPPING_LOCATION, mandatory = false)
protected String posMappingLocation;Um den MappingProvider zu initialisieren muss noch folgende Funktion der Klasse hinzugefügt werden. Entsprechende Pfade müssen angepasst werden. Außerdem muss eine .model Datei erstellt werden. Inhalt braucht diese Datei nicht. Die modelLocation muss den Pfad zu dieser Datei beinhalten.
@Override
public void initialize(UimaContext aContext) throws ResourceInitializationException{
super.initialize(aContext);
modelProvider = new CasConfigurableProviderBase<File>(){
{
setContextObject(OpenerProjectPOSTagger.this);
setDefault(ARTIFACT_ID, "${groupId}.OpenerProject-model-tagger-${language}-${variant}");
setDefault(LOCATION, "classpath:org/hucompute/textimager/uima/OpenerProject/lib/tagger-${variant}.model");
setDefault(VARIANT, "default");
setOverride(LOCATION, modelLocation);
setOverride(LANGUAGE, language);
setOverride(VARIANT, variant);
}
@Override
protected File produceResource(URL aUrl) throws IOException {
return ResourceUtils.getUrlAsFile(aUrl, true);
}
};
if(posMappingLocation == null)
posMappingLocation="classpath:/org/hucompute/textimager/uima/OpenerProject/lib/pos-default.map";
posMappingProvider = MappingProviderFactory.createPosMappingProvider(posMappingLocation, language, modelProvider);
}Der process Funktion muss nun folgender Code hinzugefügt werden.
CAS cas = aJCas.getCas();
modelProvider.configure(cas);
posMappingProvider.configure(cas);Um nun auf die POS Klassen zu Mappen.
String tag = term.getPos();
Type posTag = posMappingProvider.getTagType(tag);
POS posAnno = (POS) cas.createAnnotation(posTag, begin, end);
posAnno.setPosValue(tag);
posAnno.addToIndexes();Um nun beim Testen auf die Map zu verweisen, muss man beim Hinzufügen zum builder den Pfad zur Map mit angeben.
builder.add(createEngineDescription(
OpenerProjectPOSTagger.class,
OpenerProjectPOSTagger.PARAM_POS_MAPPING_LOCATION,"src/main/resources/org/hucompute/textimager/uima/OpenerProject/lib/pos-default.map"
));Test