Используйте семантическое сходство dkpro с uby

Я хочу вычислить сходство между строками с помощью сходства dkpro (https://dkpro.github.io/dkpro-similarity/), это работает так:

import org.dkpro.similarity.algorithms.api.SimilarityException;
import org.dkpro.similarity.algorithms.api.TextSimilarityMeasure;
import org.dkpro.similarity.algorithms.lsr.LexSemResourceComparator;
import org.dkpro.similarity.algorithms.lsr.gloss.GlossOverlapComparator;
import org.dkpro.similarity.algorithms.lsr.path.JiangConrathComparator;
import org.dkpro.similarity.algorithms.lsr.path.LeacockChodorowComparator;
import org.dkpro.similarity.algorithms.lsr.path.LinComparator;
import org.dkpro.similarity.algorithms.lsr.path.ResnikComparator;
import org.dkpro.similarity.algorithms.lsr.path.WuPalmerComparator;

import de.tudarmstadt.ukp.dkpro.lexsemresource.LexicalSemanticResource;
import de.tudarmstadt.ukp.dkpro.lexsemresource.core.ResourceFactory;
import de.tudarmstadt.ukp.dkpro.lexsemresource.exception.LexicalSemanticResourceException;
import de.tudarmstadt.ukp.dkpro.lexsemresource.exception.ResourceLoaderException;
import learninggoals.analysis.controller.settingtypes.SimilarityAlgorithm;



public class SemResourceComparator implements WordsComparator{
private LexicalSemanticResource resource;
private LexSemResourceComparator comparator;

//en lang
public SemResourceComparator(String resourcetype, SimilarityAlgorithm algorithm, String lang) {

        try {
            resource = ResourceFactory.getInstance().get(resourcetype, lang);
        } catch (ResourceLoaderException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
        switch(algorithm){
        /*case ESA://this is vector
            comparator = new GlossOverlapComparator(resource, false);
            break;*/
        case GLOSSOVERLAP:          

            comparator = new GlossOverlapComparator(resource, false);
            break;
        case JIANG_CONRATH:
            comparator = new JiangConrathComparator(resource, resource.getRoot());
            break;
        case LEACOCK_CHODOROW:
            comparator = new LeacockChodorowComparator(resource);
            break;
        case LIN:
            comparator = new LinComparator(resource, resource.getRoot());
            break;
        case RESNIK:
            comparator = new ResnikComparator(resource, resource.getRoot());
            break;
        case WUPALMER:
            comparator = new WuPalmerComparator(resource, resource.getRoot());
            break;
        default:
            break;

        }
        } catch (LexicalSemanticResourceException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}

@Override
public double compareWords(String w1, String w2) {

   try {
    return comparator.getSimilarity(resource.getEntity(w1), resource.getEntity(w2));
} catch (SimilarityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (LexicalSemanticResourceException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
   return 0;
}

я использую класс следующим образом:

double intermscore = comparator.compareWords(word1, word2);

Я использую LexicalSemanticResource в качестве ресурса для сравнения, это может быть wordnet, wikipedia, germanet и т. д. Теперь я заметил, что все ресурсы, которые мне нужны, находятся в uby (https://www.ukp.tu-darmstadt.de/data/lexical-resources/uby/, https://github.com/dkpro/dkpro-uby/blob/master/de.tudarmstadt.ukp.uby.lmf.api-asl/src/main/java/de/tudarmstadt/ukp/lmf/api/Uby.java).

Мой вопрос: могу ли я заменить ресурс ресурсом от uby, чтобы мне не приходилось снова включать новый ресурс каждый раз, когда он мне нужен? поэтому вместо ResourceFactory.getInstance().get("wordnet") я хочу использовать ресурс uby, поэтому что-то вроде new Uby().getLexicalResource("wordnet") - однако лексический ресурс от uby не совпадает с LexicalSemanticResource i используйте сейчас для семантического сравнения. Итак: вместо использования, например. LexicalSemanticResource wordnet, я хочу использовать wordnet от uby для компараторов. Есть ли способ сделать это?


person Karpfen93    schedule 03.03.2017    source источник


Ответы (1)


В настоящее время нет возможности сделать это. Ресурсы Uby и ресурсы LSR несовместимы.

Были планы по переходу, но вопрос давно открыт: https://github.com/dkpro/dkpro-similarity/issues/39

person Torsten Zesch    schedule 06.07.2017