1

我正在编写一个应用程序,其目的是从日志数据集中创建一个图表。数据集是一个 xml 文件,它被解析以提取叶数据。使用这个列表,我编写了一个 py2neo 脚本来创建图表。该文件附加到此消息中。处理脚本时引发异常:

调试的程序引发异常未处理 TypeError "(1676 {"titulo":"reconhecimento e agrupamento de objetos de aprendizagem semelhantes"})" 文件:/usr/lib/python2.7/site-packages/py2neo-1.5.1- py2.7.egg/py2neo/neo4j.py,行:472

我不知道如何处理这个。我认为代码在语法上是正确的......但是......

我不知道我是否应该在这里发布整个代码,所以代码在:https ://gist.github.com/herlimenezes/6867518

代码如下: +++++++++++++++++++++++++++++++++++++ ' #!/usr/bin/env python #

from py2neo import neo4j, cypher
from py2neo import node,  rel

# calls database service of Neo4j
#
graph_db = neo4j.GraphDatabaseService("DEFAULT_DOMAIN")
#
# following nigel small suggestion in http://stackoverflow.com
#
titulo_index = graph_db.get_or_create_index(neo4j.Node, "titulo")
autores_index = graph_db.get_or_create_index(neo4j.Node, "autores")
keyword_index = graph_db.get_or_create_index(neo4j.Node,  "keywords")
dataPub_index = graph_db.get_or_create_index(neo4j.Node, "data")
#
# to begin, database clear...

graph_db.clear()    # not sure if this really works...let's check...
#
# the big list, next version this is supposed to be read from a file...
#
listaBase = [['2007-12-18'], ['RECONHECIMENTO E AGRUPAMENTO DE OBJETOS DE APRENDIZAGEM SEMELHANTES'], ['Raphael Ghelman', 'SWMS', 'MHLB', 'RNM'], ['Objetos de Aprendizagem', u'Personaliza\xe7\xe3o', u'Perfil do Usu\xe1rio', u'Padr\xf5es de Metadados', u'Vers\xf5es de Objetos de Aprendizagem', 'Agrupamento de Objetos Similares'], ['2007-12-18'], [u'LOCPN: REDES DE PETRI COLORIDAS NA PRODU\xc7\xc3O DE OBJETOS DE APRENDIZAGEM'], [u'Maria de F\xe1tima Costa de Souza', 'Danielo G. Gomes', 'GCB', 'CTS', u'Jos\xe9 ACCF', 'MCP', 'RMCA'], ['Objetos de Aprendizagem', 'Modelo de Processo', 'Redes de Petri Colorida', u'Especifica\xe7\xe3o formal'], ['2007-12-18'], [u'COMPUTA\xc7\xc3O M\xd3VEL E UB\xcdQUA NO CONTEXTO DE UMA GRADUA\xc7\xc3O DE REFER\xcaNCIA'], ['JB', 'RH', 'SR', u'S\xe9rgio CCSPinto', u'D\xe9bora NFB'], [u'Computa\xe7\xe3o M\xf3vel e Ub\xedqua', u'Gradua\xe7\xe3o de Refer\xeancia', u' Educa\xe7\xe3o Ub\xedqua']]
#
pedacos = [listaBase[i:i+4] for i in range(0, len(listaBase), 4)] # pedacos = chunks
# 
# lists to collect indexed nodes: is it really useful???
# let's think about it when optimizing code...
dataPub_nodes = []
titulo_nodes = []
autores_nodes = []
keyword_nodes = []
#
# 
for i in range(0, len(pedacos)):
# fill dataPub_nodes and titulo_nodes with content.

#dataPub_nodes.append(dataPub_index.get_or_create("data", pedacos[i][0], {"data":pedacos[i][0]}))   # Publication date nodes...
dataPub_nodes.append(dataPub_index.get_or_create("data", str(pedacos[i][0]).strip('[]'), {"data":str(pedacos[i][0]).strip('[]')}))
# ------------------------------- Exception raised here...     --------------------------------
# The debugged program raised the exception unhandled TypeError
#"(1649 {"titulo":["RECONHECIMENTO E AGRUPAMENTO DE OBJETOS DE APRENDIZAGEM SEMELHANTES"]})"
#File: /usr/lib/python2.7/site-packages/py2neo-1.5.1-py2.7.egg/py2neo/neo4j.py, Line: 472
# ------------------------------  What happened??? ----------------------------------------

titulo_nodes.append(titulo_index.get_or_create("titulo", str(pedacos[i][1]).strip('[]'), {"titulo":str(pedacos[i][1]).strip('[]')}))    # title node...

# creates relationship publicacao
publicacao = graph_db.get_or_create_relationships(titulo_nodes[i], "publicado_em", dataPub_nodes[i])

# now processing autores sublist and collecting in autores_nodes
#
for j in range(0,  len(pedacos[i][2])):
    # fill autores_nodes list
    autores_nodes.append(autores_index.get_or_create("autor", pedacos[i][2][j], {"autor":pedacos[i][2][j]}))
    # creates autoria relationship...
    #
    autoria = graph_db.get_or_create_relationships(titulo_nodes[i], "tem_como_autor", autores_nodes[j])
    # same logic...
    #
    for k in range(0, len(pedacos[i][3])):
        keyword_nodes.append(keyword_index.get_or_create("keyword", pedacos[i][3][k]))
        # cria o relacionamento 'tem_como_keyword'
        tem_keyword = graph_db.get_or_create_relationships(titulo_nodes[i], "tem_como_keyword", keyword_nodes[k])

`

引发异常的 py2neo 片段

    def get_or_create_relationships(self, *abstracts):
    """ Fetch or create relationships with the specified criteria depending
    on whether or not such relationships exist. Each relationship
    descriptor should be a tuple of (start, type, end) or (start, type,
    end, data) where start and end are either existing :py:class:`Node`
    instances or :py:const:`None` (both nodes cannot be :py:const:`None`).

    Uses Cypher `CREATE UNIQUE` clause, raising
    :py:class:`NotImplementedError` if server support not available.

    .. deprecated:: 1.5
        use either :py:func:`WriteBatch.get_or_create_relationship` or
        :py:func:`Path.get_or_create` instead.
    """
    batch = WriteBatch(self)
    for abstract in abstracts:
        if 3 <= len(abstract) <= 4:
            batch.get_or_create_relationship(*abstract)
        else:
            raise TypeError(abstract) # this is the 472 line.
    try:
        return batch.submit()
    except cypher.CypherError:
        raise NotImplementedError(
            "The Neo4j server at <{0}> does not support " \
            "Cypher CREATE UNIQUE clauses or the query contains " \
            "an unsupported property type".format(self.__uri__)
        )

====== 有什么帮助吗?

4

1 回答 1

0

感谢 Nigel Small,我已经修复了它。我在写关于建立关系的那一行时犯了一个错误。我输入:publicacao = graph_db.get_or_create_relationships(titulo_nodes[i], "publicado_em", dataPub_nodes[i])

它必须是:

publicacao = graph_db.get_or_create_relationships((titulo_nodes[i], "publicado_em", dataPub_nodes[i]))

对了,还有一个编码错误:keyword_nodes.append(keyword_index.get_or_create("keyword", pedacos[i][3][k])) must be keyword_nodes.append(keyword_index.get_or_create("keyword", pedacos [i][3][k], {"keyword":pedacos[i][3][k]}))

于 2013-10-07T15:26:58.787 回答