3

名前に基づいてプログラミング言語を照会する一貫した方法はないようです。例:

http://dbpedia.org/page/D_(programming_language)
rdfs:label "D (programming language)"@en
dbpprop:name "D programming language"
owl:sameAs freebase:"D (programming language)"
foaf:name "D programming language"

対。

http://dbpedia.org/page/C++
rdfs:label "C++"@en
dbpprop:name "C++"
owl:samwAs freebase:"C++"
foaf:name "C++"

「プログラミング言語」、「(プログラミング言語)」、「programming_language」、「(programming_language」、または「」がdbpediaのプログラミング言語の名前の一部であるかどうかについての標準的な規則がないため、一貫してどのようにすればよいかわかりません。名前で検索します。

「D」の場合はhttp://dbpedia.org/page/D_(programming_language)、「C++ 」の場合はhttp://dbpedia.org/page/C++を返すある種のSPARQLクエリを作成したいのですが、これを行う方法がわかりません。

プログラミング言語のさまざまなトリプルの少なくとも1つが一貫した命名規則を使用していない限り、最初にname + "(programming_language)"に対してクエリを実行し、name + "(programming language"、name +結果が見つからない場合の「プログラミング言語」ですが、もっと堅牢な方法が欲しいです。

4

2 に答える 2

4

もちろん、基本的な部分文字列の一致または正規表現を使用して一致させることもできます。たとえば、「C++」の一致を見つけるには次のようにします。

SELECT DISTINCT ?pl ?label
WHERE { 
    ?pl a dbpedia-owl:ProgrammingLanguage ;
        rdfs:label ?label .
    FILTER(langMatches(lang(?label), "en"))
    FILTER(regex(str(?label), "C\\+\\+")) 
}

もちろん、上記は「D」のようなプログラミング言語名では問題になります。これは、いくつかの一致(「D」、「Dylan」、「MAD」など)が返されるためです。そのような場合は、結果の巧妙な後処理を実行することをお勧めします。たとえば、返されたラベルをトークン化し、入力文字列がスタンドアロンの単語として出現するかどうかを確認します。

SPARQLでの正規表現のマッチングは(評価時間の点で)コストがかかることで有名ですが、特定のカテゴリへの型制約と組み合わせると、DBPediaエンドポイントはこの種のクエリを適切に処理できるはずです。

于 2012-10-26T23:35:59.720 に答える
0

私が使用します

SELECT distinct ?pl ?label
WHERE { 
  ?pl a dbpedia-owl:ProgrammingLanguage ;
      rdfs:label ?label.
  ?label bif:contains "'C++'" .
  filter (str (?label) like '%C++%')
  filter (lang(?label)="en")
}

?label bif:contains "'C++'"++はノイズとして扱われ、実際の検索パターンから除外されるため、ある程度、より具体的にはC ++、C、Objective-Cなどにフィルタリングされます。その後、Cがあり、2つのプラスが必要なのでfilter (str (?label) like '%C++%')、正規表現よりも速くチェックします。好みに応じて、ラングチェックを追加filter (lang(?label)="en")するかfilter (langmatches(lang(?label),"en"))、まったくチェックしないか。

于 2012-10-29T04:04:00.233 に答える