Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相同的python代码在FLASK和CLI脚本中的工作方式不同_Python_Flask_Rdflib - Fatal编程技术网

相同的python代码在FLASK和CLI脚本中的工作方式不同

相同的python代码在FLASK和CLI脚本中的工作方式不同,python,flask,rdflib,Python,Flask,Rdflib,我用python脚本运行代码,用FlaskAPI运行代码。问题是将rdf三元组添加到rdflib图中。如果我在解释器解析的命令行脚本中运行它,它就会工作。如果我在FlaskAPI中运行相同的代码,它会忽略一些逻辑。代码是: 烧瓶 class Helper(object): def get_fred_offset(self, s): return s.split('_')[1] def get_denoted_offset(self, g): qu

我用python脚本运行代码,用FlaskAPI运行代码。问题是将rdf三元组添加到rdflib图中。如果我在解释器解析的命令行脚本中运行它,它就会工作。如果我在FlaskAPI中运行相同的代码,它会忽略一些逻辑。代码是:

烧瓶

class Helper(object):
    def get_fred_offset(self, s):
        return s.split('_')[1]

    def get_denoted_offset(self, g):
        query = """ SELECT ?denoted ?offset WHERE { ?offset a ns2:PointerRange ; ns6:denotes ?denoted . } """
        qres = g.query(query)
        res = []
        for row in qres:
            res.append((row[0], self.get_fred_offset(row[1].strip()))) # denoted, startOffset
        return res

    def get_span_boundaries(self, g):
        query = " SELECT  ?textspan ?start ?end WHERE { ?textspan rst:startOffset ?start ; rst:endOffset ?end . }"
        qres = g.query(query)
        res = []
        for row in qres:
            res.append((row[0], row[1].strip(), row[2].strip()))
        return res

    def bridge(self, g):
        denoteds = self.get_denoted_offset(g)
        spans = self.get_span_boundaries(g)
        for d in denoteds:
            for s in spans:
                if s[1] <= d[1] < s[2]:
                    g.add( (d[0] , URIRef('belongsTo'), s[0]))
        return g
Python.py脚本

@app.route("/bridge", methods=["POST"])
@cross_origin()
def merge():

    fh = filehandler.open_file(TMP_FOLDER, 'bridge_graph', m='r')
    data = ""
    g = Graph()
    for line in fh:
        data += line
    g.parse(data = data , format = 'n3' )
    wtf = Helper()
    wtf.bridge(g)

    return (g.serialize(format= 'n3'))
g = Graph()
fh = open("bridge_graph", 'r')
data = ""
for line in fh:
    data += line
g.parse(data = data , format = 'n3' )


def get_f_offset(s):
    return s.split('_')[1]

def get_denoted_offset(g):
    query = """ SELECT ?denoted ?offset WHERE { ?offset a ns2:PointerRange ; ns6:denotes ?denoted . } """
    qres = g.query(query)
    res = []
    for row in qres:
        res.append((row[0], get_f_offset(row[1].strip()))) # denoted, startOffset
    return res

def get_span_boundaries(g):
    query = " SELECT  ?textspan ?start ?end WHERE { ?textspan rst:startOffset ?start ; rst:endOffset ?end . FILTER (?start <= 5 && 5 < ?end) }"
    qres = g.query(query)
    res = []
    for row in qres:
        res.append((row[0], row[1].strip(), row[2].strip()))
    return res

def bridge(g):
    denoteds = get_denoted_offset(g)
    spans = get_span_boundaries(g)
    for d in denoteds:
        for s in spans:
            if s[1] <= d[1] < s[2]:
                print(s[1], d[1], s[2]) 
                print(d[0], 'belongsTo', s[0])
                g.add( (d[0] , URIRef('belongsTo'), s[0])) <=============== THISLINE

bridge(g)

print g.serialize(format='n3')
g=Graph()
fh=开放(“桥图”,“r”)
data=“”
对于fh中的线路:
数据+=行
g、 解析(数据=数据,格式='n3')
def get_f_偏移量:
返回s.split(“”“)[1]
def get_表示为_偏移量(g):
query=“”选择表示的偏移量,其中{偏移量a ns2:PointerRange;ns6:表示表示的。}”“”
qres=g.query(查询)
res=[]
对于QRE中的行:
res.append((第[0]行),get_f_offset(第[1]行)。strip())#表示,startOffset
返回res
def get_span_边界(g):

query=“SELECT?textspan?start?end WHERE{?textspan rst:startOffset?start;rst:endOffset?end.FILTER(?start在Victor的评论之后,rdflib可能会在7月之前完全放弃对Python 2的支持


另外,我建议根据Helper()类为脚本使用完全相同的代码,因此在
Helper()中添加一个
if\uuu\u name\uuu=='\uuu\u main:
类文件,以便您可以直接使用它,并测试您看到的问题是否与Flask实现有关,而不是与不同的rdflib代码有关。

问题与您必须指定比较文本的数据类型有关。它不是比较整数或通常是数字的rdflib SPARQL解析器,而是比较字符串,产生意外行为。我相信现在这不是rdflib问题,而是SPARQL问题,需要严格的类型声明。添加:
g.query(query,initBindings{?start:Literal^^xsd:Integer}
解决了这个问题!

如果您使用的是python2,则应转到python3。在get\u span\u边界中,您不使用相同的查询。