2017-03-03 2 views
1

동일한 문자열이지만 다른 언어 코드 ("xx"@en 및 "xx"@eng - wordnet)를 사용하여 두 개의 그래프로 항목을 검색해야합니다. 분명히 "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에 세배 짧은의 수동으로 모든 @eng을 변경합니다.

모든 솔루션? 감사합니다.

답변

1

eneng에 대해서만 필터링하여 검색 공간을 줄일 수 있지만 언어로 레이블 된 문자열의 문자열 부분을 비교하는 유일한 방법은 문자열로 변환하는 것입니다.

e.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