:- module(isub_match, [isub_match/3]). :- use_module(library(option)). :- use_module(library(semweb/rdf11)). :- use_module(library(semweb/rdf_label)). :- use_module(library(isub)). :- use_module(string_match_util). isub_match(align(Source, Target, Prov0), align(Source, Target, [Prov|Prov0]), Options) :- rdf_equal(skos:definition, DefaultProp), option(threshold(Threshold), Options, 0.0), option(sourcelabel(MatchPropS), Options, DefaultProp), option(targetlabel(MatchPropT), Options, DefaultProp), option(matchacross_lang(MatchAcross), Options, true), option(source_language(Lang), Options, 'any'), ( Lang == 'any' -> SourceLang = _ ; SourceLang = Lang ), % If we cannot match across languages, set target language to source language ( MatchAcross == false -> TargetLang = SourceLang ; true ), skos_has(Source, MatchPropS, SourceLit@SourceLang, SourceProp, Options), skos_has(Target, MatchPropT, TargetLit@TargetLang, TargetProp, Options), Source \== Target, literal_text(SourceLit, SourceTxt), literal_text(TargetLit, TargetTxt), isub(SourceTxt, TargetTxt, Similarity, Options), Similarity > Threshold, Prov = [method(isub), match(Similarity), graph([rdf(Source, SourceProp, SourceLit), rdf(Target, TargetProp, TargetLit)]) ].