2017-03-03 15 views
1

同じ文字列であるが、異なる言語コード(wordnetの "xx" @enと "xx" @eng)を持つ2つのグラフで項目を検索する必要があります。明らかに "xx" @enは "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 . 

しかし、私はどのように見ることができない - ショートの手動@enにWordNetのトリプル内のすべての@engを変更する - 私はむしろないと思われます。

どのような解決策ですか? ありがとうございます!

答えて

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-1(2文字)ではなく、ISO-639-2/T(3文字)です。これはRDFでより一般的です。これらの間で変換する機能があると便利です! – user855443

関連する問題