2015-06-17 47 views
2

我想查詢維基與SPARQL讓一切在名詞一定語言(例如德國) 和輸出的約定取得某種語言的所有名詞維基:如何使用SPARQL

  • 名詞
  • 語法性別(屬)的字符串:男性,女性,中性

我使用的SPARQL-Endpoi nt:http://wiktionary.dbpedia.org/sparql我找到了一個例子,但我沒有弄清楚 如何調整它以獲得我想要的信息。

PREFIX terms:<http://wiktionary.dbpedia.org/terms/> 
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> 
PREFIX dc:<http://purl.org/dc/elements/1.1/> 
SELECT ?sword ?slang ?spos ?ssense ?twordRes ?tword ?tlang 
FROM <http://wiktionary.dbpedia.org> 
WHERE { 
    ?swordRes terms:hasTranslation ?twordRes . 
    ?swordRes rdfs:label ?sword . 
    ?swordRes dc:language ?slang . 
    ?swordRes terms:hasPoS ?spos . 
    OPTIONAL { ?swordRes terms:hasMeaning ?ssense . } 
    OPTIONAL { 
      ?twordBaseRes terms:hasLangUsage ?twordRes . 
      ?twordBaseRes rdfs:label ?tword . 
    } 
    OPTIONAL { ?twordRes dc:language ?tlang . } 
} 

回答

6

首先,你要選擇所有名詞的名詞義。正如您在示例查詢的查詢結果中看到的那樣,此信息由terms:hasPoS關係捕獲。因此,具體查詢所有的名詞,我們可以這樣做:

PREFIX terms: <http://wiktionary.dbpedia.org/terms/> 
SELECT ?term 
WHERE { 
    ?term terms:hasPoS terms:Noun . 
} 
LIMIT 100 

Result

你想接下來的事情只有在一定的語言的名詞。這似乎是由dc:language關係覆蓋的,所以我們在該關係上添加了一個附加約束。比方說,我們希望所有英文名詞:

PREFIX terms: <http://wiktionary.dbpedia.org/terms/> 
PREFIX dc: <http://purl.org/dc/elements/1.1/> 

SELECT ?term 
WHERE { 
    ?term terms:hasPoS terms:Noun ; 
      dc:language terms:English . 
} 
LIMIT 100 

Result

所以,我們現在選擇你想要什麼,但我們還沒有你想要的格式輸出,如上面的查詢剛返回術語意義的標識符,而不是實際術語的字符串值。我們可以從例如查詢的輸出看,該字符串值由rdfs:label財產捕獲,因此我們補充說:

PREFIX terms: <http://wiktionary.dbpedia.org/terms/> 
PREFIX dc: <http://purl.org/dc/elements/1.1/> 
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> 

SELECT ?term ?termLabel 
WHERE { 
    ?term terms:hasPoS terms:Noun ; 
      dc:language terms:English ; 
      rdfs:label ?termLabel . 
} 
LIMIT 100 

Result

如果你現在看看這個查詢的結果,你會看到這種語言出現了一些奇怪的現象:儘管我們認爲我們選擇了英語,但我們也得到了帶有不同語言標籤的標籤(例如'@ru')。要刪除這些結果,我們可以進一步限制我們的查詢,並說,我們只希望背標英文:

PREFIX terms: <http://wiktionary.dbpedia.org/terms/> 
PREFIX dc: <http://purl.org/dc/elements/1.1/> 
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> 

SELECT ?term ?termLabel 
WHERE { 
    ?term terms:hasPoS terms:Noun ; 
      dc:language terms:English ; 
      rdfs:label ?termLabel . 
    FILTER(langMatches(lang(?termLabel), "en")) 
} 
LIMIT 100 

Result

最後,性別/屬。在這裏我不太確定。查看wiktionary數據中的一些示例資源(例如entry for dog),我會說這些信息實際上並不存在於數據中。

3

Jeen的答案是一個很好的開始。這是獲取性別的選項。

由於沒有語法性別,因此英語不能很好地作爲示例語言。讓我們以德國:

PREFIX terms: <http://wiktionary.dbpedia.org/terms/> 
PREFIX dc: <http://purl.org/dc/elements/1.1/> 
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> 

SELECT ?term ?termLabel 
WHERE { 
    ?term terms:hasPoS terms:Noun ; 
      dc:language terms:German ; 
      rdfs:label ?termLabel . 
    FILTER(langMatches(lang(?termLabel), "de")) 
} 
LIMIT 100 

Result

(這將是很好的過濾許多確切的重複(我不知道怎麼了,爲什麼他們在那裏)。)

服用德語詞語「Eierkopf」代替英文「dog」: 我們現在可以跟隨術語鏈接到http://wiktionary.dbpedia.org/resource/Eierkopf-German-Noun,我們可以在這裏看到德語版的維基詞典http://de.wiktionary.org/wiki/Eierkopf的鏈接(我們也可以猜出該URL,而無需從wiktionary.dbpedia.org第一)。

這裏屬可以從文本中提取:「Substantiv,M」(M爲男性)

爲德語的選項有:

<em title="Genus: Maskulinum (grammatikalisches Geschlecht: männlich)">m</em> 
<em title="Genus: Femininum (grammatikal. Geschlecht: weiblich)">f</em> 
<em title="Genus: Neutrum (grammatikal. Geschlecht: sächlich)">n</em> 

如果名詞已經基於不同性別地區/方言,官方性別位於上面的HTML中,並在下面顯示評論。例如:

https://de.wiktionary.org/wiki/Butter

因此,除了查詢SPARQL,它也需要每個字1-2網頁請求,以及一些HTML內容提取。