2017-03-03 29 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

相關問題