0

Je veux calculer la similarité entre les chaînes avec dkpro similitude (https://dkpro.github.io/dkpro-similarity/), cela fonctionne, comme ceci:utilisation dkpro similarité sémantique avec uby

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; 
} 

i utiliser la classe comme ceci:

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

J'utilise LexicalSemanticResource comme ressource pour comparer, il peut être wordnet, wikipedia, germanet etc. Maintenant, j'ai remarqué que toutes les ressources dont j'ai besoin sont en 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).

Ma question est la suivante: est-ce que je peux remplacer la ressource par une ressource d'uby pour que je n'aie plus besoin d'inclure une nouvelle ressource chaque fois que j'en ai besoin? donc à la place de ResourceFactory.getInstance(). get ("wordnet"), je veux utiliser la ressource uby, donc sth comme new Uby(). getLexicalResource ("wordnet") - cependant lexicalresource de uby n'est pas la même chose que LexicalSemanticResource i utiliser maintenant pour la comparaison sémantique. Donc: Au lieu d'utiliser par ex. Wordnet LexicalSemanticResource, je veux utiliser wordnet d'uby pour les comparateurs. Y a-t-il un moyen de faire cela?

Répondre

0

Il n'existe actuellement aucun moyen de le faire. Les ressources Uby et les ressources LSR ne sont pas compatibles.

Il y avait des plans pour passer, mais la question a été ouverte pendant un certain temps: https://github.com/dkpro/dkpro-similarity/issues/39