From a2eb55146a8a4f42795b26c475a51069f303d06d Mon Sep 17 00:00:00 2001 From: Malte Schokolowski <baw8441@uni-hamburg.de> Date: Sat, 11 Dec 2021 14:32:52 +0100 Subject: [PATCH] Dateien und Funktionen ausgelagert --- verarbeitung/Processing.py | 290 ------------------ verarbeitung/__init__.py | 0 .../__pycache__/Processing.cpython-36.pyc | Bin 7171 -> 0 bytes .../__pycache__/Processing.cpython-38.pyc | Bin 4087 -> 0 bytes .../__pycache__/Processing.cpython-39.pyc | Bin 7262 -> 0 bytes .../Processing_pub_objs_only.cpython-39.pyc | Bin 4137 -> 0 bytes .../__pycache__/input_fj.cpython-36.pyc | Bin 4299 -> 0 bytes .../__pycache__/input_fj.cpython-38.pyc | Bin 4329 -> 0 bytes .../__pycache__/input_fj.cpython-39.pyc | Bin 4337 -> 0 bytes .../__pycache__/input_test.cpython-36.pyc | Bin 3949 -> 0 bytes .../__pycache__/input_test.cpython-38.pyc | Bin 3865 -> 0 bytes .../__pycache__/input_test.cpython-39.pyc | Bin 7228 -> 0 bytes .../__pycache__/json_demo.cpython-36.pyc | Bin 1128 -> 0 bytes .../__pycache__/json_demo.cpython-38.pyc | Bin 1153 -> 0 bytes .../__pycache__/json_demo.cpython-39.pyc | Bin 1256 -> 0 bytes .../__pycache__/unittest.cpython-36.pyc | Bin 646 -> 0 bytes .../construct_new_graph/Processing.py | 151 +++++++++ verarbeitung/construct_new_graph/__init__.py | 0 .../construct_new_graph/add_citations_rec.py | 151 +++++++++ .../construct_new_graph/add_references_rec.py | 151 +++++++++ .../export_to_json.py} | 0 verarbeitung/dev_files/__init__.py | 0 .../{ => dev_files}/print_graph_test.py | 6 +- verarbeitung/get_pub_from_input.py | 2 +- verarbeitung/json_text.json | 1 - verarbeitung/process_main.py | 0 .../{ => test}/Processing_unittest.py | 240 ++++++++------- verarbeitung/test/__init__.py | 0 verarbeitung/{ => test}/input_test.py | 232 +++++++------- verarbeitung/test_output.json | 2 +- .../{ => update_graph}/Kanten_Vergleich.py | 0 .../{ => update_graph}/Knoten_Vergleich.py | 0 verarbeitung/update_graph/__init__.py | 0 .../{ => update_graph}/connect_new_input.py | 136 ++++---- .../{ => update_graph}/import_from_json.py | 2 +- .../{ => update_graph}/update_graph.py | 8 +- .../{ => update_graph}/update_graph_del.py | 5 +- 37 files changed, 772 insertions(+), 605 deletions(-) delete mode 100644 verarbeitung/Processing.py create mode 100644 verarbeitung/__init__.py delete mode 100644 verarbeitung/__pycache__/Processing.cpython-36.pyc delete mode 100644 verarbeitung/__pycache__/Processing.cpython-38.pyc delete mode 100644 verarbeitung/__pycache__/Processing.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/Processing_pub_objs_only.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/input_fj.cpython-36.pyc delete mode 100644 verarbeitung/__pycache__/input_fj.cpython-38.pyc delete mode 100644 verarbeitung/__pycache__/input_fj.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/input_test.cpython-36.pyc delete mode 100644 verarbeitung/__pycache__/input_test.cpython-38.pyc delete mode 100644 verarbeitung/__pycache__/input_test.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/json_demo.cpython-36.pyc delete mode 100644 verarbeitung/__pycache__/json_demo.cpython-38.pyc delete mode 100644 verarbeitung/__pycache__/json_demo.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/unittest.cpython-36.pyc create mode 100644 verarbeitung/construct_new_graph/Processing.py create mode 100644 verarbeitung/construct_new_graph/__init__.py create mode 100644 verarbeitung/construct_new_graph/add_citations_rec.py create mode 100644 verarbeitung/construct_new_graph/add_references_rec.py rename verarbeitung/{json_demo.py => construct_new_graph/export_to_json.py} (100%) create mode 100644 verarbeitung/dev_files/__init__.py rename verarbeitung/{ => dev_files}/print_graph_test.py (94%) delete mode 100644 verarbeitung/json_text.json create mode 100644 verarbeitung/process_main.py rename verarbeitung/{ => test}/Processing_unittest.py (94%) create mode 100644 verarbeitung/test/__init__.py rename verarbeitung/{ => test}/input_test.py (98%) rename verarbeitung/{ => update_graph}/Kanten_Vergleich.py (100%) rename verarbeitung/{ => update_graph}/Knoten_Vergleich.py (100%) create mode 100644 verarbeitung/update_graph/__init__.py rename verarbeitung/{ => update_graph}/connect_new_input.py (79%) rename verarbeitung/{ => update_graph}/import_from_json.py (99%) rename verarbeitung/{ => update_graph}/update_graph.py (95%) rename verarbeitung/{ => update_graph}/update_graph_del.py (97%) diff --git a/verarbeitung/Processing.py b/verarbeitung/Processing.py deleted file mode 100644 index 4beb8e8..0000000 --- a/verarbeitung/Processing.py +++ /dev/null @@ -1,290 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Functions to generate a graph representing citations between multiple ACS/Nature journals - -""" - -__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski" -__email__ = "cis-project2021@zbh.uni-hamburg.de" -__status__ = "Production" -#__copyright__ = "" -#__credits__ = ["", "", "", ""] -#__license__ = "" -#__version__ = "" -#__maintainer__ = "" - - -import sys -from pathlib import Path -from os import error -sys.path.append("../") - -from input.publication import Publication -from get_pub_from_input import get_pub -from json_demo import output_to_json - - -def initialize_nodes_list(doi_input_list, search_depth_max, search_height_max, test_var): - ''' - :param doi_input_list: input list of doi from UI - :type doi_input_list: List[String] - - :param search_depth_max: maximum depth to search for references - :type search_depth_max: int - - :param search_height_max: maximum height to search for citations - :type search_height_max: int - - :param test_var: variable to differenciate between test and url call - :type test_var: boolean - - adds input dois to nodes and retrieves citations and references for input publications - ''' - - # saves found citations and references in lists - references_pub_obj_list = [] - citations_pub_obj_list = [] - - for pub_doi in doi_input_list: #iterates over every incoming doi - pub = get_pub(pub_doi, test_var) - if (type(pub) != Publication): - print(pub) - continue - - # checks if publication already exists in nodes - not_in_nodes = True #boolean value to check if a node already exists in the set of nodes - for node in nodes: #iterates over every node in the set of nodes - if (pub.doi_url == node.doi_url): #determines that a node with this doi already is in the set - not_in_nodes = False #false --> node will not be created - break - if (not_in_nodes): #there is no node with this doi in the set - nodes.append(pub) #appends Publication Object - pub.group = "input" - else: - doi_input_list.remove(pub_doi) #deletes the doi-dublicate from input list - - # inserts references as publication objects into list and - # inserts first depth references into nodes/edges if maximum search depth > 0 - for reference in create_graph_structure_references(pub, 0, search_depth_max, test_var): - references_pub_obj_list.append(reference) - - # inserts citations as publication objects into list and - # inserts first height citations into nodes if maximum search height > 0 - for citation in create_graph_structure_citations(pub, 0, search_height_max, test_var): - citations_pub_obj_list.append(citation) - - return(references_pub_obj_list, citations_pub_obj_list) - - - -def complete_inner_edges(test_var): - ''' - :param test_var: variable to differenciate between test and url call - :type test_var: boolean - - completes inner edges between nodes of group height and depth - ''' - - for node in nodes: - if (node.group == "depth"): - 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]) - if (node.group == "height"): - 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]) - - - -def create_graph_structure_references(pub, search_depth, search_depth_max, test_var): - ''' - :param pub: publication which references will be added - :type pub: Publication - - :param search_depth: current depth to search for references - :type search_depth: int - - :param search_depth_max: maximum depth to search for references - :type search_depth_max: int - - :param test_var: variable to differenciate between test and url call - :type test_var: boolean - - adds a node for every referenced publication unknown - adds edges to added references - ''' - - references_pub_obj_list = [] - for reference in pub.references: #iterates over the references of the considered paper - not_in_nodes = True #boolean Value to ensure that there will be no dublicates in the set of nodes - for node in nodes: #iterates over all nodes in set of nodes # - if (reference == node.doi_url): #determines that the node already exists - not_in_nodes = False #boolean false --> node will not be created - break - if (not_in_nodes): #checks that there is no node with this doi - if (search_depth < search_depth_max): #checks that the recursion step is smaller than the limit - reference_pub_obj = get_pub(reference, test_var) - if (type(reference_pub_obj) != Publication): - print(pub) - continue - - reference_pub_obj.group = "depth" - nodes.append(reference_pub_obj) # appends the object to the set of nodes - edges.append([pub.doi_url,reference_pub_obj.doi_url]) #appends the edge to the set of edges - references_pub_obj_list.append(reference_pub_obj) #appends the node to the set of references - - # adds edge only if citation already exists - elif [pub.doi_url,reference] not in edges: - edges.append([pub.doi_url,reference]) - return references_pub_obj_list - - -def process_references_rec(references_pub_obj_list, search_depth, search_depth_max, test_var): - ''' - :param references_pub_obj_list: list of publications which references will be added - :type references_pub_obj_list: List[Publication] - - :param search_depth: current depth to search for references - :type search_depth: int - - :param search_depth_max: maximum depth to search for references - :type search_depth_max: int - - :param test_var: variable to differenciate between test and url call - :type test_var: boolean - - recursive function to implement height-first-search on references - ''' - - # adds next level to nodes/edges - for pub in references_pub_obj_list: - new_reference_pub_obj_list = create_graph_structure_references(pub, search_depth, search_depth_max, test_var) - - # If the maximum height has not yet been reached, calls function recursivly with increased height - if (search_depth < search_depth_max): - process_references_rec(new_reference_pub_obj_list, search_depth+1, search_depth_max, test_var) - - - -def create_graph_structure_citations(pub, search_height, search_height_max, test_var): - ''' - :param pub: publication which citations will be added - :type pub: Publication - - :param search_height: current height to search for citations - :type search_height_max: int - - :param search_height_max: maximum height to search for citations - :type search_height_max: int - - :param test_var: variable to differenciate between test and url call - :type test_var: boolean - - adds a node for every citing publication unknown - adds edges to added citations - ''' - - citations_pub_obj_list = [] - for citation in pub.citations: - not_in_nodes = True - for node in nodes: # checks every citation for duplication - if (citation == node.doi_url): - not_in_nodes = False - break - if (not_in_nodes): - if (search_height < search_height_max): #checks if its a test and chooses input function accordingly - citation_pub_obj = get_pub(citation, test_var) - if (type(citation_pub_obj) != Publication): - print(pub) - continue - - citation_pub_obj.group = "height" - nodes.append(citation_pub_obj) - edges.append([citation_pub_obj.doi_url,pub.doi_url]) - citations_pub_obj_list.append(citation_pub_obj) - - # adds only edge if citation already exists - elif [citation,pub.doi_url] not in edges: - edges.append([citation,pub.doi_url]) - return citations_pub_obj_list - - -def process_citations_rec(citations_pub_obj_list, search_height, search_height_max, test_var): - ''' - :param citations_pub_obj_list: list of publications which citations will be added - :type citations_pub_obj_list: List[Publication] - - :param search_height: current height to search for citations - :type search_height_max: int - - :param search_height_max: maximum height to search for citations - :type search_height_max: int - - :param test_var: variable to differenciate between test and url call - :type test_var: boolean - - recursive function to implement depth-first-search on citations - ''' - - # adds next level to nodes/edges - for pub in citations_pub_obj_list: - new_citation_pub_obj_list = create_graph_structure_citations(pub, search_height, search_height_max, test_var) - - # If the maximum height has not yet been reached, calls function recursivly with increased height - if (search_height < search_height_max): - process_citations_rec(new_citation_pub_obj_list, search_height+1, search_height_max, test_var) - - - -def process_main(doi_input_list, search_height, search_depth, test_var = False): - ''' - :param doi_input_list: input list of doi from UI - :type doi_input_list: list of strings - - :param search_height: maximum height to search for citations - :type search_height: int - - :param search_depth: maximum depth to search for references - :type search_depth: int - - :param test_var: variable to differenciate between test and url call - :type test_var: boolean - - main function to start graph generation - ''' - - # ERROR-Handling doi_array = NULL - if (len(doi_input_list) == 0): - print("Error, no input data") - - # ERROR- if a negative number is entered for height - if (search_height < 0): - print("Error, search_height of search must be positive") - - # ERROR- if a negative number is entered for depth - if (search_depth < 0): - print("Error, search_depth of search must be positive") - - - # creates empty lists to save nodes and edges - global nodes, edges - nodes = [] - edges = [] - - # initializes nodes/edges from input and gets a list with publication objects for citations and references returned - references_obj_list, citations_obj_list = initialize_nodes_list(doi_input_list,search_depth, search_height, test_var) - - # function calls to begin recursive processing up to max depth/height - process_citations_rec(citations_obj_list, 1, search_height, test_var) - process_references_rec(references_obj_list, 1, search_depth, test_var) - - # adds edges between reference group and citation group of known publications - complete_inner_edges(test_var) - - # calls a skript to save nodes and edges of graph in .json file - output_to_json(nodes,edges, test_var) - - return(nodes,edges) diff --git a/verarbeitung/__init__.py b/verarbeitung/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/verarbeitung/__pycache__/Processing.cpython-36.pyc b/verarbeitung/__pycache__/Processing.cpython-36.pyc deleted file mode 100644 index 203d7b80e86c1714067062b8efd787fd591d82e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7171 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 E0mQ(Kj{pDw diff --git a/verarbeitung/__pycache__/Processing.cpython-38.pyc b/verarbeitung/__pycache__/Processing.cpython-38.pyc deleted file mode 100644 index 1906483bf8be5183bfad874433aca0cd4a75a8fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4087 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 diff --git a/verarbeitung/__pycache__/Processing.cpython-39.pyc b/verarbeitung/__pycache__/Processing.cpython-39.pyc deleted file mode 100644 index a86e804167e4c2fdf2e9a1f4b354ef6506381740..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7262 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 diff --git a/verarbeitung/__pycache__/Processing_pub_objs_only.cpython-39.pyc b/verarbeitung/__pycache__/Processing_pub_objs_only.cpython-39.pyc deleted file mode 100644 index 9ce1023e6ea54e1b04b37ad5a1fd08115d5f52a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4137 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 I-*Mc31K1MBoB#j- diff --git a/verarbeitung/__pycache__/input_fj.cpython-36.pyc b/verarbeitung/__pycache__/input_fj.cpython-36.pyc deleted file mode 100644 index 04312c91f0a7675651e99a2a6c10a2c9da146758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4299 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 angN(Hnv`b&T3WByYg*T=7JgT({r>^(Ul4@= diff --git a/verarbeitung/__pycache__/input_fj.cpython-38.pyc b/verarbeitung/__pycache__/input_fj.cpython-38.pyc deleted file mode 100644 index 515ab99c01a5ce78bb5bb6de554a4dae3ffe4b4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4329 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 diff --git a/verarbeitung/__pycache__/input_fj.cpython-39.pyc b/verarbeitung/__pycache__/input_fj.cpython-39.pyc deleted file mode 100644 index 175f9ebbfdf5f3313196b4f10aa01dc2e8e20509..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4337 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 diff --git a/verarbeitung/__pycache__/input_test.cpython-36.pyc b/verarbeitung/__pycache__/input_test.cpython-36.pyc deleted file mode 100644 index 956c497bc38c9471bc9e7cb52a870cd1174cceee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3949 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 diff --git a/verarbeitung/__pycache__/input_test.cpython-38.pyc b/verarbeitung/__pycache__/input_test.cpython-38.pyc deleted file mode 100644 index 35b42ad4c56ad3a65838c0ccc2716b9aea899b5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3865 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 Oukrw0Vj2IX4EHxT)6pOR diff --git a/verarbeitung/__pycache__/input_test.cpython-39.pyc b/verarbeitung/__pycache__/input_test.cpython-39.pyc deleted file mode 100644 index 550ce300289531fa2018d232b0f3bbf9986d3cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7228 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 diff --git a/verarbeitung/__pycache__/json_demo.cpython-36.pyc b/verarbeitung/__pycache__/json_demo.cpython-36.pyc deleted file mode 100644 index 5c3a9cbc487bf90532dafb33e6c3ae84f57f6758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmZuw&2AGh5Vm){KTXpR6%JHfkbpxZ(n!FuLX`?9P*kWyQ6yMx*G{_WX1&;6+M>-V z+<6Xeh_~PseC5<v;KYp6U&Kb9`DW~$_00F>>DpTB*Uum6tB{c2<l5r_-iD<gg5iYI zf{Y0Fxc`-mC}%tX@9~gF;C)W_NH0EvlVq4tbnvkAwF6!&ForD1oSuvu@`8N$IQI;N z*l)b4*Fc3W0>}sCIm7_@4h4XiLm{BRp$Jg8MNACutSl%*5#;H#)%Xia$*1-{M0ls6 zWo0@OqcE+_p;VTgid5NXDr;4y1>9WbHkc?`S9T@KO=@yk>fWklMXrryJkN{`Ol}Hc z+nFql$`5KImA2igJ}C0cy^!$K2!;LH2nr^(DpY`xUx-q{WQh&asuCsdF-zasbu6C9 zaZ*Yy68wgSYXTm{r8stp??kP`dw+HZhjJzcX_3Qq^Rhk}?Bsj>T_vaD$PBW)ulv<9 z=zkU}RR<zBbvYT_2&P(=2^TZDS)JPUSgKiS+_&{Ad_&&_Lug1_ZneNKe;wMP>JIGv zpVDpEIj8iQqxA6=rJQaMAjMJ1eTR`kid5eqC>Sc#iw!j}l8LirU{W;^rst~&_Ee0f z0|uw}@@jg5PcEm2c+|R>Uh>3EZ)t90{fn;goW2JcjRh~dZqqjQiunwMj}Ow;g5~7< z8i4B+MB9)Bo%_aXD0q-*<2ms%@X)UT*>bk<zOBy#!=^#wHNnE8WFP)SZ^&En9y|y$ z7}@|C*ERrJkMx(0Bgu#pvx&&k<6gMz92sy|vrK}9EOYye*Ru+a+`?UCaI}g-LRF<j zp}Lsf0AnLrn{i%<e<#v`d{vvo$OH>Mg0q)1iRtp!rs@IYdraL2=d|E%;<DEYqEwZe WbG$W^ye`CZ9HYh=#w&3*Zv6#e!4Oyg diff --git a/verarbeitung/__pycache__/json_demo.cpython-38.pyc b/verarbeitung/__pycache__/json_demo.cpython-38.pyc deleted file mode 100644 index 4daf8e7b50fdad59d6cac52e92a9ab3bd02a395f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1153 zcmZ`(&2AGh5Vm){n@yTVr4oMv2@W6;iS&TP1w{y{ATAI=s{*P5tL@qin{L*N?WMHZ zN=V_(E3`*WybDKPIaRy?CuST%0}_rr^Uc^h_RKfV*79<T!1(d)Yw|H9<U1OR!vo_1 zOnn0cC!FSFn{bc&pU5`lj0d1S9`XigpVLj!jZR@F8Ke}|@4-OhT!*O(5Qa?25v|EX z^7_q@XDC>H?Tx(}V)O|hACTt|1LQjt0Adb>fC7gafWkg85q#5}Qm`7}r^l_@KcSSo zYt`;f1IvnJB5asc=B-qg9f(BP##mOWNOJ3Qnb}~ZWK|w^(##|#lg0H^R)y&<S(azo zSjMx|*uZ2a7q*?s!l-PgGE!-~QdT>8mb$NEo*1D5$k8?+YFw#YHPG^NQP}1@xQ45g zr6_opS^C1R;t{djjSI;|j3;ThF<=`NV&6Hw5Op5n{M=Z-H{8-f>EY8PH)8lWGsE?4 zv-eENvDh=iH0$YJIWv0ig-X<p$V^p?hJP7jEsL0oiCilWY<pL#Nn+gTdI?U^mp~92 z(g<d2;n$&UsxHFX|M~61>H@#F&-mr^G69AhuiSSS`J~6d`vP0RKw<OPPy;=wIGq_L zQ6pixzKUQ?HBqd9!1_HptDoSbKlMXwTl4zGcU=8u;sVB>XN~*x74YZ|h<Vm+$P{wD z2A&jO!F<3gA$Yp$<tG4KuF%6ZnbITQcr^tLU0Zvuml<ft*gzL^HuXNQ9tDOS2enrR zCmtm)$zAfCY>-#*y5RK$0~;Xk+6H-6?CHafBg%*mW(|?0``vJsJ+k1gXPJafvdpbB zUQJ5aat>E9DZ7O2guRvIxmrc{RdhFGWp=Y%{9Ba{_{++~M#dQMChT3PO9UMeVO?&4 nzsnT<Ex3MgH*wyDfY`9g)jH}=B(HLDA4{pRhEX$GiCVt^o+248 diff --git a/verarbeitung/__pycache__/json_demo.cpython-39.pyc b/verarbeitung/__pycache__/json_demo.cpython-39.pyc deleted file mode 100644 index 3a90cf68398464b1132fc65f1a598bac313a51a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1256 zcmah}O>fgM7`789&AJcDK;lzKNN}jMO~8Qznh?@JoTv~JLqvrri@lO9O^WSoY-+`! zoZ*TPhwaFfpW`d1{RK`ub{P~Tgd@Lx{QC2KpT|k(=bHrO?WeD4t3k*&+nFvNI`>f3 zH5g7fEl5nb$NhICrkwErt;a*&K<jh5PTJ8iW|B@uZS%7*w6?CHsuD(%F&WVzxldla z9C@0e=MTMYZ-_ls36KxuImCc`hXNqxPzV$_)Bp-siH@*lW=zp*z)ugGL;r|U^13;6 zck1ABRc=_B_C*|~wSHB}nC**Hn#Oij%Q7uY(34d?Ff&=MQ=M0(YR?*0<VqXH^Gurt zc1UW8i8|MXFmqW|YMF1=x{}JY2K8o<XKrP}Q!S*AIHir+_=PBCU{RP32BPF`X6S}l zw3{c@R#H}6B=!u28v@5sDfXP>3z4U>?)#JMPWP!2Qgt7tg%;h1x$dsz>&uU2wJmmZ zH_MmR@?g?g-W4*Hn<CeB+3Wt%*;ZAVaM7<;2K#1itCIaxyVKPyPEqG!2n}h3+MN0p z=p2=2F!pa!S1~$8>e6pgIlVwYizAc!4qFoGA;_MhDCkJ57!xYck%{9;N2jtUblaC9 z#v}wv<UEYc--F-z6TJ5;e-_8hll&#OT>d6z(e8f|wVkIf!J`&nPNJSeq=@w*JelS1 zq}Y=qR43ri04`QvL&9S^V%i&0w87Ad)e6{3)kQ2fHRQ|L*!ysK6l!*ekzsh`QSuDW ziQyajkm<*pL~Yz4)P2uk%iCBN{BK>^!n*g<>o~y^3_B*UI#O{^<mHY!XlY@UR_j5n zSF8vO-8)!tYS7}%#MKTb`L#T|1Q=F9tA@GxjMx1^yCH3|<T)4<xjlDN8P8hjS{<iF zAy3%}R!DIJ=WXSM_?v-+$vqNXC3frUn5)jhOgM<3zKAlgu;hV>tMIp(yn@Cl(A~^= dr?$0EL^^h()qch6Lfp0gEoDU$%|xxJ`2$NjC*%MC diff --git a/verarbeitung/__pycache__/unittest.cpython-36.pyc b/verarbeitung/__pycache__/unittest.cpython-36.pyc deleted file mode 100644 index 245eb7f9be9221daa930d9fa83c77368ba463af7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmY*Wy-ve05I#Fj32k9OOuRvbO8Ai&5JHtI#8!}C%3_7u4QZ1U>;yr@*1ic7FTsO& zW#Sc>xJyA4NB8;8&VBdY`DkOKdHntw?=pZ7SXl!79-2KtP@q@_5$!x<IgdDl3s9aC z3s6GC*qeKi(7y5~+#F-vm;=L{Yv?pSF&_pU=GymWI@H$6JWh)to&GM4P7lp)BWQ@2 zf`}`o_yQtNdB`H%=G8JgEs`5;%OUEm7wrwSKAPP}c!4pLOtA#>@$=>anM6W-gcv0} z;UhlB9uy$AKXAU9rn7@j;<{M|haK)(v9;Qi=MPn!8PbSN2&=Qv8<=$rzb?bOX|BUK zOAE5<DeR}$T@*UjlQJBpUE9T;Dd;|G6PsI|mQ|62|AMMW%Mv@<yMJ~qa(){1v4W+l zz-BxDo8MdcZGf{0q%7iGOX-?Y=2KN=<hP|H<;xq>LZVvr3N-1=L!ig5YXz*1iIHAO z%Fdb#eigdrpNx7QE}*CA$2cWoF>M4VC~>6-P0COu7o0A&oza|afDo`Y-x2})20ucc A$^ZZW diff --git a/verarbeitung/construct_new_graph/Processing.py b/verarbeitung/construct_new_graph/Processing.py new file mode 100644 index 0000000..a9a85f9 --- /dev/null +++ b/verarbeitung/construct_new_graph/Processing.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- +""" +Functions to generate a graph representing citations between multiple ACS/Nature journals + +""" + +__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski" +__email__ = "cis-project2021@zbh.uni-hamburg.de" +__status__ = "Production" +#__copyright__ = "" +#__credits__ = ["", "", "", ""] +#__license__ = "" +#__version__ = "" +#__maintainer__ = "" + + +import sys +from pathlib import Path +from os import error +sys.path.append("../") + +from input.publication import Publication +from verarbeitung.get_pub_from_input import get_pub +from .export_to_json import output_to_json +from .add_citations_rec import add_citations, create_global_lists_cit +from .add_references_rec import add_references, create_global_lists_ref + + +def initialize_nodes_list(doi_input_list, search_depth_max, search_height_max, test_var): + ''' + :param doi_input_list: input list of doi from UI + :type doi_input_list: List[String] + + :param search_depth_max: maximum depth to search for references + :type search_depth_max: int + + :param search_height_max: maximum height to search for citations + :type search_height_max: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + adds input dois to nodes and retrieves citations and references for input publications + ''' + + # saves found citations and references in lists + references_pub_obj_list = [] + citations_pub_obj_list = [] + + for pub_doi in doi_input_list: #iterates over every incoming doi + pub = get_pub(pub_doi, test_var) + if (type(pub) != Publication): + print(pub) + continue + + # checks if publication already exists in nodes + not_in_nodes = True #boolean value to check if a node already exists in the set of nodes + for node in nodes: #iterates over every node in the set of nodes + if (pub.doi_url == node.doi_url): #determines that a node with this doi already is in the set + not_in_nodes = False #false --> node will not be created + break + if (not_in_nodes): #there is no node with this doi in the set + nodes.append(pub) #appends Publication Object + pub.group = "input" + else: + doi_input_list.remove(pub_doi) #deletes the doi-dublicate from input list + + # inserts references as publication objects into list and + # inserts first depth references into nodes/edges if maximum search depth > 0 + for reference in create_global_lists_ref(nodes, edges, pub, 0, search_depth_max, test_var): + references_pub_obj_list.append(reference) + + # inserts citations as publication objects into list and + # inserts first height citations into nodes if maximum search height > 0 + for citation in create_global_lists_cit(nodes, edges, pub, 0, search_height_max, test_var): + citations_pub_obj_list.append(citation) + + return(references_pub_obj_list, citations_pub_obj_list) + + + +def complete_inner_edges(test_var): + ''' + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + completes inner edges between nodes of group height and depth + ''' + + for node in nodes: + if (node.group == "depth"): + 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]) + if (node.group == "height"): + 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]) + + +def process_main(doi_input_list, search_height, search_depth, test_var = False): + ''' + :param doi_input_list: input list of doi from UI + :type doi_input_list: list of strings + + :param search_height: maximum height to search for citations + :type search_height: int + + :param search_depth: maximum depth to search for references + :type search_depth: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + main function to start graph generation + ''' + + # ERROR-Handling doi_array = NULL + if (len(doi_input_list) == 0): + print("Error, no input data") + + # ERROR- if a negative number is entered for height + if (search_height < 0): + print("Error, search_height of search must be positive") + + # ERROR- if a negative number is entered for depth + if (search_depth < 0): + print("Error, search_depth of search must be positive") + + + # creates empty lists to save nodes and edges + global nodes, edges + nodes = [] + edges = [] + + # initializes nodes/edges from input and gets a list with publication objects for citations and references returned + references_obj_list, citations_obj_list = initialize_nodes_list(doi_input_list,search_depth, search_height, test_var) + + # function calls to begin recursive processing up to max depth/height + add_citations(nodes, edges, citations_obj_list, 1, search_height, test_var) + add_references(nodes, edges, references_obj_list, 1, search_depth, test_var) + + # adds edges between reference group and citation group of known publications + complete_inner_edges(test_var) + + # calls a skript to save nodes and edges of graph in .json file + output_to_json(nodes,edges, test_var) + + return(nodes,edges) diff --git a/verarbeitung/construct_new_graph/__init__.py b/verarbeitung/construct_new_graph/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/verarbeitung/construct_new_graph/add_citations_rec.py b/verarbeitung/construct_new_graph/add_citations_rec.py new file mode 100644 index 0000000..6dd815f --- /dev/null +++ b/verarbeitung/construct_new_graph/add_citations_rec.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- +""" +Functions to add citations recursivly for multiple ACS/Nature journals + +""" + +__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski" +__email__ = "cis-project2021@zbh.uni-hamburg.de" +__status__ = "Production" +#__copyright__ = "" +#__credits__ = ["", "", "", ""] +#__license__ = "" +#__version__ = "" +#__maintainer__ = "" + + +import sys +from pathlib import Path +from os import error +sys.path.append("../../") + +from input.publication import Publication +from verarbeitung.get_pub_from_input import get_pub + +def create_global_lists_cit(input_nodes, input_edges, pub, search_height, search_height_max, test_var): + ''' + :param input_nodes: list of nodes from Processing + :type input_nodes: List[Publication] + + :param input_edges: list of edges from Processing + :type input_edges: List[String, String] + + :param pub: Publication which citations will be added + :type pub: Publication + + :param search_height: current height to search for citations + :type search_height_max: int + + :param search_height_max: maximum height to search for citations + :type search_height_max: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + function to create nodes and edges and call create_graph_structure_citations + ''' + + global nodes, edges + nodes = input_nodes + edges = input_edges + + return create_graph_structure_citations(pub, search_height, search_height_max, test_var) + + +def create_graph_structure_citations(pub, search_height, search_height_max, test_var): + ''' + :param pub: publication which citations will be added + :type pub: Publication + + :param search_height: current height to search for citations + :type search_height_max: int + + :param search_height_max: maximum height to search for citations + :type search_height_max: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + adds a node for every citing publication unknown + adds edges to added citations + ''' + + citations_pub_obj_list = [] + for citation in pub.citations: + not_in_nodes = True + for node in nodes: # checks every citation for duplication + if (citation == node.doi_url): + not_in_nodes = False + break + if (not_in_nodes): + if (search_height < search_height_max): #checks if its a test and chooses input function accordingly + citation_pub_obj = get_pub(citation, test_var) + if (type(citation_pub_obj) != Publication): + print(pub) + continue + + citation_pub_obj.group = "height" + nodes.append(citation_pub_obj) + edges.append([citation_pub_obj.doi_url,pub.doi_url]) + citations_pub_obj_list.append(citation_pub_obj) + + # adds only edge if citation already exists + elif [citation,pub.doi_url] not in edges: + edges.append([citation,pub.doi_url]) + return citations_pub_obj_list + + +def process_citations_rec(citations_pub_obj_list, search_height, search_height_max, test_var): + ''' + :param citations_pub_obj_list: list of publications which citations will be added + :type citations_pub_obj_list: List[Publication] + + :param search_height: current height to search for citations + :type search_height_max: int + + :param search_height_max: maximum height to search for citations + :type search_height_max: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + recursive function to implement depth-first-search on citations + ''' + + # adds next level to nodes/edges + for pub in citations_pub_obj_list: + new_citation_pub_obj_list = create_graph_structure_citations(pub, search_height, search_height_max, test_var) + + # If the maximum height has not yet been reached, calls function recursivly with increased height + if (search_height < search_height_max): + process_citations_rec(new_citation_pub_obj_list, search_height+1, search_height_max, test_var) + + +def add_citations(input_nodes, input_edges, citations_pub_obj_list, search_height, search_height_max, test_var): + ''' + :param input_nodes: list of nodes from Processing + :type input_nodes: List[Publication] + + :param input_edges: list of edges from Processing + :type input_edges: List[String, String] + + :param citations_pub_obj_list: list of publications which citations will be added + :type citations_pub_obj_list: List[Publication] + + :param search_height: current height to search for citations + :type search_height_max: int + + :param search_height_max: maximum height to search for citations + :type search_height_max: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + function to call recursive depth-first-search of citations + ''' + global nodes, edges + nodes = input_nodes + edges = input_edges + + process_citations_rec(citations_pub_obj_list, search_height, search_height_max, test_var) + return(nodes, edges) \ No newline at end of file diff --git a/verarbeitung/construct_new_graph/add_references_rec.py b/verarbeitung/construct_new_graph/add_references_rec.py new file mode 100644 index 0000000..320bc21 --- /dev/null +++ b/verarbeitung/construct_new_graph/add_references_rec.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- +""" +Functions to add references recursivly for multiple ACS/Nature journals + +""" + +__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski" +__email__ = "cis-project2021@zbh.uni-hamburg.de" +__status__ = "Production" +#__copyright__ = "" +#__credits__ = ["", "", "", ""] +#__license__ = "" +#__version__ = "" +#__maintainer__ = "" + + +import sys +from pathlib import Path +from os import error +sys.path.append("../../") + +from input.publication import Publication +from verarbeitung.get_pub_from_input import get_pub + +def create_global_lists_ref(input_nodes, input_edges, pub, search_depth, search_depth_max, test_var): + ''' + :param input_nodes: list of nodes from Processing + :type input_nodes: List[Publication] + + :param input_edges: list of edges from Processing + :type input_edges: List[String, String] + + :param pub: Publication which references will be added + :type pub: Publication + + :param search_height: current height to search for references + :type search_height_max: int + + :param search_height_max: maximum height to search for references + :type search_height_max: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + function to create nodes and edges and call create_graph_structure_references + ''' + + global nodes, edges + nodes = input_nodes + edges = input_edges + + return create_graph_structure_references(pub, search_depth, search_depth_max, test_var) + + +def create_graph_structure_references(pub, search_depth, search_depth_max, test_var): + ''' + :param pub: publication which references will be added + :type pub: Publication + + :param search_depth: current depth to search for references + :type search_depth: int + + :param search_depth_max: maximum depth to search for references + :type search_depth_max: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + adds a node for every referenced publication unknown + adds edges to added references + ''' + + references_pub_obj_list = [] + for reference in pub.references: #iterates over the references of the considered paper + not_in_nodes = True #boolean Value to ensure that there will be no dublicates in the set of nodes + for node in nodes: #iterates over all nodes in set of nodes # + if (reference == node.doi_url): #determines that the node already exists + not_in_nodes = False #boolean false --> node will not be created + break + if (not_in_nodes): #checks that there is no node with this doi + if (search_depth < search_depth_max): #checks that the recursion step is smaller than the limit + reference_pub_obj = get_pub(reference, test_var) + if (type(reference_pub_obj) != Publication): + print(pub) + continue + + reference_pub_obj.group = "depth" + nodes.append(reference_pub_obj) # appends the object to the set of nodes + edges.append([pub.doi_url,reference_pub_obj.doi_url]) #appends the edge to the set of edges + references_pub_obj_list.append(reference_pub_obj) #appends the node to the set of references + + # adds edge only if citation already exists + elif [pub.doi_url,reference] not in edges: + edges.append([pub.doi_url,reference]) + return references_pub_obj_list + + +def process_references_rec(references_pub_obj_list, search_depth, search_depth_max, test_var): + ''' + :param references_pub_obj_list: list of publications which references will be added + :type references_pub_obj_list: List[Publication] + + :param search_depth: current depth to search for references + :type search_depth: int + + :param search_depth_max: maximum depth to search for references + :type search_depth_max: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + recursive function to implement height-first-search on references + ''' + + # adds next level to nodes/edges + for pub in references_pub_obj_list: + new_reference_pub_obj_list = create_graph_structure_references(pub, search_depth, search_depth_max, test_var) + + # If the maximum height has not yet been reached, calls function recursivly with increased height + if (search_depth < search_depth_max): + process_references_rec(new_reference_pub_obj_list, search_depth+1, search_depth_max, test_var) + + +def add_references(input_nodes, input_edges, references_pub_obj_list, search_height, search_height_max, test_var): + ''' + :param input_nodes: list of nodes from Processing + :type input_nodes: List[Publication] + + :param input_edges: list of edges from Processing + :type input_edges: List[String, String] + + :param references_pub_obj_list: list of publications which references will be added + :type references_pub_obj_list: List[Publication] + + :param search_height: current height to search for references + :type search_height_max: int + + :param search_height_max: maximum height to search for references + :type search_height_max: int + + :param test_var: variable to differenciate between test and url call + :type test_var: boolean + + function to call recursive depth-first-search of references + ''' + global nodes, edges + nodes = input_nodes + edges = input_edges + + process_references_rec(references_pub_obj_list, search_height, search_height_max, test_var) + return(nodes, edges) \ No newline at end of file diff --git a/verarbeitung/json_demo.py b/verarbeitung/construct_new_graph/export_to_json.py similarity index 100% rename from verarbeitung/json_demo.py rename to verarbeitung/construct_new_graph/export_to_json.py diff --git a/verarbeitung/dev_files/__init__.py b/verarbeitung/dev_files/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/verarbeitung/print_graph_test.py b/verarbeitung/dev_files/print_graph_test.py similarity index 94% rename from verarbeitung/print_graph_test.py rename to verarbeitung/dev_files/print_graph_test.py index efb62ec..f5e3a03 100644 --- a/verarbeitung/print_graph_test.py +++ b/verarbeitung/dev_files/print_graph_test.py @@ -19,9 +19,9 @@ import sys #sys.path.insert(1, 'C:\Users\Malte\Git\CiS-Projekt\ci-s-projekt-verarbeitung\input') sys.path.append("../") from input.interface import InputInterface as Input -from Processing import process_main -from import_from_json import input_from_json -from update_graph import check_graph_updates +from verarbeitung.construct_new_graph.Processing import process_main +from verarbeitung.update_graph.import_from_json import input_from_json +from update_graph.update_graph import check_graph_updates # a function to print nodes and edges from a graph def print_graph(nodes, edges): diff --git a/verarbeitung/get_pub_from_input.py b/verarbeitung/get_pub_from_input.py index a8636a4..9cf4b9c 100644 --- a/verarbeitung/get_pub_from_input.py +++ b/verarbeitung/get_pub_from_input.py @@ -19,7 +19,7 @@ from pathlib import Path sys.path.append("../") from input.interface import InputInterface as Input -from input_test import input_test_func +from verarbeitung.test.input_test import input_test_func def get_pub(pub_doi, test_var): diff --git a/verarbeitung/json_text.json b/verarbeitung/json_text.json deleted file mode 100644 index de3ddf5..0000000 --- a/verarbeitung/json_text.json +++ /dev/null @@ -1 +0,0 @@ -{"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", "citations": 5}], "links": []} \ No newline at end of file diff --git a/verarbeitung/process_main.py b/verarbeitung/process_main.py new file mode 100644 index 0000000..e69de29 diff --git a/verarbeitung/Processing_unittest.py b/verarbeitung/test/Processing_unittest.py similarity index 94% rename from verarbeitung/Processing_unittest.py rename to verarbeitung/test/Processing_unittest.py index def1442..47dd268 100644 --- a/verarbeitung/Processing_unittest.py +++ b/verarbeitung/test/Processing_unittest.py @@ -1,119 +1,123 @@ -import unittest - -from Processing import process_main -from import_from_json import input_from_json -from update_graph import check_graph_updates - -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']]) - - 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): - - #def testEmptyHeight(self): - - #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, []) - - 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']]) - - - 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 test_deleted_input_dois(self): - nodes_old_single, edges_old_single = process_main(['doi_lg_1_i'],2,2,True) - nodes_old_both, edges_old_both = process_main(['doi_lg_1_i','doi_lg_2_i'],2,2,True) - nodes_new_both, edges_new_both = input_from_json('test_output.json') - nodes_new_single, edges_new_single = check_graph_updates(['doi_lg_1_i'], nodes_old_both, edges_old_both, True) - self.assertCountEqual(nodes_old_single,nodes_new_single) - self.assertCountEqual(edges_old_single, edges_new_single) - - nodes_old_single, edges_old_single = process_main(['doi_cg_i'],3,3,True) - nodes_old_two, edges_old_two = process_main(['doi_lg_1_i','doi_cg_i'],3,3,True) - nodes_old_three, edges_old_three = process_main(['doi_lg_1_i','doi_lg_2_i','doi_cg_i'],3,3,True) - - - - - -def keep_only_dois(nodes): - ''' - :param nodes: input list of nodes of type Publication - :type nodes: List[Publication] - - gets nodes of type pub and return only their doi - ''' - doi_list = [] - for node in nodes: - doi_list.append(node.doi_url) - return doi_list - - -if __name__ == "__main__": +import unittest + +import sys +from pathlib import Path +sys.path.append("../") + +from verarbeitung.construct_new_graph.Processing import process_main +from verarbeitung.update_graph.import_from_json import input_from_json +from verarbeitung.update_graph.update_graph import check_graph_updates + +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']]) + + 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): + + #def testEmptyHeight(self): + + #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, []) + + 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']]) + + + 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 test_deleted_input_dois(self): + nodes_old_single, edges_old_single = process_main(['doi_lg_1_i'],2,2,True) + nodes_old_both, edges_old_both = process_main(['doi_lg_1_i','doi_lg_2_i'],2,2,True) + nodes_new_both, edges_new_both = input_from_json('test_output.json') + nodes_new_single, edges_new_single = check_graph_updates(['doi_lg_1_i'], nodes_old_both, edges_old_both, True) + self.assertCountEqual(nodes_old_single,nodes_new_single) + self.assertCountEqual(edges_old_single, edges_new_single) + + nodes_old_single, edges_old_single = process_main(['doi_cg_i'],3,3,True) + nodes_old_two, edges_old_two = process_main(['doi_lg_1_i','doi_cg_i'],3,3,True) + nodes_old_three, edges_old_three = process_main(['doi_lg_1_i','doi_lg_2_i','doi_cg_i'],3,3,True) + + + + + +def keep_only_dois(nodes): + ''' + :param nodes: input list of nodes of type Publication + :type nodes: List[Publication] + + gets nodes of type pub and return only their doi + ''' + doi_list = [] + for node in nodes: + doi_list.append(node.doi_url) + return doi_list + + +if __name__ == "__main__": unittest.main() \ No newline at end of file diff --git a/verarbeitung/test/__init__.py b/verarbeitung/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/verarbeitung/input_test.py b/verarbeitung/test/input_test.py similarity index 98% rename from verarbeitung/input_test.py rename to verarbeitung/test/input_test.py index 4c9bf31..928c8b4 100644 --- a/verarbeitung/input_test.py +++ b/verarbeitung/test/input_test.py @@ -1,116 +1,116 @@ -import sys -sys.path.append("../") - -from input.publication import Publication, Citation - - -def input_test_func(pub_doi): - ''' - :param pub_doi: pub doi to find publication in list_of_arrays - :type pub_doi: String - - returns the publication class for given 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]) - return pub - - -def cit(list_doi): - ''' - :param list_doi list of citation dois to get their Citation Class - :type list_doi: List[String] - - returns a list of citations objects for given doi list - ''' - - cits = [] - 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])) - 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']] -beispiel2 = ['doi2', 'title2', ['contributor2'], 'journal2', 'date2', ['subject2'], [], ['doi1']] -beispiel3 = ['doi3', 'title3', ['contributor3'], 'journal3', 'date3', ['subject3'], ['doi1'], []] - -zyklus1 = ['doiz1', 'titlez1', ['contributorz1.1', 'contributorz1.2'], 'journalz1', 'datez1', ['subjectz1'], ['doiz2'], ['doiz2']] -zyklus2 = ['doiz2', 'titlez2', ['contributorz2.1', 'contributorz2.2'], 'journalz2', 'datez2', ['subjectz1'], ['doiz1'], ['doiz1']] - -inner_edge1 = ['doi_ie1', 'title_ie1', ['contributor_ie1.1', 'contributor_ie1.2'], 'journal_ie1', 'date_ie1', ['subject_ie1'], ['doi_ie2'], ['doi_ie3']] -inner_edge2 = ['doi_ie2', 'title_ie2', ['contributor_ie2.1', 'contributor_ie2.2'], 'journal_ie2', 'date_ie2', ['subject_ie2'], [], ['doi_ie1','doi_ie3']] -inner_edge3 = ['doi_ie3', 'titlez_ie3', ['contributor_ie3.1', 'contributor_ie3.2'], 'journal_ie3', 'date_ie3', ['subject_ie3'], ['doi_ie1','doi_ie2'], []] - -right_height01 = ['doi_h01', 'title_h01', ['contributor_h01'], 'journal_h01', 'date_h01', ['subject_h01'], [], []] -right_height02 = ['doi_h02', 'title_h02', ['contributor_h02'], 'journal_h02', 'date_h02', ['subject_h02'], [], ['doi_h1']] -right_height1 = ['doi_h1', 'title_h1', ['contributor_h1'], 'journal_h1', 'date_h1', ['subject_h1'], [], ['doi_h2']] -right_height2 = ['doi_h2', 'title_h2', ['contributor_h2'], 'journal_h2', 'date_h2', ['subject_h2'], [], ['doi_h3']] -right_height3 = ['doi_h3', 'title_h3', ['contributor_h3'], 'journal_h3', 'date_h3', ['subject_h3'], [], []] - -right_depth01 = ['doi_d01', 'title_d01', ['contributor_d01'], 'journal_d01', 'date_d01', ['subject_d01'], [], []] -right_depth02 = ['doi_d02', 'title_d02', ['contributor_d02'], 'journal_d02', 'date_d02', ['subject_d01'], ['doi_d1'], []] -right_depth1 = ['doi_d1', 'title_d1', ['contributor_d1'], 'journal_d1', 'date_d1', ['subject_d1'], ['doi_d2'], []] -right_depth2 = ['doi_d2', 'title_d2', ['contributor_d2'], 'journal_d2', 'date_d2', ['subject_d2'], ['doi_d3'], []] -right_depth3 = ['doi_d3', 'title_d3', ['contributor_d3'], 'journal_d3', 'date_d3', ['subject_d3'], [], []] - -large_graph_1_h21 = ['doi_lg_1_h21', 'title_lg_1_h21', ['contributor_lg_1_h21'], 'journal_lg_1_h21', 'date_lg_1_h21', ['subject_lg_1_h21'], ['doi_lg_1_h11'], []] -large_graph_1_h22 = ['doi_lg_1_h22', 'title_lg_1_h22', ['contributor_lg_1_h22'], 'journal_lg_1_h22', 'date_lg_1_h22', ['subject_lg_1_h22'], ['doi_lg_1_h11','doi_lg_1_h12'], []] -large_graph_1_h23 = ['doi_lg_1_h23', 'title_lg_1_h23', ['contributor_lg_1_h23'], 'journal_lg_1_h23', 'date_lg_1_h23', ['subject_lg_1_h23'], ['doi_lg_1_h12','doi_cg_i'], []] -large_graph_1_h11 = ['doi_lg_1_h11', 'title_lg_1_h11', ['contributor_lg_1_h11'], 'journal_lg_1_h11', 'date_lg_1_h11', ['subject_lg_1_h11'], ['doi_lg_1_h12','doi_lg_1_i'], ['doi_lg_1_h21','doi_lg_1_h22']] -large_graph_1_h12 = ['doi_lg_1_h12', 'title_lg_1_h12', ['contributor_lg_1_h12'], 'journal_lg_1_h12', 'date_lg_1_h12', ['subject_lg_1_h12'], ['doi_lg_1_i','doi_lg_1_d12'], ['doi_lg_1_h22','doi_lg_1_h23']] -large_graph_1_i = ['doi_lg_1_i' , 'title_lg_1_i' , ['contributor_lg_1_i'] , 'journal_lg_1_i' , 'date_lg_1_i' , ['subject_lg_1_i'] , ['doi_lg_1_d11','doi_lg_1_d12'], ['doi_lg_1_h11','doi_lg_1_h12']] -large_graph_1_d11 = ['doi_lg_1_d11', 'title_lg_1_d11', ['contributor_lg_1_d11'], 'journal_lg_1_d11', 'date_lg_1_d11', ['subject_lg_1_d11'], ['doi_lg_1_d21','doi_lg_1_d22'], ['doi_lg_1_i']] -large_graph_1_d12 = ['doi_lg_1_d12', 'title_lg_1_d12', ['contributor_lg_1_d12'], 'journal_lg_1_d12', 'date_lg_1_d12', ['subject_lg_1_d12'], ['doi_lg_1_d23'], ['doi_lg_1_h12','doi_lg_1_i']] -large_graph_1_d21 = ['doi_lg_1_d21', 'title_lg_1_d21', ['contributor_lg_1_d21'], 'journal_lg_1_d21', 'date_lg_1_d21', ['subject_lg_1_d21'], ['doi_lg_1_d22'], ['doi_lg_1_d11','doi_lg_1_d22']] -large_graph_1_d22 = ['doi_lg_1_d22', 'title_lg_1_d22', ['contributor_lg_1_d22'], 'journal_lg_1_d22', 'date_lg_1_d22', ['subject_lg_1_d22'], ['doi_lg_1_d21'], ['doi_lg_1_d11','doi_lg_1_d21']] -large_graph_1_d23 = ['doi_lg_1_d23', 'title_lg_1_d23', ['contributor_lg_1_d23'], 'journal_lg_1_d23', 'date_lg_1_d23', ['subject_lg_1_d23'], [], ['doi_lg_1_d12','doi_cg_d11']] - -large_graph_2_h21 = ['doi_lg_2_h21', 'title_lg_2_h21', ['contributor_lg_2_h21'], 'journal_lg_2_h21', 'date_lg_2_h21', ['subject_lg_2_h21'], ['doi_lg_2_h11'], []] -large_graph_2_h22 = ['doi_lg_2_h22', 'title_lg_2_h22', ['contributor_lg_2_h22'], 'journal_lg_2_h22', 'date_lg_2_h22', ['subject_lg_2_h22'], ['doi_lg_2_h11'], []] -large_graph_2_h23 = ['doi_lg_2_h23', 'title_lg_2_h23', ['contributor_lg_2_h23'], 'journal_lg_2_h23', 'date_lg_2_h23', ['subject_lg_2_h23'], ['doi_lg_2_h12','doi_lg_2_h24'], ['doi_lg_2_h24']] -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_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']] - -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'], []] -crossed_graph_h11 = ['doi_cg_h11', 'title_cg_h11', ['contributor_cg_h11'], 'journal_cg_h11', 'date_cg_h11', ['subject_cg_h11'], ['doi_cg_i'], ['doi_cg_h21','doi_cg_h22']] -crossed_graph_i = ['doi_cg_i', 'title_cg_i', ['contributor_cg_i'], 'journal_cg_i', 'date_cg_i', ['subject_cg_i'], ['doi_lg_2_i','doi_cg_d11','doi_cg_d12'], ['doi_lg_1_h23','doi_cg_h11','doi_lg_2_h11']] -crossed_graph_d11 = ['doi_cg_d11', 'title_cg_d11', ['contributor_cg_d11'], 'journal_cg_d11', 'date_cg_d11', ['subject_cg_d11'], ['doi_lg_1_d23','doi_cg_d21'], ['doi_cg_i']] -crossed_graph_d12 = ['doi_cg_d12', 'title_cg_d12', ['contributor_cg_d12'], 'journal_cg_d12', 'date_cg_d12', ['subject_cg_d12'], ['doi_cg_d22'], ['doi_cg_i']] -crossed_graph_d21 = ['doi_cg_d21', 'title_cg_d21', ['contributor_cg_d21'], 'journal_cg_d21', 'date_cg_d21', ['subject_cg_d21'], [], ['doi_cg_d11']] -crossed_graph_d22 = ['doi_cg_d22', 'title_cg_d22', ['contributor_cg_d22'], 'journal_cg_d22', 'date_cg_d22', ['subject_cg_d22'], [], ['doi_cg_d12']] - - -list_of_arrays = [beispiel1, beispiel2, beispiel3, zyklus1, zyklus2, inner_edge1, inner_edge2, inner_edge3, - right_height01, right_height02, right_height1, right_height2, right_height3, right_depth01, right_depth02, right_depth1, right_depth2, right_depth3, - large_graph_1_h21, large_graph_1_h22, large_graph_1_h23, large_graph_1_h11, large_graph_1_h12, large_graph_1_i, large_graph_1_d11, large_graph_1_d12, - large_graph_1_d21, large_graph_1_d22, large_graph_1_d23, large_graph_2_h21, large_graph_2_h22, large_graph_2_h23, large_graph_2_h24, large_graph_2_h11, large_graph_2_h12, - large_graph_2_i, large_graph_2_d11, large_graph_2_d12, large_graph_2_d21, large_graph_2_d22, large_graph_2_d23, crossed_graph_h21, crossed_graph_h22, crossed_graph_h11, - crossed_graph_i, crossed_graph_d11, crossed_graph_d12, crossed_graph_d21, crossed_graph_d22] +import sys +sys.path.append("../") + +from input.publication import Publication, Citation + + +def input_test_func(pub_doi): + ''' + :param pub_doi: pub doi to find publication in list_of_arrays + :type pub_doi: String + + returns the publication class for given 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]) + return pub + + +def cit(list_doi): + ''' + :param list_doi list of citation dois to get their Citation Class + :type list_doi: List[String] + + returns a list of citations objects for given doi list + ''' + + cits = [] + 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])) + 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']] +beispiel2 = ['doi2', 'title2', ['contributor2'], 'journal2', 'date2', ['subject2'], [], ['doi1']] +beispiel3 = ['doi3', 'title3', ['contributor3'], 'journal3', 'date3', ['subject3'], ['doi1'], []] + +zyklus1 = ['doiz1', 'titlez1', ['contributorz1.1', 'contributorz1.2'], 'journalz1', 'datez1', ['subjectz1'], ['doiz2'], ['doiz2']] +zyklus2 = ['doiz2', 'titlez2', ['contributorz2.1', 'contributorz2.2'], 'journalz2', 'datez2', ['subjectz1'], ['doiz1'], ['doiz1']] + +inner_edge1 = ['doi_ie1', 'title_ie1', ['contributor_ie1.1', 'contributor_ie1.2'], 'journal_ie1', 'date_ie1', ['subject_ie1'], ['doi_ie2'], ['doi_ie3']] +inner_edge2 = ['doi_ie2', 'title_ie2', ['contributor_ie2.1', 'contributor_ie2.2'], 'journal_ie2', 'date_ie2', ['subject_ie2'], [], ['doi_ie1','doi_ie3']] +inner_edge3 = ['doi_ie3', 'titlez_ie3', ['contributor_ie3.1', 'contributor_ie3.2'], 'journal_ie3', 'date_ie3', ['subject_ie3'], ['doi_ie1','doi_ie2'], []] + +right_height01 = ['doi_h01', 'title_h01', ['contributor_h01'], 'journal_h01', 'date_h01', ['subject_h01'], [], []] +right_height02 = ['doi_h02', 'title_h02', ['contributor_h02'], 'journal_h02', 'date_h02', ['subject_h02'], [], ['doi_h1']] +right_height1 = ['doi_h1', 'title_h1', ['contributor_h1'], 'journal_h1', 'date_h1', ['subject_h1'], [], ['doi_h2']] +right_height2 = ['doi_h2', 'title_h2', ['contributor_h2'], 'journal_h2', 'date_h2', ['subject_h2'], [], ['doi_h3']] +right_height3 = ['doi_h3', 'title_h3', ['contributor_h3'], 'journal_h3', 'date_h3', ['subject_h3'], [], []] + +right_depth01 = ['doi_d01', 'title_d01', ['contributor_d01'], 'journal_d01', 'date_d01', ['subject_d01'], [], []] +right_depth02 = ['doi_d02', 'title_d02', ['contributor_d02'], 'journal_d02', 'date_d02', ['subject_d01'], ['doi_d1'], []] +right_depth1 = ['doi_d1', 'title_d1', ['contributor_d1'], 'journal_d1', 'date_d1', ['subject_d1'], ['doi_d2'], []] +right_depth2 = ['doi_d2', 'title_d2', ['contributor_d2'], 'journal_d2', 'date_d2', ['subject_d2'], ['doi_d3'], []] +right_depth3 = ['doi_d3', 'title_d3', ['contributor_d3'], 'journal_d3', 'date_d3', ['subject_d3'], [], []] + +large_graph_1_h21 = ['doi_lg_1_h21', 'title_lg_1_h21', ['contributor_lg_1_h21'], 'journal_lg_1_h21', 'date_lg_1_h21', ['subject_lg_1_h21'], ['doi_lg_1_h11'], []] +large_graph_1_h22 = ['doi_lg_1_h22', 'title_lg_1_h22', ['contributor_lg_1_h22'], 'journal_lg_1_h22', 'date_lg_1_h22', ['subject_lg_1_h22'], ['doi_lg_1_h11','doi_lg_1_h12'], []] +large_graph_1_h23 = ['doi_lg_1_h23', 'title_lg_1_h23', ['contributor_lg_1_h23'], 'journal_lg_1_h23', 'date_lg_1_h23', ['subject_lg_1_h23'], ['doi_lg_1_h12','doi_cg_i'], []] +large_graph_1_h11 = ['doi_lg_1_h11', 'title_lg_1_h11', ['contributor_lg_1_h11'], 'journal_lg_1_h11', 'date_lg_1_h11', ['subject_lg_1_h11'], ['doi_lg_1_h12','doi_lg_1_i'], ['doi_lg_1_h21','doi_lg_1_h22']] +large_graph_1_h12 = ['doi_lg_1_h12', 'title_lg_1_h12', ['contributor_lg_1_h12'], 'journal_lg_1_h12', 'date_lg_1_h12', ['subject_lg_1_h12'], ['doi_lg_1_i','doi_lg_1_d12'], ['doi_lg_1_h22','doi_lg_1_h23']] +large_graph_1_i = ['doi_lg_1_i' , 'title_lg_1_i' , ['contributor_lg_1_i'] , 'journal_lg_1_i' , 'date_lg_1_i' , ['subject_lg_1_i'] , ['doi_lg_1_d11','doi_lg_1_d12'], ['doi_lg_1_h11','doi_lg_1_h12']] +large_graph_1_d11 = ['doi_lg_1_d11', 'title_lg_1_d11', ['contributor_lg_1_d11'], 'journal_lg_1_d11', 'date_lg_1_d11', ['subject_lg_1_d11'], ['doi_lg_1_d21','doi_lg_1_d22'], ['doi_lg_1_i']] +large_graph_1_d12 = ['doi_lg_1_d12', 'title_lg_1_d12', ['contributor_lg_1_d12'], 'journal_lg_1_d12', 'date_lg_1_d12', ['subject_lg_1_d12'], ['doi_lg_1_d23'], ['doi_lg_1_h12','doi_lg_1_i']] +large_graph_1_d21 = ['doi_lg_1_d21', 'title_lg_1_d21', ['contributor_lg_1_d21'], 'journal_lg_1_d21', 'date_lg_1_d21', ['subject_lg_1_d21'], ['doi_lg_1_d22'], ['doi_lg_1_d11','doi_lg_1_d22']] +large_graph_1_d22 = ['doi_lg_1_d22', 'title_lg_1_d22', ['contributor_lg_1_d22'], 'journal_lg_1_d22', 'date_lg_1_d22', ['subject_lg_1_d22'], ['doi_lg_1_d21'], ['doi_lg_1_d11','doi_lg_1_d21']] +large_graph_1_d23 = ['doi_lg_1_d23', 'title_lg_1_d23', ['contributor_lg_1_d23'], 'journal_lg_1_d23', 'date_lg_1_d23', ['subject_lg_1_d23'], [], ['doi_lg_1_d12','doi_cg_d11']] + +large_graph_2_h21 = ['doi_lg_2_h21', 'title_lg_2_h21', ['contributor_lg_2_h21'], 'journal_lg_2_h21', 'date_lg_2_h21', ['subject_lg_2_h21'], ['doi_lg_2_h11'], []] +large_graph_2_h22 = ['doi_lg_2_h22', 'title_lg_2_h22', ['contributor_lg_2_h22'], 'journal_lg_2_h22', 'date_lg_2_h22', ['subject_lg_2_h22'], ['doi_lg_2_h11'], []] +large_graph_2_h23 = ['doi_lg_2_h23', 'title_lg_2_h23', ['contributor_lg_2_h23'], 'journal_lg_2_h23', 'date_lg_2_h23', ['subject_lg_2_h23'], ['doi_lg_2_h12','doi_lg_2_h24'], ['doi_lg_2_h24']] +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_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']] + +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'], []] +crossed_graph_h11 = ['doi_cg_h11', 'title_cg_h11', ['contributor_cg_h11'], 'journal_cg_h11', 'date_cg_h11', ['subject_cg_h11'], ['doi_cg_i'], ['doi_cg_h21','doi_cg_h22']] +crossed_graph_i = ['doi_cg_i', 'title_cg_i', ['contributor_cg_i'], 'journal_cg_i', 'date_cg_i', ['subject_cg_i'], ['doi_lg_2_i','doi_cg_d11','doi_cg_d12'], ['doi_lg_1_h23','doi_cg_h11','doi_lg_2_h11']] +crossed_graph_d11 = ['doi_cg_d11', 'title_cg_d11', ['contributor_cg_d11'], 'journal_cg_d11', 'date_cg_d11', ['subject_cg_d11'], ['doi_lg_1_d23','doi_cg_d21'], ['doi_cg_i']] +crossed_graph_d12 = ['doi_cg_d12', 'title_cg_d12', ['contributor_cg_d12'], 'journal_cg_d12', 'date_cg_d12', ['subject_cg_d12'], ['doi_cg_d22'], ['doi_cg_i']] +crossed_graph_d21 = ['doi_cg_d21', 'title_cg_d21', ['contributor_cg_d21'], 'journal_cg_d21', 'date_cg_d21', ['subject_cg_d21'], [], ['doi_cg_d11']] +crossed_graph_d22 = ['doi_cg_d22', 'title_cg_d22', ['contributor_cg_d22'], 'journal_cg_d22', 'date_cg_d22', ['subject_cg_d22'], [], ['doi_cg_d12']] + + +list_of_arrays = [beispiel1, beispiel2, beispiel3, zyklus1, zyklus2, inner_edge1, inner_edge2, inner_edge3, + right_height01, right_height02, right_height1, right_height2, right_height3, right_depth01, right_depth02, right_depth1, right_depth2, right_depth3, + large_graph_1_h21, large_graph_1_h22, large_graph_1_h23, large_graph_1_h11, large_graph_1_h12, large_graph_1_i, large_graph_1_d11, large_graph_1_d12, + large_graph_1_d21, large_graph_1_d22, large_graph_1_d23, large_graph_2_h21, large_graph_2_h22, large_graph_2_h23, large_graph_2_h24, large_graph_2_h11, large_graph_2_h12, + large_graph_2_i, large_graph_2_d11, large_graph_2_d12, large_graph_2_d21, large_graph_2_d22, large_graph_2_d23, crossed_graph_h21, crossed_graph_h22, crossed_graph_h11, + crossed_graph_i, crossed_graph_d11, crossed_graph_d12, crossed_graph_d21, crossed_graph_d22] diff --git a/verarbeitung/test_output.json b/verarbeitung/test_output.json index b013fbf..8a15eeb 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", "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": "depth", "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": "depth", "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": "height", "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": "height", "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": "height", "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": "height", "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": "height", "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": "depth", "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": "depth", "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": "depth", "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_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 +{"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", "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": "depth", "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": "depth", "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": "height", "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": "height", "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": "height", "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": "height", "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": "height", "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": "depth", "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": "depth", "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": "depth", "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/Kanten_Vergleich.py b/verarbeitung/update_graph/Kanten_Vergleich.py similarity index 100% rename from verarbeitung/Kanten_Vergleich.py rename to verarbeitung/update_graph/Kanten_Vergleich.py diff --git a/verarbeitung/Knoten_Vergleich.py b/verarbeitung/update_graph/Knoten_Vergleich.py similarity index 100% rename from verarbeitung/Knoten_Vergleich.py rename to verarbeitung/update_graph/Knoten_Vergleich.py diff --git a/verarbeitung/update_graph/__init__.py b/verarbeitung/update_graph/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/verarbeitung/connect_new_input.py b/verarbeitung/update_graph/connect_new_input.py similarity index 79% rename from verarbeitung/connect_new_input.py rename to verarbeitung/update_graph/connect_new_input.py index b9167dc..c61b00a 100644 --- a/verarbeitung/connect_new_input.py +++ b/verarbeitung/update_graph/connect_new_input.py @@ -1,67 +1,69 @@ -# -*- coding: utf-8 -*- -""" -Functions to update a graph representing citations between multiple ACS/Nature journals - -""" - -__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski" -__email__ = "cis-project2021@zbh.uni-hamburg.de" -__status__ = "Production" -#__copyright__ = "" -#__credits__ = ["", "", "", ""] -#__license__ = "" -#__version__ = "" -#__maintainer__ = "" - -import sys -from pathlib import Path -from os import error -sys.path.append("../") - -from import_form_json import input_from_json -from Processing import initialize_nodes_list, process_citations_rec, process_references_rec, complete_inner_edges, create_graph_structure_references, create_graph_structure_citations -from json_demo import output_to_json - -def connect_old_and_new_input(json_file, new_doi_list, search_height, search_depth, test_var = False): - global nodes, edges - nodes = [] - edges = [] - - nodes, edges = input_from_json(json_file) - - complete_changed_group_nodes(new_doi_list, search_height, search_depth, test_var) - - # initializes nodes/edges from input and gets a list with publication objects for citations and references returned - references_obj_list, citations_obj_list = initialize_nodes_list(new_doi_list,search_depth, search_height, test_var) - - # function calls to begin recursive processing up to max depth/height - process_citations_rec(citations_obj_list, 1, search_height, test_var) - process_references_rec(references_obj_list, 1, search_depth, test_var) - - # adds edges between reference group and citation group of known publications - complete_inner_edges(test_var) - - # calls a skript to save nodes and edges of graph in .json file - output_to_json(nodes,edges, test_var) - - return(nodes, edges) - - -def complete_changed_group_nodes(new_doi_list, search_height_max, search_depth_max, test_var): - changed_group_node_citations = [] - changed_group_node_references = [] - - for node in nodes: - if (node.group != "input") and (node.doi in new_doi_list): - node.group = "input" - - # inserts references as publication objects into list and - # inserts first depth references into nodes/edges if maximum search depth > 0 - for reference in create_graph_structure_references(node, 0, search_depth_max, test_var): - changed_group_node_references.append(reference) - - # inserts citations as publication objects into list and - # inserts first height citations into nodes if maximum search height > 0 - for citation in create_graph_structure_citations(node, 0, search_height_max, test_var): - changed_group_node_citations.append(citation) - +# -*- coding: utf-8 -*- +""" +Functions to update a graph representing citations between multiple ACS/Nature journals + +""" + +__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski" +__email__ = "cis-project2021@zbh.uni-hamburg.de" +__status__ = "Production" +#__copyright__ = "" +#__credits__ = ["", "", "", ""] +#__license__ = "" +#__version__ = "" +#__maintainer__ = "" + +import sys +from pathlib import Path +from os import error +sys.path.append("../") + +from import_from_json import input_from_json +from verarbeitung.construct_new_graph.Processing import initialize_nodes_list, complete_inner_edges, create_graph_structure_references, create_graph_structure_citations +from verarbeitung.construct_new_graph.add_citations_rec import add_citations +from verarbeitung.construct_new_graph.add_references_rec import add_references +from verarbeitung.construct_new_graph.export_to_json import output_to_json + +def connect_old_and_new_input(json_file, new_doi_list, search_height, search_depth, test_var = False): + global nodes, edges + nodes = [] + edges = [] + + nodes, edges = input_from_json(json_file) + + complete_changed_group_nodes(new_doi_list, search_height, search_depth, test_var) + + # initializes nodes/edges from input and gets a list with publication objects for citations and references returned + references_obj_list, citations_obj_list = initialize_nodes_list(new_doi_list,search_depth, search_height, test_var) + + # function calls to begin recursive processing up to max depth/height + add_citations(nodes, edges, citations_obj_list, 1, search_height, test_var) + add_references(nodes, edges, references_obj_list, 1, search_depth, test_var) + + # adds edges between reference group and citation group of known publications + complete_inner_edges(test_var) + + # calls a skript to save nodes and edges of graph in .json file + output_to_json(nodes,edges, test_var) + + return(nodes, edges) + + +def complete_changed_group_nodes(new_doi_list, search_height_max, search_depth_max, test_var): + changed_group_node_citations = [] + changed_group_node_references = [] + + for node in nodes: + if (node.group != "input") and (node.doi in new_doi_list): + node.group = "input" + + # inserts references as publication objects into list and + # inserts first depth references into nodes/edges if maximum search depth > 0 + for reference in create_graph_structure_references(node, 0, search_depth_max, test_var): + changed_group_node_references.append(reference) + + # inserts citations as publication objects into list and + # inserts first height citations into nodes if maximum search height > 0 + for citation in create_graph_structure_citations(node, 0, search_height_max, test_var): + changed_group_node_citations.append(citation) + diff --git a/verarbeitung/import_from_json.py b/verarbeitung/update_graph/import_from_json.py similarity index 99% rename from verarbeitung/import_from_json.py rename to verarbeitung/update_graph/import_from_json.py index 11e5d82..748e541 100644 --- a/verarbeitung/import_from_json.py +++ b/verarbeitung/update_graph/import_from_json.py @@ -16,7 +16,7 @@ __status__ = "Production" import json import sys -sys.path.append("../") +sys.path.append("../../") from input.publication import Publication, Citation diff --git a/verarbeitung/update_graph.py b/verarbeitung/update_graph/update_graph.py similarity index 95% rename from verarbeitung/update_graph.py rename to verarbeitung/update_graph/update_graph.py index 9853456..0e4f52a 100644 --- a/verarbeitung/update_graph.py +++ b/verarbeitung/update_graph/update_graph.py @@ -17,12 +17,12 @@ __status__ = "Production" import sys from pathlib import Path from os import error -sys.path.append("../") +sys.path.append("../../") from input.publication import Publication -from get_pub_from_input import get_pub -from Knoten_Vergleich import doi_listen_vergleichen -from update_graph_del import delete_nodes_and_edges +from verarbeitung.get_pub_from_input import get_pub +from .Knoten_Vergleich import doi_listen_vergleichen +from .update_graph_del import delete_nodes_and_edges def get_old_input_dois(old_obj_input_list): diff --git a/verarbeitung/update_graph_del.py b/verarbeitung/update_graph/update_graph_del.py similarity index 97% rename from verarbeitung/update_graph_del.py rename to verarbeitung/update_graph/update_graph_del.py index 10ca42b..df958d1 100644 --- a/verarbeitung/update_graph_del.py +++ b/verarbeitung/update_graph/update_graph_del.py @@ -15,10 +15,9 @@ __status__ = "Production" import sys from pathlib import Path -sys.path.append("../") +sys.path.append("../../") -from input.interface import InputInterface as Input -from Kanten_Vergleich import back_to_valid_edges +from .Kanten_Vergleich import back_to_valid_edges def delete_ref_nodes_rec(pub): -- GitLab