gpt4 book ai didi

python - 从 dbpedia 检索数据时出错

转载 作者:行者123 更新时间:2023-11-30 23:41:08 26 4
gpt4 key购买 nike

我尝试从 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”中为“é”使用不同的字符,但我不知道是哪个。谢谢!

最佳答案

第一个问题是 SPARQLWrapper 似乎期望其查询采用 unicode,但您向它传递了 utf-8 编码的字符串 - 这就是为什么您会得到一个UnicodeDecoreError。相反,您应该通过解码 utf-8 字符串来向其传递一个 unicode 对象

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

或者使用 unicode 文字:

unicode_obj = u'Hello World'

向其传递 unicode 对象可以避免 UnicodeDecodeError,但不会产生任何结果。因此,dbpedia API 似乎希望包含非 ASCII 字符的 URL 进行百分比编码。因此,您需要预先使用 urllib.quote_plus 对 URL 进行编码:

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

通过这两项更改,您的代码可能如下所示:

#!/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"]

关于python - 从 dbpedia 检索数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12237718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com