2017-03-03 64 views
1

我需要使用相同的字符串,但不同的语言代码(“xx”和“xx”@eng - 来自wordnet)在两个图中搜索项目。显然 “xx”不等于“xx”@eng。如何搜索具有不同语言代码的字符串

它可以与进行(前缀NLP适当定义的):

select * where { 
    ?a nlp:lemma ?as . 
    ?b rdfs:label ?bs . 
    filter (str(?as)=str(?bs)) . 
    # more code using ?a and ?b 
} 

然而,此查询时间过长,是浪费的。它应该可以做这样的事情:

?a nlp:lemma ?s . 
?b rdfs:label ?s . 

,但我看不出如何 - 短的手动更改所有@eng在共发现了三倍,达到@en - 我宁愿不做。

任何解决方案? 谢谢!

回答

1

您可以通过仅针对eneng进行过滤来减少搜索空间,但比较带语言标记的字符串的字符串部分的唯一方法是将它们转换为字符串。

I.e. - 它减少了查询处理时间的4倍

select * where { 
    ?a nlp:lemma ?as . 
    ?b rdfs:label ?bs . 
    filter (lang(?as) = "en" || lang(?as) = "eng") 
    filter (str(?as)=str(?bs)) . 
    # more code using ?a and ?b 
} 
+0

谢谢你:如果有超过eneng其他语言标记的字符串下面可以更高效! – user855443

+0

我最后把'@ en'和'@ eng'文字加到了我制作的三元组中。现在它确实运行得很快。我不明白为什么wordnet-princeton使用不同的语言代码。 – user855443

+1

代码为ISO-639-2/T(3个字符),代替RDF中更常见的ISO-639-1(2个字符)。有一个函数在这些之间进行转换会很有用! – user855443

相关问题