From 2cad3ebb8cace0b3a28b98e619c2c65008c27bfb Mon Sep 17 00:00:00 2001 From: Malte Schokolowski <baw8441@uni-hamburg.de> Date: Mon, 13 Dec 2021 13:45:05 +0100 Subject: [PATCH] bugs fixed and added graph plan for test graphs --- .../construct_new_graph/Processing.py | 14 +- .../construct_new_graph/add_citations_rec.py | 19 +-- verarbeitung/get_pub_from_input.py | 5 +- verarbeitung/json_text.json | 2 +- verarbeitung/test/Processing_unittest.py | 128 +++++++++--------- verarbeitung/test/input_test.py | 32 ++--- verarbeitung/test/test_graphs_plan.pdf | Bin 0 -> 11174 bytes verarbeitung/test_output.json | 2 +- verarbeitung/update_graph/update_graph_del.py | 18 ++- 9 files changed, 109 insertions(+), 111 deletions(-) create mode 100644 verarbeitung/test/test_graphs_plan.pdf diff --git a/verarbeitung/construct_new_graph/Processing.py b/verarbeitung/construct_new_graph/Processing.py index 34e5e21..0f3dc51 100644 --- a/verarbeitung/construct_new_graph/Processing.py +++ b/verarbeitung/construct_new_graph/Processing.py @@ -86,14 +86,14 @@ def complete_inner_edges(): for node in nodes: if (node.group < 0): for citation in node.citations: - for cit in nodes: - if (citation == cit.doi_url and [citation, node.doi_url] not in edges): - edges.append([citation, node.doi_url]) + for pub in nodes: + if ((pub.doi_url == citation.doi_url) and ([citation.doi_url, node.doi_url] not in edges)): + edges.append([citation.doi_url, node.doi_url]) if (node.group > 0): for reference in node.references: - for ref in nodes: - if (reference == ref.doi_url and [node.doi_url, reference] not in edges): - edges.append([node.doi_url,reference]) + for pub in nodes: + if ((pub.doi_url == reference.doi_url) and ([node.doi_url, reference.doi_url] not in edges)): + edges.append([node.doi_url,reference.doi_url]) def process_main(doi_input_list, search_height, search_depth, test_var = False): @@ -142,6 +142,6 @@ def process_main(doi_input_list, search_height, search_depth, test_var = False): complete_inner_edges() # calls a skript to save nodes and edges of graph in .json file - output_to_json(nodes,edges, test_var) + output_to_json(nodes, edges, test_var) return(nodes,edges) diff --git a/verarbeitung/construct_new_graph/add_citations_rec.py b/verarbeitung/construct_new_graph/add_citations_rec.py index 4c2cac9..2faab32 100644 --- a/verarbeitung/construct_new_graph/add_citations_rec.py +++ b/verarbeitung/construct_new_graph/add_citations_rec.py @@ -95,12 +95,12 @@ def create_graph_structure_citations(pub, search_depth, search_depth_max, cit_ty for citation in get_cit_type_list(pub, cit_type): not_in_nodes = True for node in nodes: # checks every citation for duplication - if (citation == node.doi_url): + if (citation.doi_url == node.doi_url): not_in_nodes = False break if (not_in_nodes): if (search_depth < search_depth_max): #checks if its a test and chooses input function accordingly - citation_pub_obj = get_pub(citation, test_var) + citation_pub_obj = get_pub(citation.doi_url, test_var) if (type(citation_pub_obj) != Publication): print(pub) continue @@ -114,13 +114,14 @@ def create_graph_structure_citations(pub, search_depth, search_depth_max, cit_ty nodes.append(citation_pub_obj) citations_pub_obj_list.append(citation_pub_obj) - # adds only edge if citation already exists - elif (cit_type == "Citation"): - if ([citation,pub.doi_url] not in edges): - edges.append([citation,pub.doi_url]) - elif (cit_type == "Reference"): - if ([pub.doi_url,citation] not in edges): - edges.append([pub.doi_url,citation]) + # adds just the edge if citation already exists + else: + if (cit_type == "Citation"): + if ([citation.doi_url,pub.doi_url] not in edges): + edges.append([citation.doi_url,pub.doi_url]) + else: + if ([pub.doi_url,citation.doi_url] not in edges): + edges.append([pub.doi_url,citation.doi_url]) return citations_pub_obj_list diff --git a/verarbeitung/get_pub_from_input.py b/verarbeitung/get_pub_from_input.py index e3fdedd..2766ba8 100644 --- a/verarbeitung/get_pub_from_input.py +++ b/verarbeitung/get_pub_from_input.py @@ -33,15 +33,14 @@ def get_pub(pub_doi, test_var): function to return an object of type Publication for given input doi depending on whether its a test or url doi ''' #checks if it's a test and chooses appropiate function - # print(pub_doi) if(test_var): - pub = input_test_func(pub_doi) + pub = input_test_func(pub_doi) #checks that it isnt a test and chooses standart-input function else: inter = Input() try: - pub = inter.get_publication(pub_doi.doi_url) #creates an object of class Publication + pub = inter.get_publication(pub_doi) #creates an object of class Publication except AttributeError: pub = inter.get_publication(pub_doi) except ValueError: diff --git a/verarbeitung/json_text.json b/verarbeitung/json_text.json index 36aad96..183e764 100644 --- a/verarbeitung/json_text.json +++ b/verarbeitung/json_text.json @@ -1 +1 @@ -{"nodes": [{"doi": "https://doi.org/10.1021/acs.jcim.9b00249", "name": "Comparing Molecular Patterns Using the Example of SMARTS: Applications and Filter Collection Analysis", "author": ["Emanuel S. R. Ehmki", "Robert Schmidt", "Farina Ohm", "Matthias Rarey"], "year": "May 24, 2019", "journal": "Journal of Chemical Information and Modeling", "group": "Input", "depth": 0, "citations": 5}, {"doi": "https://doi.org/10.1021/acs.chemrev.1c00107", "name": "Combining Machine Learning and Computational Chemistry for Predictive Insights Into Chemical Systems", "author": ["John A. Keith", "Valentin Vassilev-Galindo", "Bingqing Cheng", "Stefan Chmiela", "Michael Gastegger", "Klaus-Robert M\u00fcller", "Alexandre Tkatchenko"], "year": "July 7, 2021", "journal": "Chem. Rev.", "group": "Input", "depth": 0, "citations": 2}, {"doi": "https://doi.org/10.1021/acs.jcim.0c00741", "name": "Disconnected Maximum Common Substructures under Constraints", "author": ["Robert Schmidt", "Florian Krull", "Anna Lina Heinzke", "Matthias Rarey"], "year": "December 16, 2020", "journal": "Journal of Chemical Information and Modeling", "group": "Input", "depth": 0, "citations": 0}, {"doi": "https://doi.org/10.1021/acs.jmedchem.0c01332", "name": "Evolution of Novartis\u2019 Small Molecule Screening Deck Design", "author": ["Ansgar Schuffenhauer", "Nadine Schneider", "Samuel Hintermann", "Douglas Auld", "Jutta Blank", "Simona Cotesta", "Caroline Engeloch", "Nikolas Fechner", "Christoph Gaul", "Jerome Giovannoni", "Johanna Jansen", "John Joslin", "Philipp Krastel", "Eugen Lounkine", "John Manchester", "Lauren G. Monovich", "Anna Paola Pelliccioli", "Manuel Schwarze", "Michael D. Shultz", "Nikolaus Stiefl", "Daniel K. Baeschlin"], "year": "November 3, 2020", "journal": "Journal of Medicinal Chemistry", "group": "Input", "depth": 0, "citations": 8}, {"doi": "https://doi.org/10.1021/acs.jcim.9b00250", "name": "Comparing Molecular Patterns Using the Example of SMARTS: Theory and Algorithms", "author": ["Robert Schmidt", "Emanuel S. R. Ehmki", "Farina Ohm", "Hans-Christian Ehrlich", "Andriy Mashychev", "Matthias Rarey"], "year": "May 23, 2019", "journal": "Journal of Chemical Information and Modeling", "group": "Input", "depth": 0, "citations": 12}], "links": [{"source": "https://doi.org/10.1021/acs.chemrev.1c00107", "target": "https://doi.org/10.1021/acs.jcim.9b00249"}, {"source": "https://doi.org/10.1021/acs.jcim.0c00741", "target": "https://doi.org/10.1021/acs.jcim.9b00249"}, {"source": "https://doi.org/10.1021/acs.jmedchem.0c01332", "target": "https://doi.org/10.1021/acs.jcim.9b00249"}, {"source": "https://doi.org/10.1021/acs.jcim.9b00250", "target": "https://doi.org/10.1021/acs.jcim.9b00249"}]} \ No newline at end of file +{"nodes": [{"doi": "https://doi.org/10.1021/acs.jcim.9b00249", "name": "Comparing Molecular Patterns Using the Example of SMARTS: Applications and Filter Collection Analysis", "author": ["Emanuel S. R. Ehmki", "Robert Schmidt", "Farina Ohm", "Matthias Rarey"], "year": "May 24, 2019", "journal": "Journal of Chemical Information and Modeling", "group": "Input", "depth": 0, "citations": 5}, {"doi": "https://doi.org/10.1021/acs.chemrev.1c00107", "name": "Combining Machine Learning and Computational Chemistry for Predictive Insights Into Chemical Systems", "author": ["John A. Keith", "Valentin Vassilev-Galindo", "Bingqing Cheng", "Stefan Chmiela", "Michael Gastegger", "Klaus-Robert M\u00fcller", "Alexandre Tkatchenko"], "year": "July 7, 2021", "journal": "Chem. Rev.", "group": "Citedby", "depth": 1, "citations": 2}, {"doi": "https://doi.org/10.1021/acs.jcim.0c00741", "name": "Disconnected Maximum Common Substructures under Constraints", "author": ["Robert Schmidt", "Florian Krull", "Anna Lina Heinzke", "Matthias Rarey"], "year": "December 16, 2020", "journal": "Journal of Chemical Information and Modeling", "group": "Citedby", "depth": 1, "citations": 0}, {"doi": "https://doi.org/10.1021/acs.jmedchem.0c01332", "name": "Evolution of Novartis\u2019 Small Molecule Screening Deck Design", "author": ["Ansgar Schuffenhauer", "Nadine Schneider", "Samuel Hintermann", "Douglas Auld", "Jutta Blank", "Simona Cotesta", "Caroline Engeloch", "Nikolas Fechner", "Christoph Gaul", "Jerome Giovannoni", "Johanna Jansen", "John Joslin", "Philipp Krastel", "Eugen Lounkine", "John Manchester", "Lauren G. Monovich", "Anna Paola Pelliccioli", "Manuel Schwarze", "Michael D. Shultz", "Nikolaus Stiefl", "Daniel K. Baeschlin"], "year": "November 3, 2020", "journal": "Journal of Medicinal Chemistry", "group": "Citedby", "depth": 1, "citations": 8}, {"doi": "https://doi.org/10.1021/acs.jcim.9b00250", "name": "Comparing Molecular Patterns Using the Example of SMARTS: Theory and Algorithms", "author": ["Robert Schmidt", "Emanuel S. R. Ehmki", "Farina Ohm", "Hans-Christian Ehrlich", "Andriy Mashychev", "Matthias Rarey"], "year": "May 23, 2019", "journal": "Journal of Chemical Information and Modeling", "group": "Citedby", "depth": 1, "citations": 12}], "links": [{"source": "https://doi.org/10.1021/acs.chemrev.1c00107", "target": "https://doi.org/10.1021/acs.jcim.9b00249"}, {"source": "https://doi.org/10.1021/acs.jcim.0c00741", "target": "https://doi.org/10.1021/acs.jcim.9b00249"}, {"source": "https://doi.org/10.1021/acs.jmedchem.0c01332", "target": "https://doi.org/10.1021/acs.jcim.9b00249"}, {"source": "https://doi.org/10.1021/acs.jcim.9b00250", "target": "https://doi.org/10.1021/acs.jcim.9b00249"}, {"source": "https://doi.org/10.1021/acs.chemrev.1c00107", "target": "https://doi.org/10.1021/acs.jcim.9b00250"}, {"source": "https://doi.org/10.1021/acs.jcim.0c00741", "target": "https://doi.org/10.1021/acs.jcim.9b00250"}, {"source": "https://doi.org/10.1021/acs.jmedchem.0c01332", "target": "https://doi.org/10.1021/acs.jcim.9b00250"}, {"source": "https://doi.org/10.1021/acs.jcim.9b00249", "target": "https://doi.org/10.1021/acs.jcim.9b00250"}]} \ No newline at end of file diff --git a/verarbeitung/test/Processing_unittest.py b/verarbeitung/test/Processing_unittest.py index a595b44..47dd268 100644 --- a/verarbeitung/test/Processing_unittest.py +++ b/verarbeitung/test/Processing_unittest.py @@ -12,16 +12,16 @@ class ProcessingTest(unittest.TestCase): maxDiff = None - # def testCycle(self): - # nodes, edges = process_main(['doiz1'],1,1,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes, ['doiz1', 'doiz2']) - # self.assertCountEqual(edges, [['doiz1', 'doiz2'], ['doiz2', 'doiz1']]) + def testCycle(self): + nodes, edges = process_main(['doiz1'],1,1,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes, ['doiz1', 'doiz2']) + self.assertCountEqual(edges, [['doiz1', 'doiz2'], ['doiz2', 'doiz1']]) - # nodes, edges = process_main(['doiz1'],2,2,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes, ['doiz1', 'doiz2']) - # self.assertCountEqual(edges, [['doiz2', 'doiz1'], ['doiz1', 'doiz2']]) + nodes, edges = process_main(['doiz1'],2,2,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes, ['doiz1', 'doiz2']) + self.assertCountEqual(edges, [['doiz2', 'doiz1'], ['doiz1', 'doiz2']]) #def testBigCycle(self): @@ -29,66 +29,66 @@ class ProcessingTest(unittest.TestCase): #def testEmptyDepth(self): - # def testEmptyDepthHeight(self): - # nodes, edges = process_main(['doi1'],0,0,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes,['doi1']) - # self.assertCountEqual(edges, []) + def testEmptyDepthHeight(self): + nodes, edges = process_main(['doi1'],0,0,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes,['doi1']) + self.assertCountEqual(edges, []) - # nodes, edges = process_main(['doi1', 'doi2'],0,0,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes, ['doi1','doi2']) - # self.assertCountEqual(edges, [['doi1', 'doi2']]) + nodes, edges = process_main(['doi1', 'doi2'],0,0,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes, ['doi1','doi2']) + self.assertCountEqual(edges, [['doi1', 'doi2']]) - # nodes, edges = process_main(['doi1', 'doi2', 'doi3'],0,0,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes, ['doi1','doi2', 'doi3']) - # self.assertCountEqual(edges, [['doi3', 'doi1'], ['doi1', 'doi2']]) + nodes, edges = process_main(['doi1', 'doi2', 'doi3'],0,0,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes, ['doi1','doi2', 'doi3']) + self.assertCountEqual(edges, [['doi3', 'doi1'], ['doi1', 'doi2']]) - # def testInnerEdges(self): - # nodes, edges = process_main(['doi_ie1'],1,1,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes,['doi_ie1','doi_ie2','doi_ie3']) - # self.assertCountEqual(edges,[['doi_ie1','doi_ie2'],['doi_ie3','doi_ie1'],['doi_ie3','doi_ie2']]) + def testInnerEdges(self): + nodes, edges = process_main(['doi_ie1'],1,1,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes,['doi_ie1','doi_ie2','doi_ie3']) + self.assertCountEqual(edges,[['doi_ie1','doi_ie2'],['doi_ie3','doi_ie1'],['doi_ie3','doi_ie2']]) - # def testRightHeight(self): - # nodes, edges = process_main(['doi_h01'],1,0,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes,['doi_h01']) - # self.assertCountEqual(edges, []) - - # nodes, edges = process_main(['doi_h02'],1,0,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes,['doi_h02','doi_h1']) - # self.assertCountEqual(edges, [['doi_h1','doi_h02']]) - - # nodes, edges = process_main(['doi_h02'],2,0,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes,['doi_h02','doi_h1','doi_h2']) - # self.assertCountEqual(edges, [['doi_h1','doi_h02'], ['doi_h2','doi_h1']]) - - # def testRightDepth(self): - # nodes, edges = process_main(['doi_d01'],0,1,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes,['doi_d01']) - # self.assertCountEqual(edges, []) - - # nodes, edges = process_main(['doi_d02'],0,1,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes,['doi_d02','doi_d1']) - # self.assertCountEqual(edges, [['doi_d02','doi_d1']]) - - # nodes, edges = process_main(['doi_d02'],0,2,True) - # doi_nodes = keep_only_dois(nodes) - # self.assertCountEqual(doi_nodes,['doi_d02','doi_d1','doi_d2']) - # self.assertCountEqual(edges, [['doi_d02','doi_d1'], ['doi_d1','doi_d2']]) - - # def test_import_from_json(self): - # nodes_old, edges_old = process_main(['doi_lg_1_i'],2,2,True) - # nodes_new, edges_new = input_from_json('test_output.json') - # self.assertCountEqual(nodes_old,nodes_new) - # self.assertCountEqual(edges_old, edges_new) + def testRightHeight(self): + nodes, edges = process_main(['doi_h01'],1,0,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes,['doi_h01']) + self.assertCountEqual(edges, []) + + nodes, edges = process_main(['doi_h02'],1,0,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes,['doi_h02','doi_h1']) + self.assertCountEqual(edges, [['doi_h1','doi_h02']]) + + nodes, edges = process_main(['doi_h02'],2,0,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes,['doi_h02','doi_h1','doi_h2']) + self.assertCountEqual(edges, [['doi_h1','doi_h02'], ['doi_h2','doi_h1']]) + + def testRightDepth(self): + nodes, edges = process_main(['doi_d01'],0,1,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes,['doi_d01']) + self.assertCountEqual(edges, []) + + nodes, edges = process_main(['doi_d02'],0,1,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes,['doi_d02','doi_d1']) + self.assertCountEqual(edges, [['doi_d02','doi_d1']]) + + nodes, edges = process_main(['doi_d02'],0,2,True) + doi_nodes = keep_only_dois(nodes) + self.assertCountEqual(doi_nodes,['doi_d02','doi_d1','doi_d2']) + self.assertCountEqual(edges, [['doi_d02','doi_d1'], ['doi_d1','doi_d2']]) + + def test_import_from_json(self): + nodes_old, edges_old = process_main(['doi_lg_1_i'],2,2,True) + nodes_new, edges_new = input_from_json('test_output.json') + self.assertCountEqual(nodes_old,nodes_new) + self.assertCountEqual(edges_old, edges_new) def test_deleted_input_dois(self): nodes_old_single, edges_old_single = process_main(['doi_lg_1_i'],2,2,True) diff --git a/verarbeitung/test/input_test.py b/verarbeitung/test/input_test.py index 928c8b4..9efb376 100644 --- a/verarbeitung/test/input_test.py +++ b/verarbeitung/test/input_test.py @@ -14,11 +14,13 @@ def input_test_func(pub_doi): for array in list_of_arrays: if pub_doi == array[0]: - pub = Publication(array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7]) + pub = Publication(array[0], array[1], array[2], array[3], array[4], array[5], [], []) + pub.citations = cit(array[7], "Citation") + pub.references = cit(array[6], "Reference") return pub -def cit(list_doi): +def cit(list_doi, cit_type): ''' :param list_doi list of citation dois to get their Citation Class :type list_doi: List[String] @@ -30,24 +32,9 @@ def cit(list_doi): for doi_url in list_doi: for array in list_of_arrays: if doi_url == array[0]: - cits.append(Citation(array[0], array[1], array[2], array[3], array[4])) + cits.append(Citation(array[0], array[1], array[2], array[3], cit_type)) return cits -def ref(list_doi): - ''' - :param list_doi list of reference dois to get their Reference Class - :type list_doi: List[String] - - returns a list of reference objects for given doi list - ''' - - refs = [] - for doi_url in list_doi: - for array in list_of_arrays: - if doi_url == array[0]: - refs.append(Citation(array[0], array[1], array[2], array[3], array[4])) - return refs - beispiel1 = ['doi1', 'title1', ['contributor1'], 'journal1', 'date1', ['subject1'], ['doi2'], ['doi3']] @@ -91,12 +78,13 @@ large_graph_2_h23 = ['doi_lg_2_h23', 'title_lg_2_h23', ['contributor_lg_2_h23'], large_graph_2_h24 = ['doi_lg_2_h24', 'title_lg_2_h24', ['contributor_lg_2_h24'], 'journal_lg_2_h24', 'date_lg_2_h24', ['subject_lg_2_h24'], ['doi_lg_2_h12','doi_lg_2_h23','doi_lg_2_d12'], ['doi_lg_2_h23']] large_graph_2_h11 = ['doi_lg_2_h11', 'title_lg_2_h11', ['contributor_lg_2_h11'], 'journal_lg_2_h11', 'date_lg_2_h11', ['subject_lg_2_h11'], ['doi_lg_2_i','doi_cg_i'], ['doi_lg_2_h21','doi_lg_2_h22']] large_graph_2_h12 = ['doi_lg_2_h12', 'title_lg_2_h12', ['contributor_lg_2_h12'], 'journal_lg_2_h12', 'date_lg_2_h12', ['subject_lg_2_h12'], ['doi_lg_2_i'], ['doi_lg_2_h23','doi_lg_2_h24']] -large_graph_2_i = ['doi_lg_2_i' , 'title_lg_2_i' , ['contributor_lg_2_i'] , 'journal_lg_2_i' , 'date_lg_2_i' , ['subject_lg_2_i'] , ['doi_lg_2_d11','doi_lg_2_d12'], ['doi_lg_2_h11','doi_lg_2_h12','doi_cg_i']] -large_graph_2_d11 = ['doi_lg_2_d11', 'title_lg_2_d11', ['contributor_lg_2_d11'], 'journal_lg_2_d11', 'date_lg_2_d11', ['subject_lg_2_d11'], [], ['doi_lg_2_i']] -large_graph_2_d12 = ['doi_lg_2_d12', 'title_lg_2_d12', ['contributor_lg_2_d12'], 'journal_lg_2_d12', 'date_lg_2_d12', ['subject_lg_2_d12'], ['doi_lg_2_d21','doi_lg_2_d22'], ['doi_lg_2_h24','doi_lg_2_i']] -large_graph_2_d21 = ['doi_lg_2_d21', 'title_lg_2_d21', ['contributor_lg_2_d21'], 'journal_lg_2_d21', 'date_lg_2_d21', ['subject_lg_2_d21'], [], ['doi_lg_2_d12']] +large_graph_2_i = ['doi_lg_2_i' , 'title_lg_2_i' , ['contributor_lg_2_i'] , 'journal_lg_2_i' , 'date_lg_2_i' , ['subject_lg_2_i'] , ['doi_lg_2_d11','doi_lg_2_d12'], ['doi_lg_2_h11','doi_lg_2_h12','doi_cg_i','doi_lg_2_h11']] +large_graph_2_d11 = ['doi_lg_2_d11', 'title_lg_2_d11', ['contributor_lg_2_d11'], 'journal_lg_2_d11', 'date_lg_2_d11', ['subject_lg_2_d11'], ['doi_lg_2_i','doi_lg_2_d21'], ['doi_lg_2_i']] +large_graph_2_d12 = ['doi_lg_2_d12', 'title_lg_2_d12', ['contributor_lg_2_d12'], 'journal_lg_2_d12', 'date_lg_2_d12', ['subject_lg_2_d12'], ['doi_lg_2_d22','doi_lg_2_d23','doi_lg_2_d24'], ['doi_lg_2_h24','doi_lg_2_i']] +large_graph_2_d21 = ['doi_lg_2_d21', 'title_lg_2_d21', ['contributor_lg_2_d21'], 'journal_lg_2_d21', 'date_lg_2_d21', ['subject_lg_2_d21'], [], ['doi_lg_2_d11']] large_graph_2_d22 = ['doi_lg_2_d22', 'title_lg_2_d22', ['contributor_lg_2_d22'], 'journal_lg_2_d22', 'date_lg_2_d22', ['subject_lg_2_d22'], [], ['doi_lg_2_d12']] large_graph_2_d23 = ['doi_lg_2_d23', 'title_lg_2_d23', ['contributor_lg_2_d23'], 'journal_lg_2_d23', 'date_lg_2_d23', ['subject_lg_2_d23'], [], ['doi_lg_2_d12']] +large_graph_2_d24 = ['doi_lg_2_d24', 'title_lg_2_d24', ['contributor_lg_2_d24'], 'journal_lg_2_d24', 'date_lg_2_d24', ['subject_lg_2_d24'], [], ['doi_lg_2_d12']] crossed_graph_h21 = ['doi_cg_h21', 'title_cg_h21', ['contributor_cg_h21'], 'journal_cg_h21', 'date_cg_h21', ['subject_cg_h21'], ['doi_cg_h11'], []] crossed_graph_h22 = ['doi_cg_h22', 'title_cg_h22', ['contributor_cg_h22'], 'journal_cg_h22', 'date_cg_h22', ['subject_cg_h22'], ['doi_cg_h11'], []] diff --git a/verarbeitung/test/test_graphs_plan.pdf b/verarbeitung/test/test_graphs_plan.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c45b187bf3665e98fc84a4267bad2cbb9e3e64fa GIT binary patch literal 11174 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 literal 0 HcmV?d00001 diff --git a/verarbeitung/test_output.json b/verarbeitung/test_output.json index e5a90e6..40a7bc5 100644 --- a/verarbeitung/test_output.json +++ b/verarbeitung/test_output.json @@ -1 +1 @@ -{"nodes": [{"doi": "doi_lg_1_i", "name": "title_lg_1_i", "author": ["contributor_lg_1_i"], "year": "date_lg_1_i", "journal": "journal_lg_1_i", "group": "Input", "depth": 0, "citations": 2}, {"doi": "doi_lg_1_d11", "name": "title_lg_1_d11", "author": ["contributor_lg_1_d11"], "year": "date_lg_1_d11", "journal": "journal_lg_1_d11", "group": "Reference", "depth": -1, "citations": 1}, {"doi": "doi_lg_1_d12", "name": "title_lg_1_d12", "author": ["contributor_lg_1_d12"], "year": "date_lg_1_d12", "journal": "journal_lg_1_d12", "group": "Reference", "depth": -1, "citations": 2}, {"doi": "doi_lg_1_h11", "name": "title_lg_1_h11", "author": ["contributor_lg_1_h11"], "year": "date_lg_1_h11", "journal": "journal_lg_1_h11", "group": "Citedby", "depth": 1, "citations": 2}, {"doi": "doi_lg_1_h12", "name": "title_lg_1_h12", "author": ["contributor_lg_1_h12"], "year": "date_lg_1_h12", "journal": "journal_lg_1_h12", "group": "Citedby", "depth": 1, "citations": 2}, {"doi": "doi_lg_2_i", "name": "title_lg_2_i", "author": ["contributor_lg_2_i"], "year": "date_lg_2_i", "journal": "journal_lg_2_i", "group": "Input", "depth": 0, "citations": 3}, {"doi": "doi_lg_2_d11", "name": "title_lg_2_d11", "author": ["contributor_lg_2_d11"], "year": "date_lg_2_d11", "journal": "journal_lg_2_d11", "group": "Reference", "depth": -1, "citations": 1}, {"doi": "doi_lg_2_d12", "name": "title_lg_2_d12", "author": ["contributor_lg_2_d12"], "year": "date_lg_2_d12", "journal": "journal_lg_2_d12", "group": "Reference", "depth": -1, "citations": 2}, {"doi": "doi_lg_2_h11", "name": "title_lg_2_h11", "author": ["contributor_lg_2_h11"], "year": "date_lg_2_h11", "journal": "journal_lg_2_h11", "group": "Citedby", "depth": 1, "citations": 2}, {"doi": "doi_lg_2_h12", "name": "title_lg_2_h12", "author": ["contributor_lg_2_h12"], "year": "date_lg_2_h12", "journal": "journal_lg_2_h12", "group": "Citedby", "depth": 1, "citations": 2}, {"doi": "doi_cg_i", "name": "title_cg_i", "author": ["contributor_cg_i"], "year": "date_cg_i", "journal": "journal_cg_i", "group": "Citedby", "depth": 1, "citations": 3}, {"doi": "doi_lg_1_h21", "name": "title_lg_1_h21", "author": ["contributor_lg_1_h21"], "year": "date_lg_1_h21", "journal": "journal_lg_1_h21", "group": "Citedby", "depth": 2, "citations": 0}, {"doi": "doi_lg_1_h22", "name": "title_lg_1_h22", "author": ["contributor_lg_1_h22"], "year": "date_lg_1_h22", "journal": "journal_lg_1_h22", "group": "Citedby", "depth": 2, "citations": 0}, {"doi": "doi_lg_1_h23", "name": "title_lg_1_h23", "author": ["contributor_lg_1_h23"], "year": "date_lg_1_h23", "journal": "journal_lg_1_h23", "group": "Citedby", "depth": 2, "citations": 0}, {"doi": "doi_lg_2_h21", "name": "title_lg_2_h21", "author": ["contributor_lg_2_h21"], "year": "date_lg_2_h21", "journal": "journal_lg_2_h21", "group": "Citedby", "depth": 2, "citations": 0}, {"doi": "doi_lg_2_h22", "name": "title_lg_2_h22", "author": ["contributor_lg_2_h22"], "year": "date_lg_2_h22", "journal": "journal_lg_2_h22", "group": "Citedby", "depth": 2, "citations": 0}, {"doi": "doi_lg_2_h23", "name": "title_lg_2_h23", "author": ["contributor_lg_2_h23"], "year": "date_lg_2_h23", "journal": "journal_lg_2_h23", "group": "Citedby", "depth": 2, "citations": 1}, {"doi": "doi_lg_2_h24", "name": "title_lg_2_h24", "author": ["contributor_lg_2_h24"], "year": "date_lg_2_h24", "journal": "journal_lg_2_h24", "group": "Citedby", "depth": 2, "citations": 1}, {"doi": "doi_cg_h11", "name": "title_cg_h11", "author": ["contributor_cg_h11"], "year": "date_cg_h11", "journal": "journal_cg_h11", "group": "Citedby", "depth": 2, "citations": 2}, {"doi": "doi_lg_1_d21", "name": "title_lg_1_d21", "author": ["contributor_lg_1_d21"], "year": "date_lg_1_d21", "journal": "journal_lg_1_d21", "group": "Reference", "depth": -2, "citations": 2}, {"doi": "doi_lg_1_d22", "name": "title_lg_1_d22", "author": ["contributor_lg_1_d22"], "year": "date_lg_1_d22", "journal": "journal_lg_1_d22", "group": "Reference", "depth": -2, "citations": 2}, {"doi": "doi_lg_1_d23", "name": "title_lg_1_d23", "author": ["contributor_lg_1_d23"], "year": "date_lg_1_d23", "journal": "journal_lg_1_d23", "group": "Reference", "depth": -2, "citations": 2}, {"doi": "doi_lg_2_d21", "name": "title_lg_2_d21", "author": ["contributor_lg_2_d21"], "year": "date_lg_2_d21", "journal": "journal_lg_2_d21", "group": "Reference", "depth": -2, "citations": 1}, {"doi": "doi_lg_2_d22", "name": "title_lg_2_d22", "author": ["contributor_lg_2_d22"], "year": "date_lg_2_d22", "journal": "journal_lg_2_d22", "group": "Reference", "depth": -2, "citations": 1}], "links": [{"source": "doi_lg_1_i", "target": "doi_lg_1_d11"}, {"source": "doi_lg_1_i", "target": "doi_lg_1_d12"}, {"source": "doi_lg_1_h11", "target": "doi_lg_1_i"}, {"source": "doi_lg_1_h12", "target": "doi_lg_1_i"}, {"source": "doi_lg_2_i", "target": "doi_lg_2_d11"}, {"source": "doi_lg_2_i", "target": "doi_lg_2_d12"}, {"source": "doi_lg_2_h11", "target": "doi_lg_2_i"}, {"source": "doi_lg_2_h12", "target": "doi_lg_2_i"}, {"source": "doi_cg_i", "target": "doi_lg_2_i"}, {"source": "doi_lg_1_h21", "target": "doi_lg_1_h11"}, {"source": "doi_lg_1_h22", "target": "doi_lg_1_h11"}, {"source": "doi_lg_1_h22", "target": "doi_lg_1_h12"}, {"source": "doi_lg_1_h23", "target": "doi_lg_1_h12"}, {"source": "doi_lg_2_h21", "target": "doi_lg_2_h11"}, {"source": "doi_lg_2_h22", "target": "doi_lg_2_h11"}, {"source": "doi_lg_2_h23", "target": "doi_lg_2_h12"}, {"source": "doi_lg_2_h24", "target": "doi_lg_2_h12"}, {"source": "doi_lg_2_h24", "target": "doi_lg_2_h23"}, {"source": "doi_lg_2_h23", "target": "doi_lg_2_h24"}, {"source": "doi_lg_1_h23", "target": "doi_cg_i"}, {"source": "doi_cg_h11", "target": "doi_cg_i"}, {"source": "doi_lg_2_h11", "target": "doi_cg_i"}, {"source": "doi_lg_1_d11", "target": "doi_lg_1_d21"}, {"source": "doi_lg_1_d11", "target": "doi_lg_1_d22"}, {"source": "doi_lg_1_d21", "target": "doi_lg_1_d22"}, {"source": "doi_lg_1_d22", "target": "doi_lg_1_d21"}, {"source": "doi_lg_1_d12", "target": "doi_lg_1_d23"}, {"source": "doi_lg_2_d12", "target": "doi_lg_2_d21"}, {"source": "doi_lg_2_d12", "target": "doi_lg_2_d22"}, {"source": "doi_lg_1_h12", "target": "doi_lg_1_d12"}, {"source": "doi_lg_1_h11", "target": "doi_lg_1_h12"}, {"source": "doi_lg_2_h24", "target": "doi_lg_2_d12"}]} \ No newline at end of file +{"nodes": [{"doi": "doi_lg_1_i", "name": "title_lg_1_i", "author": ["contributor_lg_1_i"], "year": "date_lg_1_i", "journal": "journal_lg_1_i", "group": "Input", "depth": 0, "citations": 2}, {"doi": "doi_lg_1_d11", "name": "title_lg_1_d11", "author": ["contributor_lg_1_d11"], "year": "date_lg_1_d11", "journal": "journal_lg_1_d11", "group": "Reference", "depth": -1, "citations": 1}, {"doi": "doi_lg_1_d12", "name": "title_lg_1_d12", "author": ["contributor_lg_1_d12"], "year": "date_lg_1_d12", "journal": "journal_lg_1_d12", "group": "Reference", "depth": -1, "citations": 2}, {"doi": "doi_lg_1_h11", "name": "title_lg_1_h11", "author": ["contributor_lg_1_h11"], "year": "date_lg_1_h11", "journal": "journal_lg_1_h11", "group": "Citedby", "depth": 1, "citations": 2}, {"doi": "doi_lg_1_h12", "name": "title_lg_1_h12", "author": ["contributor_lg_1_h12"], "year": "date_lg_1_h12", "journal": "journal_lg_1_h12", "group": "Citedby", "depth": 1, "citations": 2}, {"doi": "doi_lg_1_h21", "name": "title_lg_1_h21", "author": ["contributor_lg_1_h21"], "year": "date_lg_1_h21", "journal": "journal_lg_1_h21", "group": "Citedby", "depth": 2, "citations": 0}, {"doi": "doi_lg_1_h22", "name": "title_lg_1_h22", "author": ["contributor_lg_1_h22"], "year": "date_lg_1_h22", "journal": "journal_lg_1_h22", "group": "Citedby", "depth": 2, "citations": 0}, {"doi": "doi_lg_1_h23", "name": "title_lg_1_h23", "author": ["contributor_lg_1_h23"], "year": "date_lg_1_h23", "journal": "journal_lg_1_h23", "group": "Citedby", "depth": 2, "citations": 0}, {"doi": "doi_lg_1_d21", "name": "title_lg_1_d21", "author": ["contributor_lg_1_d21"], "year": "date_lg_1_d21", "journal": "journal_lg_1_d21", "group": "Reference", "depth": -2, "citations": 2}, {"doi": "doi_lg_1_d22", "name": "title_lg_1_d22", "author": ["contributor_lg_1_d22"], "year": "date_lg_1_d22", "journal": "journal_lg_1_d22", "group": "Reference", "depth": -2, "citations": 2}, {"doi": "doi_lg_1_d23", "name": "title_lg_1_d23", "author": ["contributor_lg_1_d23"], "year": "date_lg_1_d23", "journal": "journal_lg_1_d23", "group": "Reference", "depth": -2, "citations": 2}], "links": [{"source": "doi_lg_1_i", "target": "doi_lg_1_d11"}, {"source": "doi_lg_1_i", "target": "doi_lg_1_d12"}, {"source": "doi_lg_1_h11", "target": "doi_lg_1_i"}, {"source": "doi_lg_1_h12", "target": "doi_lg_1_i"}, {"source": "doi_lg_1_h21", "target": "doi_lg_1_h11"}, {"source": "doi_lg_1_h22", "target": "doi_lg_1_h11"}, {"source": "doi_lg_1_h22", "target": "doi_lg_1_h12"}, {"source": "doi_lg_1_h23", "target": "doi_lg_1_h12"}, {"source": "doi_lg_1_d11", "target": "doi_lg_1_d21"}, {"source": "doi_lg_1_d11", "target": "doi_lg_1_d22"}, {"source": "doi_lg_1_d21", "target": "doi_lg_1_d22"}, {"source": "doi_lg_1_d22", "target": "doi_lg_1_d21"}, {"source": "doi_lg_1_d12", "target": "doi_lg_1_d23"}, {"source": "doi_lg_1_h12", "target": "doi_lg_1_d12"}, {"source": "doi_lg_1_h11", "target": "doi_lg_1_h12"}]} \ No newline at end of file diff --git a/verarbeitung/update_graph/update_graph_del.py b/verarbeitung/update_graph/update_graph_del.py index c371e0c..eaa25d6 100644 --- a/verarbeitung/update_graph/update_graph_del.py +++ b/verarbeitung/update_graph/update_graph_del.py @@ -29,10 +29,15 @@ def delete_ref_nodes_rec(pub): ''' for reference in pub.references: for ref_pub in processed_list: - if (ref_pub.doi_url == reference): + if (ref_pub.doi_url == reference.doi_url): # to find a cyclus and avoid recursion error - if (reference not in pub.citations): + not_in_citations = True + for citation in pub.citations: + if (reference.doi_url == citation.doi_url): + not_in_citations = False + break + if (not_in_citations): delete_ref_nodes_rec(ref_pub) # removes publication from list after recursion and if it's not of group input @@ -49,10 +54,15 @@ def delete_cit_nodes_rec(pub): ''' for citation in pub.citations: for cit_pub in processed_list: - if (cit_pub.doi_url == citation): + if (cit_pub.doi_url == citation.doi_url): # to find a cyclus and avoid recursion error - if (citation not in pub.references): + not_in_references = True + for reference in pub.references: + if (citation.doi_url == reference.doi_url): + not_in_references = False + break + if (not_in_references): delete_cit_nodes_rec(cit_pub) # removes publication from list after recursion and if it's not of group input -- GitLab