我使用SPARQLWrapper如下方法运行我的 Wikidata 查询。
SPARQLWrapper
from SPARQLWrapper import SPARQLWrapper, JSON import pandas as pd sparql = SPARQLWrapper("https://query.wikidata.org/sparql") sparql.setQuery(""" SELECT DISTINCT ?item { VALUES ?searchTerm { "word2vec" "fasttext" "natural language processing" "deep learning" "support vector machine" } SERVICE wikibase:mwapi { bd:serviceParam wikibase:api "EntitySearch". bd:serviceParam wikibase:endpoint "www.wikidata.org". bd:serviceParam wikibase:limit 3 . bd:serviceParam mwapi:search ?searchTerm. bd:serviceParam mwapi:language "en". ?item wikibase:apiOutputItem mwapi:item. ?num wikibase:apiOrdinal true. } ?item (wdt:P279|wdt:P31) ?type } ORDER BY ?searchTerm ?num """) sparql.setReturnFormat(JSON) results = sparql.query().convert() results_df = pd.io.json.json_normalize(results['results']['bindings']) print(results_df)
我想将单词列表"word2vec" "fasttext" "natural language processing" "deep learning" "support vector machine"以 python 列表的形式给出。即如下所示。
"word2vec" "fasttext" "natural language processing" "deep learning" "support vector machine"
mylist = ["word2vec", "fasttext", "natural language processing", "deep learning", "support vector machine"]
在这种情况下,我如何将其mylist作为参数插入到我上面提到的现有 wikidata 查询中。
mylist
我尝试按如下方式使用 f 字符串。但是,它对我来说不起作用。
sparql.setQuery(f" SELECT DISTINCT ?item { VALUES ?searchTerm { {mylist} } SERVICE wikibase:mwapi { bd:serviceParam wikibase:api "EntitySearch". bd:serviceParam wikibase:endpoint "www.wikidata.org". bd:serviceParam wikibase:limit 3 . bd:serviceParam mwapi:search ?searchTerm. bd:serviceParam mwapi:language "en". ?item wikibase:apiOutputItem mwapi:item. ?num wikibase:apiOrdinal true. } ?item (wdt:P279|wdt:P31) ?type } ORDER BY ?searchTerm ?num ")
如果需要,我很乐意提供更多详细信息。
在你提供的 PHP 和 Python 代码中,PHP 使用了 gzcompress() 函数来压缩字符串,而 Python 试图用 zlib.decompress() 解压这个字符串。不过,问题出在 PHP 的 gzcompress() 返回的是一个字符串,而 zlib.decompress() 需要的是字节对象。为了解决这个问题,你只需确保在 Python 中传递的压缩数据是字节形式,而不是字符串。
gzcompress()
zlib.decompress()
确保传递给 Python 的数据是字节对象 在 PHP 中,gzcompress() 返回的是一个字节串,通常会被处理为字符串,但它实际上包含了字节数据。因此,在将其发送到 Python 服务器之前,你需要将 PHP 中的压缩数据以字节形式正确地发送。
PHP 中的修改 在 PHP 中,确保 gzcompress() 的返回值作为字节流发送到 Python 服务器(如果它是通过 HTTP 请求传递的,使用合适的编码,如 Base64 编码进行传输)。
修改 PHP 代码如下:
php $text = gzcompress($text); // 如果通过 HTTP 传输,使用 Base64 编码确保安全传输 $encoded_text = base64_encode($text); // send $encoded_text to the Python server
修改 Python 代码如下:
```python import zlib import base64
# 获取传递过来的 Base64 编码的压缩数据 text = request.POST.get(‘text’, ‘’)
# 解码 Base64 字符串,得到压缩的字节数据 compressed_text = base64.b64decode(text)
# 解压缩字节数据 new_text = zlib.decompress(compressed_text)
# 现在 new_text 就是解压后的原始数据 ```
base64_encode()
base64.b64decode()
通过对压缩数据进行 Base64 编码和解码,可以确保数据在网络上传输时不受字符集和协议限制的影响。在 PHP 中进行编码,在 Python 中解码,然后解压缩,应该就能正常处理跨语言的压缩解压操作。