1

dbpedia からデータを取得しようとしましたが、コードを実行するたびにエラーが発生します。

Python のコードは次のとおりです。

#!/usr/bin/python
# -*- coding: utf-8 -*-

from SPARQLWrapper import SPARQLWrapper, JSON

sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?subject
    WHERE { <http://dbpedia.org/resource/Musée_du_Louvre> dcterms:subject ?subject }
""")

# JSON example
print '\n\n*** JSON Example'
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
    print result["subject"]["value"]

「Musée_du_Louvre」の「é」には別の文字を使用する必要があると思いますが、どれかわかりません。どうも!

4

1 に答える 1

4

最初の問題はSPARQLWrapper、クエリが Unicode であることを期待しているようですが、utf-8 でエンコードされた文字列を渡していることですUnicodeDecoreError。代わりに、utf-8 文字列をデコードして、Unicode オブジェクトを渡す必要があります。

unicode_obj = some_utf8_string.decode('utf-8')

またはユニコードリテラルを使用して:

unicode_obj = u'Hello World'

Unicode オブジェクトを渡すと、それを回避UnicodeDecodeErrorできますが、結果は得られません。したがって、dbpedia API は、ASCII 以外の文字を含む URL がパーセントでエンコードされていることを想定しているようです。したがって、次を使用して事前に URL をエンコードする必要がありますurllib.quote_plus

from urllib import quote_plus
encoded_url = quote_plus(url, safe='/:')

これら 2 つの変更により、コードは次のようになります。

#!/usr/bin/python
# -*- coding: utf-8 -*-

from SPARQLWrapper import SPARQLWrapper, JSON
from urllib import quote_plus

url = 'http://dbpedia.org/resource/Musée_du_Louvre'
encoded_url = quote_plus(url, safe='/:')

sparql = SPARQLWrapper("http://dbpedia.org/sparql")

query = u"""
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?subject
    WHERE { <%s> dcterms:subject ?subject }
""" % encoded_url

sparql.setQuery(query)

# JSON example
print '\n\n*** JSON Example'
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
    print result["subject"]["value"]
于 2012-09-02T16:50:34.603 に答える