Пример #1
0
def addMultiNodesFromJsonFile(neoGraph,filename):
    file = open(filename)
# for all lines in the file
    while 1:
        line = file.readline()
        if not line:
            break
        # replace '' with ""
        respCmtJson = line.replace("'", "\"");
        # ture string to json
        js = simplejson.loads(respCmtJson)
        # lable  and key_values
        labels = []
        key_values = {}
        #put ID into the dict
        key_values['ID'] = js['ID']
        keyValues = js['AVP_LIST']
        # for all key_values in the AVP_LIST
        for keyValue in keyValues:
            # if ATTRIBUTE is category then put the value into label
              if keyValue['ATTRIBUTE'] == 'entity_category':
                  labels = keyValue['VALUE'].split(',')
                  labels = tuple(labels)
                  #print len(labels)
              else:
                  key_values[keyValue['ATTRIBUTE']] = keyValue['VALUE']
        # labels is tuple  and key_values is a dict
        # use with which can create a node
        node = Node()
        neoGraph.create(node)
        node.__init__(*labels,**key_values)
        node.push() 
        createIndexofNode(neoGraph,node)
        autoBuildRelationShip(neoGraph,node)  
Пример #2
0
	def mass_Import_WX_ID_from_opml(self, opemlFile_or_Content_or_URL):
		'''
		listparser.parse(obj[, agent, etag, modified])
		Parameters:
			obj (file or string) – a file-like object or a string containing a URL, an absolute or relative filename, or an XML document
			agent (string) – User-Agent header to be sent when requesting a URL
			etag (string) – ETag header to be sent when requesting a URL
			modified (string or datetime) – Last-Modified header to be sent when requesting a URL
		'''
		opml = listparser.parse(opemlFile_or_Content_or_URL)
		for feed in opml.feeds:
			try:
				wx_id=re.findall("weixin\?id=(\S+)$", feed.url)[0]
			except IndexError:
				print "---- WX_ID Paste Error!%s"%feed.url
			if not self.is_WX_ID_Exists(wx_id):
				WX_ID = Node("WX_ID")
				info = {
					"wx_id": wx_id,
					"name": feed.title,
					"group": feed.categories[0][0]
				}
				WX_ID.update(info)
				self.neo4j.create(WX_ID)
				print "++++ WX_ID Simple stored:\t%s" % wx_id
		return True
Пример #3
0
def createNodeFromMapping(en,df):
    node =  Node()
    for label in en['label']:
        node.labels.add(label)
    for i in range(len(en['graph'])):
        node.properties[en['graph'][i]] = df[en['mysql'][i]][0]
    return node, en['resolve']
Пример #4
0
def test_binding_node_if_labels_not_supported_casts_to_legacy_node():
    with patch("py2neo.Graph.supports_node_labels") as mocked:
        mocked.__get__ = Mock(return_value=False)
        alice = Node(name="Alice Smith")
        assert isinstance(alice, Node)
        alice.bind("http://localhost:7474/db/data/node/1")
        assert isinstance(alice, LegacyNode)
Пример #5
0
def test_can_pull_node(graph):
    uri = graph.cypher.execute_one("CREATE (a {name:'Alice'}) RETURN a").uri
    alice = Node()
    alice.bind(uri)
    assert alice.properties["name"] is None
    batch = PullBatch(graph)
    batch.append(alice)
    batch.pull()
    assert alice.properties["name"] == "Alice"
Пример #6
0
class GraphNode:

    def __init__(self, node=None):

        if node is None:
            self.node = Node()
        else:
            self.node = node

    def id(self):
        """
        :return: node's unique Id
        """

        return self.node._id

    def labels(self):
        """
        :return: labels set
        """
        return self.node.labels

    def degree(self):
        """
        :return: number of relations
        """
        return self.node.degree

    def property(self, key):
        """
        :param key: property name
        :return: property value
        """
        return self.node.properties[key]

    def properties(self):
        """
        :return: node's properties dict
        """
        return self.node.properties

    def relationships(self):
        """
        :return: node's relationships iterator
        """
        for rel in self.node.match():
            i_rel = GraphRelation(rel)
            yield i_rel

    def outgoing_relationships(self):
        """
        :return: node's outgoing relationships iterator
        """
        for rel in self.node.match_outgoing():
            i_rel = GraphRelation(rel)
            yield i_rel
Пример #7
0
def test_rel_and_rev_hashes(graph):
    assert hash(Rel("KNOWS")) == hash(Rel("KNOWS"))
    assert hash(Rel("KNOWS")) == -hash(Rev("KNOWS"))
    assert hash(Rel("KNOWS", well=True, since=1999)) == hash(Rel("KNOWS", since=1999, well=True))
    rel_1 = Node("KNOWS", since=1999)
    graph.create(rel_1)
    rel_2 = Node("KNOWS", since=1999)
    rel_2.bind(rel_1.uri)
    assert rel_1 is not rel_2
    assert hash(rel_1) == hash(rel_2)
Пример #8
0
	def create_WX_ID(self, wx_id_info):
		'''
		CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
		CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
		'''
		if not self.is_WX_ID_Exists(wx_id_info['wx_id']):
			wxid1 = Node("WX_ID")
			wxid1.update(wx_id_info)
			self.neo4j.create(wxid1)
			print "++++ WX_ID stored:\t%s" % wx_id_info['wx_id']
			return True
Пример #9
0
def test_node_hashes(graph):
    assert hash(Node()) == hash(Node())
    assert hash(Node(name="Alice")) == hash(Node(name="Alice"))
    assert hash(Node(name="Alice", age=33)) == hash(Node(age=33, name="Alice"))
    assert hash(Node("Person", name="Alice", age=33)) == hash(Node("Person", age=33, name="Alice"))
    node_1 = Node("Person", name="Alice")
    graph.create(node_1)
    node_2 = Node("Person", name="Alice")
    node_2.bind(node_1.uri)
    assert node_1 is not node_2
    assert hash(node_1) == hash(node_2)
Пример #10
0
def test_node_cast():
    alice = Node("Person", "Employee", name="Alice", age=33)
    assert Node.cast() == Node()
    assert Node.cast(None) is None
    assert Node.cast(alice) is alice
    assert Node.cast("Person") == Node("Person")
    assert Node.cast(name="Alice") == Node(name="Alice")
    assert Node.cast("Person", "Employee", name="Alice", age=33) == alice
    assert Node.cast({"name": "Alice"}) == Node(name="Alice")
    assert Node.cast(("Person", "Employee", {"name": "Alice", "age": 33})) == alice
    assert Node.cast(42) == NodePointer(42)
    assert Node.cast(NodePointer(42)) == NodePointer(42)
Пример #11
0
def make_node(nodetype,uid,name,properties=None,property_key="id"):
    node = None
    if graph.find_one(nodetype,property_key='id', property_value=uid) == None:
        print("Creating %s:%s, %s" %(nodetype,name,uid))
        timestamp = graph.cypher.execute("RETURN timestamp()").one
        node = Node(nodetype, name=name,id=uid,creation_time=timestamp,last_updated=timestamp)
        graph.create(node)
        if properties != None:
            for property_name in properties.keys():
                node.properties[property_name] = properties[property_name]
            node.push()
    return node
Пример #12
0
    def get_product_details(self,product_url,gender):

        print self.count
        self.count = self.count + 1
        try:
            product_html = requests.get(product_url).content
        except Exception as e:
            product_html = requests.get(product_url).content
    	product_soup = BeautifulSoup(product_html,"lxml")
    	product_image = product_soup.find("img","articleMedia_imagePlaceholder")
    	article_span = product_soup.find("span","sku")
    	product_name = product_soup.find("h1","productName noBg")
    	brand = product_name.contents[1]

        product_info = dict()
    	product_info["article_number"] = article_span.string
    	product_info["brand"] = brand.string
        product_info["gender"] = gender

    	ul = article_span.parent.parent
    	self.logger.write("%s being explored" %(article_span.string)+"\n")
    	for li in ul.contents:
    		if li.string is not None and str(type(li))=="<class 'bs4.element.Tag'>":
    			var = li.get('class')[0]
    			if(len(li.string.split(":")) > 1 ):
    				product_info[li['class'][0]] = li.string.split(":")[1].encode("ascii","ignore")

    	n = Node(gender,"Zalando","Product")
    	for key in product_info:
    		n.properties[key] = product_info[key]

        while (product_image is not None):
            url = product_image['src']
            file_name = url.split('/')[-1]
            folder_name = file_name.split('@')[0]
            if os.path.exists(folder_name):
                break
            os.makedirs(folder_name)
            os.chdir(folder_name)
            url = url.replace("detail","large")
            try:
                r = requests.get(url)
            except Exception as e:
                r = requests.get(url)
            open(file_name,"w").write(r.content)
            os.chdir("..")
            n["file_system_url"] = "Zalando/"+folder_name
            n["image_url"] = url
            product_image = product_image.nextSibling.nextSibling
        try:
            self.zalando_graph.create(n)
        except Exception as e:
            self.logger.write("Node %s already exists" %(article_span.string))
Пример #13
0
def test_can_pull_node_with_label(graph):
    if not graph.supports_node_labels:
        return
    uri = graph.cypher.execute_one("CREATE (a:Person {name:'Alice'}) RETURN a").uri
    alice = Node()
    alice.bind(uri)
    assert "Person" not in alice.labels
    assert alice.properties["name"] is None
    batch = PullBatch(graph)
    batch.append(alice)
    batch.pull()
    assert "Person" in alice.labels
    assert alice.properties["name"] == "Alice"
Пример #14
0
def test_node_exists_will_raise_non_404_errors():
    with patch.object(_Resource, "get") as mocked:
        error = GraphError("bad stuff happened")
        error.response = DodgyClientError()
        mocked.side_effect = error
        alice = Node(name="Alice Smith")
        alice.bind("http://localhost:7474/db/data/node/1")
        try:
            _ = alice.exists
        except GraphError:
            assert True
        else:
            assert False
 def create_node(self, node_label, node_dict):
     cur_nid = self.get_max_nid() + 1
     node_dict[ArianeDefinitions.GRAPH_NODE_ID] = cur_nid
     node = Node.cast(node_dict)
     node.labels.add(node_label)
     self.graph.create(node)
     return node, cur_nid
Пример #16
0
def create_company_node(name, tw=None, em=None, fb=None):
    """ Creates a company type node

        Parameters: Name, Twitter Handle, Email Address, Facebook URL
        Returns: Company Node
    """
    properties = {"name" : name}
    properties["facebook"] = [fb] if fb else []
    properties["twitter"] = [tw] if tw else []
    properties["email"] = [em] if em else []
    company = Node.cast("company", properties)

    # searches for company nodes with the same name
    results = list(graph.find("company", "name", name))
    if results:
        # if there are already nodes of the same name in the graph,
        # add the information from the incoming node to the duplicate
        dupe = results[0]
        if fb and not fb in dupe["facebook"]: dupe["facebook"].append(fb)
        if tw and not tw in dupe["twitter"]: dupe["twitter"].append(tw)
        if em and not em in dupe["email"]: dupe["email"].append(em)
        dupe.push()
    else:
        # if there are no nodes of the same name in the graph,
        # add the company node to the graph as it is
        graph.create(company)
 def peuple(self, commune):
     voiesdelacommune = self.voies[commune]
     nbvoiesdelacommune = len(self.voies[commune])
     placecommune = list(self.communes).index(commune)+1
     nbcommunes = len(self.communes)
     cpt = 0
     for v in voiesdelacommune:
         #if not re.compile(".*D59.*").match(v.libelle): continue
         numero = Numero(7, v.libelle, v.sti, v.rivoli[:-1], v.rivoli, None, None)
         cpt += 1
         ## Pour contourner un bug d'espace dans le fichier d'open data..
         if numero.lib_off[0] == " ": numero.lib_off = numero.lib_off[1:]
         try:
             ## On recupere le noeud de rue qui va recevoir ce numero. Ne retourne normalement qu'une rue donc on selectionne le premier et unique resultat avec ,
             #voie, = self.graph.cypher.execute( "match (v:Voie { libelle:'%s' })-[:ORGANISE]-(c:Commune {libcom:'%s'}) return v" % (numero.lib_off, commune) )
             voie, = self.graph.cypher.execute( "match (v:Voie { libelle:'%s' })-[:ORGANISE]-(c:Commune {libcom:'%s'}) return v" % (numero.lib_off, commune) )
         except ValueError as e:
             print("WARNING;%s;  La voie <%s> de la commune <%s> n'existe pas." % (cpt,numero.lib_off,commune) )
             print("%s" % (e) )
             continue
         
         for n in self.nums_dans_rue:
             numero.no = n
             newnum = Node.cast("Numero", numero.to_dict() )
             #print( "    %s ; %s ; %s\n%s" % (n,type(newnum),newnum,voie) )
             ## Le noeud Numero est crée en meme temps que la relation
             arete = self.graph.create( Relationship(voie['v'],"COMPORTE",newnum) )
             
             #if n % 50 == 0 : print( "%s ; %s ; %s" % (n,type(newnum),newnum) )
             #if n % 50 == 0 : print( "  %s" % (arete) )
         if cpt %10 == 0 : print( "Voie %s/%s de la commune %s / %s" % (cpt,nbvoiesdelacommune, placecommune, nbcommunes) )
Пример #18
0
def test_full_node_hydrate():
    dehydrated = {
        "extensions": {
        },
        "paged_traverse": "http://localhost:7474/db/data/node/0/paged/traverse/{returnType}{?pageSize,leaseTime}",
        "labels": "http://localhost:7474/db/data/node/0/labels",
        "outgoing_relationships": "http://localhost:7474/db/data/node/0/relationships/out",
        "traverse": "http://localhost:7474/db/data/node/0/traverse/{returnType}",
        "all_typed_relationships": "http://localhost:7474/db/data/node/0/relationships/all/{-list|&|types}",
        "property": "http://localhost:7474/db/data/node/0/properties/{key}",
        "all_relationships": "http://localhost:7474/db/data/node/0/relationships/all",
        "self": "http://localhost:7474/db/data/node/0",
        "outgoing_typed_relationships": "http://localhost:7474/db/data/node/0/relationships/out/{-list|&|types}",
        "properties": "http://localhost:7474/db/data/node/0/properties",
        "incoming_relationships": "http://localhost:7474/db/data/node/0/relationships/in",
        "incoming_typed_relationships": "http://localhost:7474/db/data/node/0/relationships/in/{-list|&|types}",
        "create_relationship": "http://localhost:7474/db/data/node/0/relationships",
        "data": {
            "name": "Alice",
            "age": 33,
        },
    }
    hydrated = Node.hydrate(dehydrated)
    assert isinstance(hydrated, Node)
    assert hydrated.properties == dehydrated["data"]
    assert hydrated.bound
    assert hydrated.resource.uri == dehydrated["self"]
Пример #19
0
 def infect(self):
     
     # Deploys new version of Khan Academy to this user
     self.khanAcademyVersion = 'B'
     
     ######################DATABASE#######################
     
     # save all relationships, ingoing and outgoing of this node
     incomingRel = self.databaseNode.match_incoming(rel_type="IS_COACHING")
     outgoingRel = self.databaseNode.match_outgoing(rel_type="IS_COACHING")
     
     # create a node that is of typer UserN
     self.databaseNode = Node("UserB", name = self.name, khanAcademyVersion = self.khanAcademyVersion, LastLogin = self.lastLogin)
     graph.create(self.databaseNode)     
     
     # Build the same relationships as the UserA node
     for r in incomingRel:
         startNode = r.start_node
         graph.create(Relationship(startNode, "IS_COACHING", self.databaseNode))
     for r in outgoingRel:
         endNode = r.end_node
         graph.create(Relationship(self.databaseNode, "IS_COACHING", endNode))
     
     
     # Delete the old node
     cypher.execute("MATCH (u :UserA {khanAcademyVersion: {khanAcademyVersion}, name: {name}})-[r]-() DELETE r", khanAcademyVersion = 'A', name = self.name)
     cypher.execute("MATCH n WHERE (n.khanAcademyVersion = {khanAcademyVersion} AND n.name = {name}) DELETE n", khanAcademyVersion = 'A', name = self.name)
Пример #20
0
 def save_publications_list(publications):
     """
     Method to save all the publications to neo4j database
     """
     
     graph = Graph()
     
     for publication in publications:
         publication_node = Node("Publication")
         
         for key in publication:
             if key not in ['_id', 'authorsSearched', 'identifiers', 'rank', 'work-citation-type']:
                 publication_node.properties[key] = publication[key]
         
         graph.create(publication_node)
         print 'Inserted Publication: ' + publication['doi']
Пример #21
0
def test_minimal_node_hydrate():
    dehydrated = {
        "self": "http://localhost:7474/db/data/node/0",
    }
    hydrated = Node.hydrate(dehydrated)
    assert isinstance(hydrated, Node)
    assert hydrated.bound
    assert hydrated.resource.uri == dehydrated["self"]
Пример #22
0
 def create(self,name,properties=None,property_key="id"):
     '''create will create a new node of nodetype with unique id uid, and properties
     :param uid: the unique identifier
     :param name: the name of the node
     :param properties: a dictionary of properties with {field:value} for the node
     '''
     node = None
     uid = generate_uid(self.name) # creation also checks for existence of uid
     if graph.find_one(self.name,property_key='id',property_value=uid) == None:
         timestamp = graph.cypher.execute("RETURN timestamp()").one
         node = NeoNode(self.name, name=name,id=uid,creation_time=timestamp,last_updated=timestamp)
         graph.create(node)
         if properties != None:
             for property_name in properties.keys():
                 node.properties[property_name] = properties[property_name]
             node.push()
     return node
Пример #23
0
 def create_node(self,graph_db):
     # Ajouter propriétés du type "modified" ?
     fiche_properties = {'doc_position': self.tmp_id, 'titre': self.titre,
                         'auteur': self.auteur, 'contenu': self.contenu, 'date_creation': self.date_creation}
     fiche_node = Node.cast(fiche_properties)
     fiche_node.labels.add(self.node_type)
     self._node = fiche_node
     graph_db.create(self._node)
Пример #24
0
def get_character(message):
	if message['AuctionType'] == 'request':
		char_id = message['BuyerCharacterId']
		char_name = message['BuyerName']
	elif message['AuctionType'] == 'offer':
		char_id = message['SellerCharacterId']
		char_name = message['SellerName']

	char_node = Node(
		'Character',
		Id = char_id,
		Name = char_name
	)

	char_node.__primarylabel__ = 'Character'
	char_node.__primarykey__ = 'Id'

	return char_node
Пример #25
0
def add_nodes(xml_blob):
    ''' Add each Scappe "note" as a neo4j node '''
    node = Node('item', uid=int(xml_blob.get('ID')))
    for item in xml_blob.getchildren():
        if item.tag == 'String':
            node.properties['text'] = item.text
        elif item.tag == 'PointsToNoteIDs':
            # format is either '1, 2, 3' or '1-3'
            link_range = item.text.split(', ')
            links = []
            for value in link_range:
                if '-' in value:
                    value = value.split('-')
                    links += range(int(value[0]), int(value[1])+1)
                else:
                    links.append(int(value))
            node.properties['pointsTo'] = links

    GRAPH.create(node)
Пример #26
0
    def construct_node(self, push_namespace, relationship, label, name, properties):
        namespace = self.get_namespace(name)

        self.check_duplicates(label, name=namespace)

        node = Node(label)
        node.properties["namespace"] = namespace
        node.properties["name"] = name
        for i in properties.keys():
            node.properties[i] = properties[i]
        self.graph.create(node)
        if len(self.parent_node) != 0:
            relation_enity = Relationship(self.get_parent_node(), relationship, node)

            self.graph.create(relation_enity)

        if push_namespace == True:
            self.namespace.append(name)
            self.parent_node.append(node)
Пример #27
0
def get_item(message):
	group       = message['ItemGroupTypeId']
	enchantment = message['EnchantmentLevel']
	quality     = message['QualityLevel']
	item_id     = f"{group}@{enchantment}&{quality}"

	item_node = Node(
		'Item',
		Id = item_id,
		Group = message['ItemGroupTypeId'],
		Tier = message['Tier'],
		Enchantment = enchantment,
		Quality = quality
	)

	item_node.__primarylabel__ = "Item"
	item_node.__primarykey__ = 'Id'

	return item_node
Пример #28
0
def load_entities_csv(g,filename, label,prop_list):

    #Note prop_list must contain respective column names from the dataset
    df = pd.read_csv(filename)
    print "[load_entities_csv] - df given:-"
    print df

    for i,r in df.iterrows():
        print '[load_entities_csv] - scanning row -  {}'.format(i)
        nd = Node()
        nd.labels.add(label)
        for c in prop_list:
            nd.properties[c] = r[c]
        
        print '[load_entities_csv] - creating node...'
        g.create(nd)
        print '[load_entities_csv] - node successfully created'

    return
Пример #29
0
 def create_cq(user_node, cq_dict):
     cq_dict['id'] = str(uuid.uuid4())
     cq_dict['created_date'] = datetime.date.today()
     cq_node = Node.cast(GraphLabel.CQ,
                         cq_dict)
     cq_node, = Graph(settings.DATABASE_URL).create(cq_node)
     cq_relationship = Relationship(user_node,
                                    GraphRelationship.SENT,
                                    cq_node)
     Graph(settings.DATABASE_URL).create_unique(cq_relationship)
Пример #30
0
def upsert_user(user):
    """

    :param user: dictionary
    :return:
    """

    drenaj_api_logger.info('Upserting: ' + user['id_str'])

    # for key in user.keys():
    #     print key + ': ' + str(user[key]) + " - " + str(type(user[key]))

    # removing these beacuse neo4j doesn't allow nested nodes.
    if 'entities' in user:
        user['entities'] = bson.json_util.dumps(user['entities'])
    if 'status' in user:
        del user['status']

    # Find the related user. This looks complicated because of {'id_str': '', 'screen_name': 'blabla'} entries
    # coming from create_campaign
    user_node = None
    if 'id_str' in user and 'screen_name' in user and user['id_str'] != '' and user[
        'screen_name'] != '':
        user_node = graph.cypher.execute("MATCH (u:User) WHERE u.id_str = {id_str} RETURN u",
                                         {'id_str': user['id_str']}).one
        if not user_node:
            user_node = graph.cypher.execute(
                "MATCH (u:User) WHERE u.screen_name = {screen_name} RETURN u",
                {'screen_name': user['screen_name']}).one
    # TODO: This is very nasty! Go get learn the proper way!
    elif (type(user['id_str']) == type('STRING') or type(user['id_str']) == type(u'STRING')) and \
                    user['id_str'] != '':
        user_node = graph.cypher.execute("MATCH (u:User) WHERE u.id_str = {id_str} RETURN u",
                                         {'id_str': user['id_str']}).one
    elif (type(user['screen_name']) == type('STRING') or type(user['screen_name']) == type(
            u'STRING')) and user['screen_name'] != '':
        user_node = graph.cypher.execute(
            "MATCH (u:User) WHERE u.screen_name = {screen_name} RETURN u",
            {'screen_name': user['screen_name']}).one

    print user_node

    if user_node:
        # First clearing the user_node properties.
        for key in user_node.properties.keys():
            user_node.properties[key] = None
        # then assigning the new properties
        for key in user.keys():
            user_node.properties[key] = user[key]
        user_node.push()
    else:
        user_node = Node.cast(user)
        user_node.labels.add("User")
        graph.create(user_node)
    return user_node
Пример #31
0
def init(person_first_name, person_last_name, attended_university_name, degree,
         subject, graduation_date):
    Person_node = Node(label='Person', )
Пример #32
0
def _to_neo(p_info, g_info, level, graph):
    print(p_info['OriginalTitle'])
    tx = graph.begin()
    paper = Node("Paper", CellID=p_info['CellID'])

    citation_paper = [
        Node("Paper", CellID=pid, level=level + 1)
        for pid in p_info['CitationIDs']
    ]
    # reference_paper = [Node("Paper", CellID=pid, level=level+1) for pid in p_info['ReferenceIDs']]

    citations = [Relationship(p, 'CITED', paper) for p in citation_paper]
    # references = [Relationship(paper, 'CITED', p) for p in reference_paper]

    # fields_of_study = [Node("FieldOfStudy", CellID=fid) for fid in p_info['FieldOfStudyIDs']]
    # paper_fos = [Relationship(paper, 'IS_ABOUT', fos) for fos in fields_of_study]

    # keywords = [Node("Keyword", CellID=hash(kw), name=kw) for kw in p_info['Keywords']]
    # paper_kw = [Relationship(paper, 'IS_ABOUT', kw) for kw in keywords]

    paper_author = [
        Node("PaperAuthor", CellID=hash(aid + p_info['CellID']))
        for aid in p_info['AuthorIDs']
    ]
    authors = [Node("Author", CellID=aid) for aid in p_info['AuthorIDs']]
    affilitation = [
        Node("Affiliation", CellID=aid) for aid in p_info['AffiliationIDs']
    ]

    authorships1 = [Relationship(paper, 'HAS', pa) for pa in paper_author]
    authorships2 = [
        Relationship(pa, 'IS', a) for pa, a in zip(paper_author, authors)
    ]
    affiliationship = [
        Relationship(pa, 'AFFILIATE', aff)
        for pa, aff in zip(paper_author, affilitation)
    ]

    # nodes =  citation_paper + reference_paper + [paper] + fields_of_study + keywords + paper_author + authors
    # relations = authorships1 + authorships2 + affiliationship + citations + references + paper_fos + paper_kw

    nodes = [paper] + paper_author + authors + citation_paper + affilitation
    relations = authorships1 + authorships2 + affiliationship + citations

    sg = Subgraph(nodes, relations)
    tx.merge(sg, primary_label=None, primary_key='CellID')
    tx.commit()

    direct_info = keyfilter(direct.__contains__, p_info)
    if g_info:
        google_info = {f'google_{k}': v for k, v in g_info.items()}
    else:
        google_info = {}

    paper.update(**direct_info, **google_info, level=level)
    graph.push(paper)

    for aff, name in zip(affilitation, p_info['NormalizedAffiliations']):
        aff.update(NormalizedName=name)
        graph.push(aff)

    for pa, seq_number in zip(paper_author, p_info['AuthorSequenceNumbers']):
        pa.update(AuthorSequenceNumbers=seq_number)
        graph.push(pa)
Пример #33
0
import py2neo
#graph直接写账号密码会不安全
g = Graph('http://localhost:7474', user='******', password='******')
#创建config以及db.cfg用来存储信息

with open('/Users/ren/PycharmProjects/基于知识图谱的电影问答系统/data/genre.csv',
          'r',
          encoding='utf-8') as f:
    #数据集除了第一行代表属性外,第一列为实体1,第二列为实体2,第三列是两者英文关系,第四列为两者中文关系
    reader = csv.reader(f)
    for item in reader:
        #第一行的标签不是咱们需要的内容,line_num表示文件的第几行
        if reader.line_num == 1:
            continue
        print("当前行数:", reader.line_num, "当前内容", item)
        test_node_1 = Node("Genre", id=item[0], name=item[1])
        g.merge(test_node_1, "Genre", "id")
with open('/Users/ren/PycharmProjects/基于知识图谱的电影问答系统/data/movie.csv',
          'r',
          encoding='utf-8') as f:
    reader = csv.reader(f)
    for item in reader:
        #第一行的标签不是咱们需要的内容,line_num表示文件的第几行
        if reader.line_num == 1:
            continue
        print("当前行数:", reader.line_num, "当前内容", item)
        test_node_1 = Node("Movie",
                           id=item[0],
                           title=item[1],
                           introduction=item[2],
                           rating=item[3],
from py2neo import Graph, Node
graph = Graph(password="******")

alice = Node("Person", name="Alice")
graph.create(alice)
german, speaks = graph.create({"name": "German"}, (alice, "SPEAKS", 0))
Пример #35
0
# later this could be improved by bulk upload mechanisms e.g. from replica db dump

from enes_settings import *


from py2neo import authenticate, Node, Relationship, Graph
authenticate("localhost:7474", 'neo4j', 'prolog16')
graph = Graph("http://localhost:7474/db/data/")

from pyesgf.search import SearchConnection
#SEARCH_SERVICE = 'http://pcmdi9.llnl.gov/esg-search'
SEARCH_SERVICE = 'http://esgf-data.dkrz.de/esg-search'
conn = SearchConnection(SEARCH_SERVICE,distrib=True)
project = u'CMIP5'
ctx = conn.new_context(project=project,replica=True,latest=True)
project_node = Node("Collection",name='cmip5',level=10, identifier = 'project')

try:
    products 
except NameError: 
    products = conn.new_context(project=project,replica=True,latest=True).facet_counts['product'].keys()
    
for product in products:
    product_node = Node("Collection",name=product, level=9)
    rel = Relationship(product_node,"belongs_to",project_node)
    graph.create(rel)
#for institute in facet_counts['institute']:
print products
try:
    institutes
except NameError:   
Пример #36
0
    def create_kg(self):
        graph = Graph("http://localhost:7474",
                      username="******",
                      password='******')
        matcher = NodeMatcher(graph)
        graph.delete_all()

        for i in self.id_entity_relation_attribute:
            id_node = matcher.match('ID').where(name=str(i[0])).first()
            if id_node == None:
                id_node = Node('ID', name=str(i[0]))
                self.num_entity['ID'] += 1
                graph.create(id_node)

            entity = i[1]
            flag = 0
            for dict in self.dict_list:
                entity_change = entity.replace('-C', '').replace(
                    '-P', '')  # 先将这些标签去掉,看看有没有,如果没有在下面在判断
                if entity_change == dict[0]:
                    flag = 1
                    entity_node = matcher.match(
                        dict[1]).where(name=str(entity)).first()
                    if entity_node == None:
                        entity_node = Node(dict[1], name=dict[0])
                        if dict[1] not in self.num_entity.keys():
                            self.num_entity[dict[1]] = 1
                        else:
                            self.num_entity[dict[1]] += 1
                        graph.create(entity_node)
                    relation = Relationship(id_node,
                                            i[2],
                                            entity_node,
                                            property=i[3])
                    graph.create(relation)
                    if i[2] not in self.num_relation.keys():
                        self.num_relation[i[2]] = 1
                    else:
                        self.num_relation[i[2]] += 1
                    break

            if flag == 0:
                if i[2] in ['儿童用药', '老年用药',
                            '妇女用药']:  # 在之前人群中没有出现过的和儿童妇女老人相关的描述,
                    entity_node = Node('病人属性', name=i[1])
                    self.num_entity['病人属性'] += 1
                    graph.create(entity_node)
                    relation = Relationship(id_node,
                                            i[2],
                                            entity_node,
                                            property=i[3])
                    graph.create(relation)
                    if i[2] not in self.num_relation.keys():
                        self.num_relation[i[2]] = 1
                    else:
                        self.num_relation[i[2]] += 1

                elif '-P' in entity:  # 标注过程中标记的病人标签
                    entity_node = matcher.match('病人属性').where(
                        name=str(entity.replace('-P', ''))).first()
                    if entity_node == None:
                        entity_node = Node('病人属性',
                                           name=entity.replace('-P', ''))
                        if '病人属性' not in self.num_entity.keys():
                            self.num_entity['病人属性'] = 1
                        else:
                            self.num_entity['病人属性'] += 1

                    relation = Relationship(id_node,
                                            i[2],
                                            entity_node,
                                            property=i[3])
                    graph.create(relation)
                    if i[2] not in self.num_relation.keys():
                        self.num_relation[i[2]] = 1
                    else:
                        self.num_relation[i[2]] += 1

                elif '-C' in entity or i[2] == '包含':  # 标记过程中标记的成份标签
                    entity_node = matcher.match('西药成份').where(
                        name=str(entity.replace('-C', ''))).first()
                    if entity_node == None:
                        entity_node = Node('西药成份',
                                           name=entity.replace('-C', ''))
                        if '西药成份' not in self.num_entity.keys():
                            self.num_entity['西药成份'] = 1
                        else:
                            self.num_entity['西药成份'] += 1

                    relation = Relationship(id_node,
                                            i[2],
                                            entity_node,
                                            property=i[3])
                    graph.create(relation)
                    if i[2] not in self.num_relation.keys():
                        self.num_relation[i[2]] = 1
                    else:
                        self.num_relation[i[2]] += 1

                elif i[2] == '治疗':
                    entity_node = matcher.match('症状').where(
                        name=entity).first()
                    if entity_node == None:
                        entity_node = Node('症状', name=entity)
                        if '症状' not in self.num_entity.keys():
                            self.num_entity['症状'] = 1
                        else:
                            self.num_entity['症状'] += 1
                        relation = Relationship(id_node,
                                                '治疗',
                                                entity_node,
                                                property=i[3])
                        graph.create(relation)
                        if '治疗' not in self.num_relation.keys():
                            self.num_relation['治疗'] = 1
                        else:
                            self.num_relation['治疗'] += 1
                elif i[3] == '检查':
                    # 之前没有出现过的一次特殊的实体,例如 关系属性为 检查 时,实体对应的都是些体征和检查手段,在之前的字典中是没有的
                    entity_node = matcher.match('检查手段').where(
                        name=str(entity)).first()
                    if entity_node == None:
                        entity_node = Node('检查手段', name=entity)
                        if '检查手段' not in self.num_entity.keys():
                            self.num_entity['检查手段'] = 1
                        else:
                            self.num_entity['检查手段'] += 1

                    if '检查手段' not in self.num_relation.keys():
                        self.num_relation[i[2]] = 1
                    else:
                        self.num_relation[i[2]] += 1
                    relation = Relationship(id_node,
                                            i[2],
                                            entity_node,
                                            property=i[3])
                    graph.create(relation)

                else:
                    # print('在字典中找不到实体分类',entity)
                    if entity not in self.wrong_entity:
                        self.wrong_entity.append(entity)

        zong = 0
        for i in self.num_entity.values():
            zong += i
        print('在好心情知识图谱中实体共有{}个,具体数量如下\n实体|数量\n:-:|:-:'.format(zong))
        for k, v in self.num_entity.items():
            print(k, '|', v)
        print('\n')

        zong = 0
        for i in self.num_relation.values():
            zong += i
        print('在好心情知识图谱中关系共有{}个,具体数量如下\n关系类别|数量\n:-:|:-:'.format(zong))
        for k, v in self.num_relation.items():
            print(k, '|', v)
        print('\n')
Пример #37
0
def test_get_node_by_id(graph):
    a1 = Node(foo="bar")
    graph.create(a1)
    a2 = graph.nodes.get(a1.identity)
    assert a1 == a2
Пример #38
0
def test_create_single_empty_node(graph):
    a = Node()
    graph.create(a)
    assert a.graph == graph
    assert a.identity is not None
Пример #39
0
def test_can_get_node_by_id(graph):
    node = Node()
    graph.create(node)
    got = graph.nodes.get(node.identity)
    assert got == node
Пример #40
0
    def add_subspecies_nodes(self, node, fields):
        for s in range(0, len(fields)):
            #亚种节点添加属性和从属的器官节点
            if fields[s][0][0] == "subspecies":
                #创建亚种节点
                subspecies_node = Node("subspecies", 中文名=fields[s][0][1])
                #添加异名和拉丁名属性
                synonyms = []
                for i in range(1, len(fields[s])):
                    if fields[s][i][0] == "yiming":
                        synonyms.append(fields[s][i][1])
                    if fields[s][i][0] == "latin":
                        latinname = node["拉丁学名"] + " " + fields[s][i][1]
                if synonyms != []:
                    subspecies_node["异名"] = synonyms
                subspecies_node["拉丁学名"] = latinname

            if fields[s][0][0] == "lifeform":  #有生活型tag的行
                #添加生活型属性
                subspecies_node["生活型"] = fields[s][0][1]
                #如果有性状tag,添加性状属性
                if len(fields[s]) > 1:
                    for i in range(1, len(fields[s])):
                        if fields[s][i][0] == "sx":
                            subspecies_node[fields[s][i][1]] = fields[s][i +
                                                                         1][1]
            if fields[s][0][0] == "sj":
                subspecies_node["生境"] = fields[s][0][1]
            if fields[s][0][0] == "fenbu":
                subspecies_node["国内分布"] = fields[s][0][1]
            if fields[s][0][0] == "guowaifenbu":
                subspecies_node["国外分布"] = fields[s][0][1]
            if re.match(r"[hg]u[ao]qi", fields[s][0][0]) != None:  #有花期/果期tag的行
                for i in range(0, len(fields[s])):
                    if fields[s][i][0] == "guoqi":
                        subspecies_node["果期"] = fields[s][i][1]
                    if fields[s][i][0] == "huaqi":
                        subspecies_node["花期"] = fields[s][i][1]
            if fields[s][0][0] == "qiguan":  #有器官tag的行,创建器官节点
                n = len(fields[s])
                organ_node = Node("organ",
                                  中文名=fields[s][0][1],
                                  原文=fields[s][n - 1][1])
                r = Relationship(organ_node, "part_of", subspecies_node)
                for i in range(1, len(fields[s])):
                    if fields[s][i][0] == "sx":
                        organ_node[fields[s][i][1]] = fields[s][i + 1][1]
                self.graph_plants.create(organ_node | r | subspecies_node)
                for i in range(1, len(fields[s])):  #一句话描述两种器官的情况
                    if fields[s][i][0] == "器官":
                        organ_node2 = Node("organ",
                                           中文名=fields[s][i][1],
                                           原文=fields[s][n - 1][1])
                        r2 = Relationship(organ_node2, "part_of",
                                          subspecies_node)
                        self.graph_plants.create(organ_node2 | r2
                                                 | subspecies_node)
        self.graph_plants.push(subspecies_node)  #更新节点
        r = Relationship(subspecies_node, "belong_to",
                         node)  #建立亚种-[从属于]->物种的关系
        self.graph_plants.create(r)
Пример #41
0
def test_create_node_with_null_properties(graph):
    a = Node(foo="bar", no_foo=None)
    graph.create(a)
    assert a["foo"] == "bar"
    assert a["no_foo"] is None
Пример #42
0
    def insert(self):
        YD = YelpData()

        row_sum = 10876672
        # row_sum = 10
        read_unit = 100
        rest_sum = row_sum - row_sum / read_unit * read_unit
        record_point = 2971

        for i in range(record_point, row_sum / read_unit + 1):
            # reviews = YD.read_reviews_limit(1, 10)
            self.tx = self.neo4j_graph.begin()

            if i == row_sum / read_unit:
                print 10876672
                reviews = YD.read_reviews_limit(i * read_unit, rest_sum)
            else:
                print(i + 1) * read_unit
                reviews = YD.read_reviews_limit(i * read_unit, read_unit)
                # reviews = self.read_reviews_limit(i*10, 10)

            for reviews_data in reviews:
                review_id = reviews_data[0]
                bussiness_id = reviews_data[1]
                reviewer_name = reviews_data[2]
                reviewer_id = reviews_data[3]
                urating = reviews_data[4]
                udate = reviews_data[5]
                ucontent = reviews_data[6]
                prating = reviews_data[7]
                pdate = reviews_data[8]
                pcontent = reviews_data[9]
                pnum = reviews_data[10]
                fake = reviews_data[11]

                # # 编码处理
                # ucontent_encoding = chardet.detect(ucontent)['encoding']
                # # print ucontent_encoding
                # ucontent_decoded = ucontent.decode(ucontent_encoding).encode('utf8')
                # # print chardet.detect(ucontent_decoded)
                # pcontent_encoding = chardet.detect(pcontent)['encoding']
                # # print pcontent_encoding
                # pcontent_decoded = pcontent.decode(pcontent_encoding).encode('utf8')
                # # print chardet.detect(pcontent_decoded)
                # if reviewer_name is not "":  # 名字可能为空
                #     reviewer_name_encoding = chardet.detect(reviewer_name)['encoding']
                #     reviewer_name_decoded = reviewer_name.decode(reviewer_name_encoding).encode('utf8')
                # else:
                #     reviewer_name_decoded = ""

                # construct relationship
                reviewer_node = Node('reviewer',
                                     id=reviewer_id,
                                     reviewer_name=reviewer_name,
                                     udate=udate)
                self.tx.merge(reviewer_node, 'reviewer', "id")

                review_node = Node('review',
                                   id=review_id,
                                   ucontent=ucontent,
                                   urating=urating,
                                   fake=fake)
                self.tx.merge(review_node,
                              primary_label='review',
                              primary_key="id")

                product_node = Node('product',
                                    id=bussiness_id,
                                    prating=prating,
                                    pdate=pdate,
                                    pcontent=pcontent,
                                    pnum=pnum)
                self.tx.merge(product_node,
                              primary_label='product',
                              primary_key="id")

                reviewer_review = Relationship(reviewer_node, 'publish',
                                               review_node)
                review_product = Relationship(review_node, 'comment',
                                              product_node)

                # if self.tx.exists(reviewer_review):
                #     print "not exists rr"
                self.tx.merge(reviewer_review)
                # if self.tx.exists(review_product):
                #     print "not exists rp"
                self.tx.merge(review_product)
                # self.tx.push(reviewer_review)
                # self.tx.push(review_product)
            print time.strftime('%Y-%m-%d %H:%M:%S',
                                time.localtime(time.time()))
            self.tx.commit()
Пример #43
0
from py2neo import Graph, Node, Relationship

g = Graph(host="localhost")  #password="******")

tx = g.begin()
john = Node("User", name="John", gender="M", age="28")
tx.create(john)

mary = Node("User", name="Mary", gender="F", age="26")
tx.create(mary)

jm = Relationship(john, "FRIENDS_WITH", mary)
tx.create(jm)

tx.commit()
Пример #44
0
graph2 = Graph("http://121.36.99.228:7474", auth=("neo4j", "SSPKUsspku12345"))

data = graph2.run(
    "MATCH (m:configuration_file)-[r]->(n:configuration_file) where m.name='configuration_file' RETURN n"
).data()

hadoop_node = graph.nodes.match("技术", name="hadoop").first()
yarn_node = graph.nodes.match("技术", name="yarn").first()

for ele in data:
    new_data = build_nodes(ele)
    # print(new_data['name'])
    com_node = Node("配置文件",
                    name=new_data['name'],
                    detail=new_data['detail'],
                    platform='hadoop',
                    path=new_data['path'])
    ab2 = Relationship(hadoop_node, "技术有关配置文件", com_node)
    graph.create(ab2)

data2 = graph2.run(
    "MATCH (m:component)-[r]->(n:configuration_file) where m.name='yarn' RETURN n"
).data()

for ele in data2:
    new_data2 = build_nodes(ele)
    com_node2 = Node("配置文件",
                     name=new_data2['name'],
                     detail=new_data2['detail'],
                     platform='hadoop',
Пример #45
0
def fileGraph():
    fileAnalysis = MainNode()
    compFiles = CompFiles()
    exFilesdf = pd.read_csv(fileExPath)
    for index, row in exFilesdf.iterrows():
        compFiles.add_files(
            ExFiles(row['Title'], row['Time'], row['FullPath'],
                    row['LengthInKB'], row['HexSignature'], row['FileExtn'],
                    row['Result']))
    fileAnalysis.add_component(compFiles)
    return fileAnalysis


if __name__ == "__main__":
    graph = DFGraph()
    user = Node("User", name=userAcc)
    graph.add_node(user)

    registry = registryGraph()
    swReg = Node("Registry", name="Software Installed")
    mruReg = Node("Registry", name="Most Recently Used")
    graph.add_node(Relationship(user, "Digital Traces By", swReg))
    graph.add_node(Relationship(user, "Digital Traces By", mruReg))
    for softwares in registry.components[0].softwares:
        graph.add_node(
            Relationship(
                swReg, "Extracted Info",
                Node("Softwares",
                     name=softwares.name,
                     version=softwares.version,
                     publisher=softwares.publisher,
Пример #46
0
    def create(cls):
        name = Node(cls.attribute, name="名称", name2="名称")
        cls.graph.create(name)
        variant_name = Node(cls.attribute, name="别名", name2="别名")
        cls.graph.create(variant_name)
        weekdy_opentime = Node(cls.attribute, name="开放时间", name2="开放时间")
        cls.graph.create(weekdy_opentime)
        open_date = Node(cls.attribute, name="开放日", name2="开放日")
        cls.graph.create(open_date)
        #workday_opentime = Node(cls.attribute, name="工作日开放时间")
        #cls.graph.create(workday_opentime)
        phone = Node(cls.attribute, name="电话", name2="电话")
        cls.graph.create(phone)
        describe = Node(cls.attribute, name="描述", name2="描述")
        cls.graph.create(describe)
        #weekdy_btime = Node(cls.attribute, name="周末借阅时间")
        #cls.graph.create(weekdy_btime)
        workday_btime = Node(cls.attribute, name="借阅时间", name2="借阅时间")
        cls.graph.create(workday_btime)
        borrow = Node(cls.attribute, name="借阅", name2="借阅")
        cls.graph.create(borrow)
        position = Node(cls.attribute, name="位置", name2="位置")
        cls.graph.create(position)
        site = Node(cls.attribute, name="坐标", name2="坐标")
        cls.graph.create(site)
        time = Node(cls.attribute, name="时间", name2="时间")
        cls.graph.create(time)
        num = Node(cls.attribute, name="数量", name2="数量")
        cls.graph.create(num)
        age = Node(cls.attribute, name="年龄", name2="年龄")
        cls.graph.create(age)
        function = Node(cls.attribute, name="功能", name2="功能")
        cls.graph.create(function)
        #############################################################
        library = Node(cls.library, name="国家图书馆")
        cls.graph.create(library)
        room = Node(cls.room, name="馆室")
        cls.graph.create(room)
        area = Node(cls.building, name="馆区")
        cls.graph.create(area)
        floor = Node(cls.floor, name="楼层")
        cls.graph.create(floor)
        card = Node(cls.card, name="读者卡")
        cls.graph.create(card)
        resource = Node(cls.resource, name="资源")
        cls.graph.create(resource)
        type = Node(cls.restype, name="资源类型")
        cls.graph.create(type)
        service = Node(cls.service, name="服务")
        cls.graph.create(service)
        #############################################################
        rel = Relationship(
            cls.graph.find_one(label=cls.library), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="位置"))
        cls.graph.create(rel)

        rel = Relationship(
            cls.graph.find_one(label=cls.building), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="别名"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.building), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="位置"))

        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.room), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="位置"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.room), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="坐标"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.room), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="开放日"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.room), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="开放时间"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.room), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="描述"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.room), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="电话"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.room), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="借阅时间"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.room), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="借阅"))
        cls.graph.create(rel)

        rel = Relationship(
            cls.graph.find_one(label=cls.resource), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="别名"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.resource), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="描述"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.resource), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="数量"))
        cls.graph.create(rel)

        rel = Relationship(
            cls.graph.find_one(label=cls.restype), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="别名"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.restype), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="描述"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.restype), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="数量"))
        cls.graph.create(rel)

        rel = Relationship(
            cls.graph.find_one(label=cls.card), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="别名"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.card), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="年龄"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.card), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="功能"))
        cls.graph.create(rel)

        rel = Relationship(
            cls.graph.find_one(label=cls.service), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="时间"))
        cls.graph.create(rel)
        rel = Relationship(
            cls.graph.find_one(label=cls.service), "属性",
            cls.graph.find_one(label=cls.attribute,
                               property_key='name',
                               property_value="描述"))
        cls.graph.create(rel)

        #############################################################

        rel = Relationship(cls.graph.find_one(label=cls.room), "位于",
                           cls.graph.find_one(label=cls.floor))
        cls.graph.create(rel)
        rel = Relationship(cls.graph.find_one(label=cls.building), "包括",
                           cls.graph.find_one(label=cls.library))
        cls.graph.create(rel)

        rel = Relationship(cls.graph.find_one(label=cls.room), "处于",
                           cls.graph.find_one(label=cls.building))
        cls.graph.create(rel)
        rel = Relationship(cls.graph.find_one(label=cls.floor), "处于",
                           cls.graph.find_one(label=cls.building))
        cls.graph.create(rel)
        rel = Relationship(cls.graph.find_one(label=cls.resource), "属于",
                           cls.graph.find_one(label=cls.restype))
        cls.graph.create(rel)
        rel = Relationship(cls.graph.find_one(label=cls.resource), "存放",
                           cls.graph.find_one(label=cls.room))
        cls.graph.create(rel)
        rel = Relationship(cls.graph.find_one(label=cls.room), "证件",
                           cls.graph.find_one(label=cls.card))
        cls.graph.create(rel)
        rel = Relationship(cls.graph.find_one(label=cls.service), "发生",
                           cls.graph.find_one(label=cls.room))
        cls.graph.create(rel)
        rel = Relationship(cls.graph.find_one(label=cls.service), "对象",
                           cls.graph.find_one(label=cls.resource))
        cls.graph.create(rel)
Пример #47
0
 def register(self, password):
     if not self.find():
         user = Node("User", username=self.username, password=password)
         graph.create(user)
         return True
     return False
def CreateNode(className, lableName, name):
    test_node = Node(className, lable=lableName, name=name)
    graph.create(test_node)
def buildKnowledgeGraph(filename):
    loadstr = ""

    if filename == None:
        return False
    entities = {}
    links = []
    typedict = ['countries', 'capitals', 'currencies', 'continents']

    with open(filename, encoding='UTF-8') as csvfile:
        csv_reader = csv.reader(csvfile)
        header = next(csv_reader)
        index = 0
        idlist = 0

        typeEntites = {}
        typeRelations = {}

        for row in csv_reader:
            en1 = row[0].split('/')[-1][:-1]
            typeindex = -2
            splitrow = row[0].split('/')
            while splitrow[typeindex] not in typedict:
                typeindex -= 1
            type = splitrow[typeindex]
            en1 = type + en1
            if en1 not in entities:
                entities[en1] = {'fulltext': row[0], 'nid': idlist}
                idlist += 1
            if 'type' not in entities[en1]:
                entities[en1]['type'] = type
            relation = ""
            relationType = 0
            if row[1][0] == '<':
                relation = row[1].split('/')[-1][:-1]
                if '#' in relation:
                    relation = relation.split('#')[-1]
            else:
                relation = row[1]

            en2 = ""
            if row[2][0] == '<':
                en2 = row[2][1:-1]
                if relation == "rdf:type":
                    en2 = en2.split("/")[-1]
                    if '#' in en2:
                        en2 = en2.split('#')[-1]
                elif relation == "owl:sameAs":
                    if en2[-1] == '/':
                        en2 = en2[:-1]
                    en2 = en2.split("/")[-1]
                elif en2.split("/")[-2] not in [
                        "countries", "currencies", "continents"
                ] and en2.split("/")[-3] not in ["capitals"]:
                    if en2[-1] == '/':
                        en2 = en2[:-1]
                    en2 = en2.split("/")[-1]
                    if '#' in en2:
                        en2 = en2.split('#')[-1]
                else:
                    en2 = en2.split("/")[-1]
                    splitrow = row[2].split('/')
                    typeindex = -2
                    while splitrow[typeindex] not in typedict:
                        typeindex -= 1
                    type2 = splitrow[typeindex]
                    links.append((en1, relation, type2 + en2, row[1]))

                    # 未在第一列出现的实体将在处理时被删除
                    continue
            else:
                en2 = row[2]
            if en1 in entities:
                if relation in entities[en1]:
                    entities[en1][relation].append(en2)
                else:
                    entities[en1][relation] = [en2]
            else:
                entities[en1] = {}
                entities[en1][relation] = [en2]

        entityNode = {}
        nodes = []
        relationships = []
        for e in entities:
            entity = entities[e]
            #if entity['name'] == "AF#AF":
            #  print(entity)
            #print(entity)
            #print(entityNode["rdf:type"])
            #if "rdf:type" in entity:
            #  print(True)
            uppertype = entity["type"].upper()
            node = Node(uppertype, fulltext=entity['fulltext'])
            if uppertype in typeEntites:
                if uppertype == 'COUNTRIES':
                    typeEntites[uppertype].append(
                        json.dumps({
                            "nid": entity['nid'],
                            "name": entity['name'][0],
                            "population": entity['population'][0]
                        }))
                else:
                    typeEntites[uppertype].append(
                        json.dumps({
                            "nid": entity['nid'],
                            "name": entity['name'][0]
                        }))
            else:
                if uppertype == 'COUNTRIES':
                    typeEntites[uppertype] = [
                        json.dumps({
                            "nid": entity['nid'],
                            "name": entity['name'][0],
                            "population": entity['population'][0]
                        })
                    ]
                else:
                    typeEntites[uppertype] = [
                        json.dumps({
                            "nid": entity['nid'],
                            "name": entity['name'][0]
                        })
                    ]
            #print(entity['rdf:type'][0].upper())
            #if entity['type'].upper() == 'CONTINENTS':
            #  print(entity)
            #print(entity["rdf:type"][0].upper())
            for attr in entity:
                if attr == 'fulltext' or attr == 'type':
                    continue
                node[attr] = entity[attr]
            entityNode[e] = node
            nodes.append(node)
            #graph.create(node)

        for l in links:
            if l[2] in entityNode:
                upperr = l[1].upper()
                link = Relationship(entityNode[l[0]], upperr, entityNode[l[2]])
                link['fulltext'] = l[3]
                link['relation'] = l[1].upper()
                relationships.append(link)
                if upperr in typeRelations:
                    typeRelations[upperr].append(
                        json.dumps({
                            "start": entityNode[l[0]]['nid'],
                            "end": entityNode[l[2]]['nid']
                        }))
                else:
                    typeRelations[upperr] = [
                        json.dumps({
                            "start": entityNode[l[0]]['nid'],
                            "end": entityNode[l[2]]['nid']
                        })
                    ]
            #graph.create(link)
        loadstr += "{\"Labels\":{"
        for label in typeEntites:
            loadstr = loadstr + "\"" + label + "\"" + ": ["
            for k in typeEntites[label]:
                loadstr += k
                loadstr += ','
            loadstr = loadstr[:-1] + '],'
        loadstr = loadstr[:-1] + '},'

        loadstr += "\"Relationships\":{"
        for label in typeRelations:
            loadstr = loadstr + "\"" + label + "\"" + ": ["
            for k in typeRelations[label]:
                loadstr += k
                loadstr += ','
            loadstr = loadstr[:-1] + '],'
        loadstr = loadstr[:-1] + '}}'

        #print(loadstr)
        #print(json.loads(loadstr))
        #with open("ks.txt", 'w') as fwrite:
        #  fwrite.write(loadstr)

        totalgraph = Subgraph(nodes=nodes, relationships=relationships)
        graph.create(totalgraph)
        return loadstr
Пример #50
0
 def create_node(self, label, **kwargs) -> object:
     n = Node(label, **kwargs)
     tx = self._graph.begin(autocommit=True)
     tx.create(n)
     return n
Пример #51
0
 def create_person(self, name):
     node = Node("Person", name=name)
     self.neo.create(node)
     return node
Пример #52
0
 def save(self, pull):
     tx = self.db.begin()
     # Nó da pull
     unnodepull = Node("pull", **filter_props(pull))
     tx.create(unnodepull)
     # Nó do usuário
     unnodeuser = Node("user", **filter_props(pull["user"]))
     tx.merge(unnodeuser, "user", "id")
     reluserpull = Relationship(unnodeuser, "CRIOU", unnodepull)
     tx.create(reluserpull)
     # Condicional
     if ("merged_by" in pull):
         # Nó do merged_by
         unnodemergedby = Node("user", **filter_props(pull["merged_by"]))
         tx.merge(unnodemergedby, "user", "id")
         relmergedbypull = Relationship(unnodemergedby, "DEU_MERGE_EM",
                                        unnodepull)
         tx.create(relmergedbypull)
     # Condicional
     if (pull["milestone"]):
         # nó da milestone
         unnodemilestone = Node("milestone",
                                **filter_props(pull["milestone"]))
         tx.merge(unnodemilestone, "milestone", "id")
         relmilestonepull = Relationship(unnodemilestone, "CONTÉM",
                                         unnodepull)
         tx.create(relmilestonepull)
         # nó do criador do milestone
         unnodemilestonecreator = Node(
             "user", **filter_props(pull["milestone"]["creator"]))
         tx.merge(unnodemilestonecreator, "user", "id")
         relcreatormilestone = Relationship(unnodemilestonecreator, "CRIOU",
                                            unnodemilestone)
         tx.create(relcreatormilestone)
     # Nós das labels
     lsnodelabel = [
         Node("label", **filter_props(label)) for label in pull['labels']
     ]
     for nodelabel in lsnodelabel:
         tx.merge(nodelabel, "label", "id")
         rellabelpull = Relationship(nodelabel, "ROTULA", unnodepull)
         tx.create(rellabelpull)
     # Nós dos assignees
     lsnodeassignee = [
         Node("user", **filter_props(assignee))
         for assignee in pull["assignees"]
     ]
     for nodeassignee in lsnodeassignee:
         tx.merge(nodeassignee, "user", "id")
         relassigneepull = Relationship(nodeassignee, "ADMINISTRA",
                                        unnodepull)
         tx.create(relassigneepull)
     # Nós dos reviewers
     lsnodereviewers = [
         Node("user", **filter_props(reviewer))
         for reviewer in pull["requested_reviewers"]
     ]
     for nodereviewer in lsnodereviewers:
         tx.merge(nodereviewer, "user", "id")
         relreviewerissue = Relationship(nodereviewer,
                                         "CHAMADO_PARA_REVISAR", unnodepull)
         tx.create(relreviewerissue)
     # Nós dos teams
     lsnodeteams = [
         Node("team", **filter_props(team))
         for team in pull["requested_teams"]
     ]
     for nodeteam in lsnodeteams:
         tx.merge(nodeteam, "team", "id")
         relteamissue = Relationship(nodeteam, "CHAMADO_PARA_REVISAR",
                                     unnodepull)
         tx.create(relteamissue)
     # Concluir
     tx.commit()
Пример #53
0
for one in os.listdir(binary_path):
    file_list.append(one)
    file_attr_list.extend(obtain_sym_table(binary_path + one, "FILE"))
    func_attr_list.extend(obtain_sym_table(binary_path + one, "FUNC"))
    file_arch_list.append(get_file_arch(binary_path + one))

file_attr_list = list(set(file_attr_list))
func_attr_list = list(set(func_attr_list))

file_node_list = []
file_attr_node_list = []
func_attr_node_list = []

for index, one in enumerate(file_list):
    arch = file_arch_list[index]
    file_node_list.append(Node(arch, name=one))

for one in file_attr_list:
    file_attr_node_list.append(Node("FILE table", name=one[1]))

for one in func_attr_list:
    func_attr_node_list.append(Node("FUNC table", name=one[1]))

print("Last %d items in file_attr_list" % len(file_attr_list))
print("Last %d items in func_attr_list" % len(func_attr_list))

file_count = 0

for index, one in enumerate(file_list):
    file_count += 1
    file_table = obtain_sym_table(binary_path + one, "FILE")
Пример #54
0
    'gender': 'male'
}, {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}, {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}

global info_id, info_name, info_age, info_gender, node

for td in test_data:
    print(td.keys())
    for tk in td.keys():
        if 'id' in tk:
            info_id = tk
        if 'name' in tk:
            info_name = tk
        if 'age' in tk:
            info_age = tk
        if 'gender' in tk:
            info_gender = tk
    node = Node(id=info_id, name=info_name, age=info_age, gender=info_gender)
print('result:' + info_id, ':', info_name, ':', info_age, ':', info_gender)
print(node)
graph.create(node)
Пример #55
0
def data_service_nodes(dataserver):
    data_services = [Node("data_access_service",name=dataserver,service_type="http", status='up'),
                     Node("data_access_service",name=dataserver,service_type="opendap",status='up'),
                     Node("data_access_service",name=dataserver,service_type="globus",status='up')
                     ]
    return data_services                 
Пример #56
0
    def create_node(cls, workbook):
        """建立馆室节点"""
        room_sheet = workbook.sheet_by_index(0)
        for i in range(1, room_sheet.nrows - 6):
            row = room_sheet.row_values(i)
            name = row[0]
            if row[0].find("_") != -1:
                name_arr = row[0].split("_")
                if len(name_arr) >= 3:
                    name = name_arr[2]

            room_node = Node(cls.room,
                             type=cls.room,
                             name=name,
                             office_name=row[0],
                             variant_name=row[1],
                             position=row[2],
                             describe=row[3],
                             open_date=row[4],
                             phone=row[5],
                             monday_open=row[6],
                             monday_borrow=row[7],
                             tuseday_open=row[8],
                             tuseday_borrow=row[9],
                             wednesday_open=row[10],
                             wednesday_borrow=row[11],
                             thursday_open=row[12],
                             thursday_borrow=row[13],
                             friday_open=row[14],
                             friday_borrow=row[15],
                             saturday_open=row[16],
                             saturday_borrow=row[17],
                             sunday_open=row[18],
                             sunday_borrow=row[19],
                             area=row[20],
                             floor=row[21],
                             card=row[22],
                             des_x=row[25],
                             des_y=row[26],
                             borrow=row[29])
            cls.graph.create(room_node)
        for i in range(room_sheet.nrows - 6, room_sheet.nrows):
            row = room_sheet.row_values(i)
            mark_node = Node(cls.mark,
                             type=cls.mark,
                             name=row[0],
                             office_name=row[0],
                             self_site=row[24])
            cls.graph.create(mark_node)
        """建立馆区节点"""
        building_sheet = workbook.sheet_by_index(2)
        for i in range(1, building_sheet.nrows):
            row = building_sheet.row_values(i)
            name = row[0]
            #print(name)
            building_node = Node(cls.building,
                                 type=cls.building,
                                 name=name,
                                 office_name=row[0],
                                 variant_name=row[1],
                                 position=row[2],
                                 workdate=row[3],
                                 weekdate=row[4],
                                 worktime=row[5],
                                 weektime=row[6])

            cls.graph.create(building_node)
        """建立楼层节点"""
        floor_sheet = workbook.sheet_by_index(4)
        for i in range(1, floor_sheet.nrows):
            row = floor_sheet.row_values(i)
            name = row[0]
            #print(name)
            floor_node = Node(cls.floor,
                              type=cls.floor,
                              name=name,
                              office_name=row[0],
                              variant_name=row[1],
                              area=row[2],
                              upstair=row[3],
                              downstair=row[4])
            cls.graph.create(floor_node)
        """建立资源节点"""
        resource_sheet = workbook.sheet_by_index(3)
        for i in range(1, resource_sheet.nrows):
            row = resource_sheet.row_values(i)
            #print(row)
            name = row[0]
            if row[0].find("_") != -1:
                name = row[0].split("_")[1]
            # print(name)
            resource_node = Node(cls.resource,
                                 type=cls.resource,
                                 name=name,
                                 office_name=row[0],
                                 variant_name=row[1],
                                 describe=row[2],
                                 count=row[3],
                                 room=row[4],
                                 belong=row[5],
                                 ctime=row[6],
                                 range=row[8],
                                 topic=row[9])
            cls.graph.create(resource_node)
        '''建立证件节点'''
        card_sheet = workbook.sheet_by_index(1)
        for i in range(1, card_sheet.nrows):
            row = card_sheet.row_values(i)
            card_node = Node(cls.card,
                             type=cls.card,
                             name=row[0],
                             office_name=row[0],
                             variant_name=row[1],
                             age=row[2],
                             function=row[3])
            cls.graph.create(card_node)
        '''建立服务节点'''
        service_sheet = workbook.sheet_by_index(7)
        for i in range(1, service_sheet.nrows):
            row = service_sheet.row_values(i)
            service_node = Node(cls.service,
                                type=cls.service,
                                name=row[0],
                                office_name=row[0],
                                variant_name=row[1],
                                date=row[4],
                                time=row[5],
                                discribe=row[6],
                                card=row[7])
            cls.graph.create(service_node)
        '''建立资源类型节点'''
        restype_sheet = workbook.sheet_by_index(6)
        for i in range(1, restype_sheet.nrows):

            row = restype_sheet.row_values(i)
            restype_node = Node(cls.restype,
                                type=cls.restype,
                                name=row[0],
                                office_name=row[0],
                                variant_name=row[1],
                                describe=row[2],
                                count=row[3],
                                room=row[4],
                                belong=row[5])
            cls.graph.create(restype_node)
        '''建立国家图书馆节点'''
        variant_name = '图书馆,国家图书馆'
        describe = '国家图书馆的前身是建于1909年(清宣统元年)9月9日的京师图书馆,1912年8月27日开馆接待读者,1916年京师图书馆按规定正式接受国内出版物呈缴本,开始履行国家图书馆的部分职能,1928年7月更名为国立北平图书馆,1929年8月与北平北海图书馆合并,仍名国立北平图书馆, 1950年3月6日国立北平图书馆更名为国立北京图书馆,1951年6月12日更名为北京图书馆,1998年12月12日经国务院批准,北京图书馆更名为国家图书馆,对外称中国国家图书馆。包括文津街古籍馆、白石桥总馆南区和总馆北区三个馆区。'
        library = Node(cls.library,
                       type=cls.library,
                       name=cls.library,
                       office_name=cls.library,
                       variant_name=variant_name,
                       describe=describe)
        cls.graph.create(library)
        '''建立资源大类'''
        res_sheet = workbook.sheet_by_index(8)
        for i in range(1, res_sheet.nrows):
            row = res_sheet.row_values(i)
            res_node = Node(cls.res,
                            type=cls.res,
                            name=row[0],
                            office_name=row[0],
                            variant_name=row[0],
                            num=row[1])
            cls.graph.create(res_node)
Пример #57
0
from py2neo import Graph
graph = Graph(password="******")

from py2neo import Node, Relationship
alice = Node("Person", name="Alice")
bob = Node("Person", name="Bob")
alice_knows_bob = Relationship(alice, "KNOWS", bob)
graph.create(alice_knows_bob)
Пример #58
0
                messages_proxy.append(j['event']['event_id'])
                count+=1
                print "\n#####"+str(count)+"#####"
		messages_1.append(j)

graph = Graph(password = '******', host = 'localhost')
graph.delete_all()

count = 0
for message in messages_1:
		try:
                	new_node = Node('Event',
                        	name = message['event']['event_name'],
                        	id = message['event']['event_id'],
                        	time = message['event']['time'],
                        	url = message['event']['event_url'],
				venue_name = ['venue']['venue_name'],
				long = ['venue']['lon'],
				lat = ['venue']['lat'],
				venue_id = ['venue']['id'])
                	graph.create(new_node)
		except:
			new_node = Node('Event',
                                name = message['event']['event_name'],
                                id = message['event']['event_id'],
                                url = message['event']['event_url'])
			graph.create(new_node)
                count+=1
                print"##node number\t"+str(count)+"\t just created##"

print(len(messages),len(messages_1),len(messages_proxy))
Пример #59
0
def test_graph_contains(graph):
    node = Node()
    graph.create(node)
    assert node.graph is graph
Пример #60
0
graph = Graph(password="******")



sentences=['Qasim hates peer',
           'Malaika is daughter of Ali',
           'Hussain loves Cat',
           'Bashir has a Dog',
           'Cat sits in Car'
           ]

for sentence in sentences:
    tokens=word_tokenize(sentence)
    print(tokens)
    tags= pos_tag(tokens)
    print(tags)
    nouns=[]
    verb=''

    for tuple in tags:
        print(tuple)
        if tuple[1]=='NNP':
            nouns.append(tuple[0])
        if tuple[1]=='VBZ' or tuple[1]=='NN':
            verb=tuple[0]
    node1 = Node("Person", name=nouns[0])
    graph.create(node1)
    node2 = Node("Object", name = nouns[1])
    graph.create(node2)
    relationship = Relationship(node1, verb, node2)
    graph.create(relationship)