From e89b7c0a6975924ff43d2e0b6540c9e6eb3e3cd5 Mon Sep 17 00:00:00 2001 From: Malte Schokolowski <baw8441@uni-hamburg.de> Date: Thu, 2 Dec 2021 22:23:56 +0100 Subject: [PATCH] added new tests and fixed height/depth bug --- verarbeitung/Processing.py | 25 +++++++++++--- verarbeitung/Processing_unittest.py | 32 ++++++++++++++++-- .../__pycache__/Processing.cpython-39.pyc | Bin 0 -> 4021 bytes .../__pycache__/input_test.cpython-39.pyc | Bin 2495 -> 3865 bytes .../__pycache__/json_demo.cpython-39.pyc | Bin 891 -> 1163 bytes verarbeitung/input_test.py | 14 +++++++- verarbeitung/json_text.json | 2 +- 7 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 verarbeitung/__pycache__/Processing.cpython-39.pyc diff --git a/verarbeitung/Processing.py b/verarbeitung/Processing.py index eccdca0..ab7db1d 100644 --- a/verarbeitung/Processing.py +++ b/verarbeitung/Processing.py @@ -27,11 +27,14 @@ from json_demo import output_to_json # TO-DO: Listenelemente auf Korrektheit überprüfen def initialize_nodes_list(doi_input_list, test_var): for pub_doi in doi_input_list: + + # checks if its a test and chooses input function accordingly if(test_var): pub = input_test_func(pub_doi) else: pub = input(pub_doi) + # checks if publication already exists in nodes not_in_nodes = True for node in nodes: # checks if a pub is already in nodes if (pub.doi_url == node.doi_url): @@ -43,16 +46,22 @@ def initialize_nodes_list(doi_input_list, test_var): else: doi_input_list.remove(pub_doi) +# adds inner edges between citations and references to edges def complete_inner_edges(test_var): for node in nodes: + + # checks if its a test and chooses input function accordingly if (test_var): pub = input_test_func(node.doi_url) else: pub = input(node.doi_url) + + if (node.group == "depth"): for citation in pub.citations: if (citation in nodes and [citation.doi_url, pub.doi_url] not in edges): edges.append([citation.doi_url, pub.doi_url]) + if (node.group == "height"): for reference in pub.references: for node in nodes: @@ -65,6 +74,8 @@ def complete_inner_edges(test_var): # adds edges for citations between publications def create_graph_structure_citations(pub, search_height, search_height_max): for citation in pub.citations: + + # checks if publication already exists in nodes not_in_nodes = True for node in nodes: # checks every citation for duplication @@ -77,7 +88,7 @@ def create_graph_structure_citations(pub, search_height, search_height_max): nodes.append(citation) edges.append([citation.doi_url,pub.doi_url]) - # adds only edge if citation already exists + # adds only an edge (citation already exists) elif [citation.doi_url,pub.doi_url] not in edges: edges.append([citation.doi_url,pub.doi_url]) @@ -87,6 +98,8 @@ def create_graph_structure_citations(pub, search_height, search_height_max): # adds edges for references between publications def create_graph_structure_references(pub, search_depth, search_depth_max): for reference in pub.references: + + # checks if publication already exists in nodes not_in_nodes = True for node in nodes: # checks every reference for duplication @@ -99,7 +112,7 @@ def create_graph_structure_references(pub, search_depth, search_depth_max): nodes.append(reference) edges.append([pub.doi_url,reference.doi_url]) - # adds only edge if citation already exists + # adds only an edge (citation already exists) elif [pub.doi_url,reference.doi_url] not in edges: edges.append([pub.doi_url,reference.doi_url]) @@ -115,6 +128,8 @@ def process_citations_rec(doi_citations, search_height, search_height_max, test_ # create class object for every citation from list for pub_doi in doi_citations: + + # checks if its a test and chooses input function accordingly if (test_var): pub = input_test_func(pub_doi) else: @@ -129,7 +144,7 @@ def process_citations_rec(doi_citations, search_height, search_height_max, test_ # currently only the references with acs are stored in the URL, because we can't # extract the info from other sources. - if ("acs" in citation.doi_url): + if ("acs" in citation.doi_url or test_var == True): citations_list.append(citation.doi_url) # recursive call of function. @@ -147,6 +162,8 @@ def process_references_rec(doi_references, search_depth, search_depth_max, test_ # create class object for every citation from list for pub_doi in doi_references: + + #checks if its a test and chooses input function accordingly if (test_var): pub = input_test_func(pub_doi) else: @@ -164,7 +181,6 @@ def process_references_rec(doi_references, search_depth, search_depth_max, test_ if ("acs" in reference.doi_url or test_var == True): references_list.append(reference.doi_url) - # recursive call of function. process_references_rec(references_list, search_depth, search_depth_max, test_var) @@ -190,6 +206,7 @@ def process_main(doi_input_list, search_height, search_depth, test_var = False): nodes = [] edges = [] + initialize_nodes_list(doi_input_list,test_var) process_citations_rec(doi_input_list, 0, search_height, test_var) process_references_rec(doi_input_list, 0, search_depth, test_var) diff --git a/verarbeitung/Processing_unittest.py b/verarbeitung/Processing_unittest.py index 6d83de1..772d572 100644 --- a/verarbeitung/Processing_unittest.py +++ b/verarbeitung/Processing_unittest.py @@ -2,7 +2,7 @@ import unittest from Processing import process_main class ProcessingTest(unittest.TestCase): - def testCycle(self): + def testCycle(self): nodes, edges = process_main(['doiz1'],1,1,True) self.assertCountEqual(nodes, ['doiz1', 'doiz2']) self.assertCountEqual(edges, [['doiz1', 'doiz2'], ['doiz2', 'doiz1']]) @@ -17,7 +17,7 @@ class ProcessingTest(unittest.TestCase): #def testEmptyDepth(self): - def testEmptyDepthHeight(self): + def testEmptyDepthHeight(self): nodes, edges = process_main(['doi1'],0,0,True) self.assertCountEqual(nodes,['doi1']) self.assertCountEqual(edges, []) @@ -31,10 +31,36 @@ class ProcessingTest(unittest.TestCase): self.assertCountEqual(edges, [['doi3', 'doi1'], ['doi1', 'doi2']]) - def testInnerEdges(self): + def testInnerEdges(self): nodes, edges = process_main(['doi_ie1'],1,1,True) self.assertCountEqual(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) + self.assertCountEqual(nodes,['doi_h01']) + self.assertCountEqual(edges, []) + + nodes, edges = process_main(['doi_h02'],1,0,True) + self.assertCountEqual(nodes,['doi_h02','doi_h1']) + self.assertCountEqual(edges, [['doi_h1','doi_h02']]) + + nodes, edges = process_main(['doi_h02'],2,0,True) + self.assertCountEqual(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) + self.assertCountEqual(nodes,['doi_d01']) + self.assertCountEqual(edges, []) + + nodes, edges = process_main(['doi_d02'],0,1,True) + self.assertCountEqual(nodes,['doi_d02','doi_d1']) + self.assertCountEqual(edges, [['doi_d02','doi_d1']]) + + nodes, edges = process_main(['doi_d02'],0,2,True) + self.assertCountEqual(nodes,['doi_d02','doi_d1','doi_d2']) + self.assertCountEqual(edges, [['doi_d02','doi_d1'], ['doi_d1','doi_d2']]) if __name__ == "__main__": unittest.main() \ No newline at end of file diff --git a/verarbeitung/__pycache__/Processing.cpython-39.pyc b/verarbeitung/__pycache__/Processing.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e08ca682bcdfcff17580d1e2c0923b6aac9ce00d GIT binary patch literal 4021 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 literal 0 HcmV?d00001 diff --git a/verarbeitung/__pycache__/input_test.cpython-39.pyc b/verarbeitung/__pycache__/input_test.cpython-39.pyc index d5948ff804073098a6d097ad17e81503eb7ec86b..68e42fd6a47a02787524c68816a42574834931d2 100644 GIT binary patch delta 1525 zcmZux-BQy~7;HKWO<P)^g@O*_HE1o(IUp*csQ3daiYV$)tc5)$!P+u4+%V(h8Ju3} z8+h#lc;`dZOUL){JIxPCuuRIgyV*VYw$PvDuji`GLLrx;*AD;QTpCNI{wNTAl?bfT z^{JZvQvKy(7IQd{3uYQsTtv;(Fi%(6)I}aO)M0>;#<5_g=-zpnl{SKTEaDQD2w%n( zQfg+J?oe6*SFwz1l(K^BX3A%axPevNB=#0=6Sp=v#nr_q)^G=R3Esnf64nQTF2=Bq z4Ll(95RZu8^!agY;xV2O+QQQ?zJzT&!*gPH@FHZ(c!^gK#J<KG?3$YYFca9tTQp3q zg?DITFBB%Rhkbwy67OM#d<7;f*u)>;Ll{3Lhh;|UGAna3FGplS7UifMljE`^%W^_a z%8HyaOJW+W?bO`I-r>;Vk7e!mu-5NQ>D5es2pyaCdmH*UV*cuDZa+gz!<L4~I=0i2 zYCIm_@3ft+y?5kvx{9d%hhids&^hY1o2`LcN7EUYgFqGx{3MwrlbL%un$=>_Oa#$P z<OYv;Ob7C05<eZp<3T(O;@+cKbwjxR)@mM&Zmo!LK?S_0peZo3U@xoAlHSM$N)5cM zKdjoeD9tO|at%?89czeOP%GV*8MJB{zK@c8A4}M%o6yDr8x!7fw7GBN2^)7KJ|6h| zen4CM^{6pck0Qc)6!2E0$*Tvnb?8mhqqM;5HWUiXem@BNp($1m;c!oyy?Wr+gRmZ& z;<iXVr1>^g&k}tc2>YQa?&Fc;f_lI==g#!1*)3P(?RHys8xkh{|3m=occM^c*ETJu zVM+Cix{6~a3Q^sN!-UEM74mS!QGb`dnJ_^nM!c*6G-4>O@!sd`>_VNsmW!pLUexuB ZuIt&e+O#&Ep3!F1Meh}b>8BEz{sF^I=eGa= delta 145 zcmbO!w_jK%k(ZZ?0SKh*7bWiFWMFs<;vfSKAjbiSi?1<E)Hx=S%9hHW%8|;M%9YL< z#hs!N%%G_`c|MEj=7~(V*%+fH=W^<>N3o>jXBtIKUcfmEC}Pd!!tAHXGkF7V;N-o0 f8d73F!}x^wIQTd?*f}^jIHedR7$ulw7-g6MFKQeL diff --git a/verarbeitung/__pycache__/json_demo.cpython-39.pyc b/verarbeitung/__pycache__/json_demo.cpython-39.pyc index a4f37b5097c0c5a82e7d36cd45671fb178e749ca..4e31ce337645d5282ddab11668bc6d745735f9f8 100644 GIT binary patch literal 1163 zcmZ`&&2AGh5Vm){n{7ycC=&k?;=mzNQx%S=LP!O1BC1*eA_`izYbR{FSueJiQnWdR z8wXyYy}>K_%Bin_I56W7nj&G#GvAEuu|4xSSzc}uXkUJPOL$1g4>T5=2gYL<dJ6<6 zoaUs5+RN$K>v@!LpR>=T=ktJvpc!xQ2z0>dK4~wV!7kEmQyXMOS(%ig{iiX|ICfy@ zw;&9ek_oNJ6Y^$v;u#8-Uwb33_Bq`qfP6rnLky7bPymQI6aoqyY5)oW(UYk5Pbnqu zn>Aji(Y35d#-bM{m3b$XWyc~>wlR{GDv}%?Au}5cm8{D4l4W_Ojb%JbjSWm@a$#Gk zER4zyDkGJ)Yh`tiXK7+GS;RasLIv;&+khx>rE&%NBsNUSQWU(+EPZL$F=Q+UaUr>g zF|vjm0q#YGIC75fL|uk`Kljpy{TEs&-G83sM)aR$roWTzcXpK=i9^#*vySeRGo$lC zs6-uz%v8m&f58}Oyqg%y&GOi`22za^<4)HtI7MFtL1;)L7|n&=qUs9F{J&n?FuPE% zjq`eOdV@gzU7fh^FxH2jKphuq5p)%j!G;==pNg}YVG=bIrtPZ+%&7>)G6>Ax)AQ^J zKKz?K#J%P`d+`I8y_s0Y`13d8I(-W~dIiM%%`J*u-2_jHRG&929iD!Xo50DMOzFfo zUQIy*3v17DlYxd88(<}8Q}65TNnqGXP<wT73ZLW^d>ICP>Qhpz-6wi)i%{2JgX9Fb z8FX!cOwcySv*J*HT5+W_;-lF_Wa&{moMi+n<F0I(1a4X8<{7WXB`m?`scRs5mylq{ zwj|HhD!Q+uyCEwx$a3*-rdGfYe>65S#(?)=?Lw|1;7EkIx(j|d<_;(uxnCU*MhcVX iDB~{X7A?d_Mk`m2XnQPqm5WEXL1T&`=u)&AHGczm5fMxP literal 891 zcmY*Y&2H2%5VjNNXSZpokU&BdiR&V^q8!l*Ar-`ls-gl!v?y|8ck$L62iu_(Wl!bK zE3}9UFT}xDxbzh`F?Ll^Jo3yp<8M5ZkwaHkhX~g9@i&?ggnoJF>WaX50^8gL#Sp_1 zmEJ}YFQPKSh{cS2L1oPF9vUU*z(PAC>=MzmovnTP<?@Ac*xRtpZ%`JUpk)+vY%yTc zqo?TI?lK8p+9&g<PZ^#dKrx^wAOa{3C;>zQN&zJSWq?vZ(P`eNXBeXoH+u}X-d|?n z*1XSHb_?}6%Yl`#LBK=6F=XT+L-tWm*ou#VEhfkg*eY8)iN0<u2X=V6(vyC01|R<h zMnOPMVvL&gEo6Q^Ksd--&<w#yuI)I|&;>73+S&I?J95macG+BYx}g#Vr-VypT6L|) zFcg;>IH~#hg=49naqE&sF>YKUMRRCAug#5WD$76FO^+Nt8WoO6VXPxe)IhhwO74nU zHCBuL&MIx(dfV+wQBx}*nNiDi;_GG5K-Fof(@>qZEpM133XCJ+dcwLzI~qFt+TmyA zbzi4a2bFKB^5x9G7-zG~*or^$JSruO0LW$D@S~97h$oiAOTT(pW~#FXLh>I---bs1 zysRHhUm32=^aYicPoE1r-4=V}U9IN)&`xVHHskif8Gq!O>U}P3*UYB>Ibl+aFVtpx z?AD+LyvoX|%E$fZn|q)TPJ`s2hgYP)K2ik9aUK;|-vRcB=o?^M9^QC$FxUQ>hojK@ X6}1s~lZ9fP<c~egz+Z-PTtt5XF0$-u diff --git a/verarbeitung/input_test.py b/verarbeitung/input_test.py index 49621e6..44361c4 100644 --- a/verarbeitung/input_test.py +++ b/verarbeitung/input_test.py @@ -67,4 +67,16 @@ inner_edge1 = ['doi_ie1', 'title_ie1', ['contributor_ie1.1', 'contributor_ie1.2' inner_edge2 = ['doi_ie2', 'title_ie2', ['contributor_ie2.1', 'contributor_ie2.2'], 'journal_ie2', 'date_ie2', [], ['doi_ie1','doi_ie3'], ''] inner_edge3 = ['doi_ie3', 'titlez_ie3', ['contributor_ie3.1', 'contributor_ie3.2'], 'journal_ie3', 'date_ie3', ['doi_ie1','doi_ie2'], [], ''] -list_of_arrays = [beispiel1, beispiel2, beispiel3, zyklus1, zyklus2, inner_edge1, inner_edge2, inner_edge3] +right_height01 = ['doi_h01', 'title_h01', ['contributor_h01'], 'journal_h01', 'date_h01', [], [], ''] +right_height02 = ['doi_h02', 'title_h02', ['contributor_h02'], 'journal_h02', 'date_h02', [], ['doi_h1'], ''] +right_height1 = ['doi_h1', 'title_h1', ['contributor_h1'], 'journal_h1', 'date_h1', [], ['doi_h2'], ''] +right_height2 = ['doi_h2', 'title_h2', ['contributor_h2'], 'journal_h2', 'date_h2', [], ['doi_h3'], ''] +right_height3 = ['doi_h3', 'title_h3', ['contributor_h3'], 'journal_h3', 'date_h3', [], [], ''] + +right_depth01 = ['doi_d01', 'title_d01', ['contributor_d01'], 'journal_d01', 'date_d01', [], [], ''] +right_depth02 = ['doi_d02', 'title_d02', ['contributor_d02'], 'journal_d02', 'date_d02', ['doi_d1'], [], ''] +right_depth1 = ['doi_d1', 'title_d1', ['contributor_d1'], 'journal_d1', 'date_d1', ['doi_d2'], [], ''] +right_depth2 = ['doi_d2', 'title_d2', ['contributor_d2'], 'journal_d2', 'date_d2', ['doi_d3'], [], ''] +right_depth3 = ['doi_d3', 'title_d3', ['contributor_d3'], 'journal_d3', 'date_d3', [], [], ''] + +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] diff --git a/verarbeitung/json_text.json b/verarbeitung/json_text.json index 32c49d8..23d7d2d 100644 --- a/verarbeitung/json_text.json +++ b/verarbeitung/json_text.json @@ -1 +1 @@ -{"nodes": [{"name": "title_ie1", "author": ["contributor_ie1.1", "contributor_ie1.2"], "year": "date_ie1", "journal": "journal_ie1", "doi": "doi_ie1", "group": "input"}, {"name": "titlez_ie3", "author": ["contributor_ie3.1", "contributor_ie3.2"], "year": "date_ie3", "journal": "journal_ie3", "doi": "doi_ie3", "group": "height"}, {"name": "title_ie2", "author": ["contributor_ie2.1", "contributor_ie2.2"], "year": "date_ie2", "journal": "journal_ie2", "doi": "doi_ie2", "group": "depth"}], "links": [{"source": "doi_ie3", "target": "doi_ie1"}, {"source": "doi_ie1", "target": "doi_ie2"}, {"source": "doi_ie3", "target": "doi_ie2"}]} \ No newline at end of file +{"nodes": [{"name": "title_h02", "author": ["contributor_h02"], "year": "date_h02", "journal": "journal_h02", "doi": "doi_h02", "group": "input"}, {"name": "title_h1", "author": ["contributor_h1"], "year": "date_h1", "journal": "journal_h1", "doi": "doi_h1", "group": "height"}, {"name": "title_h2", "author": ["contributor_h2"], "year": "date_h2", "journal": "journal_h2", "doi": "doi_h2", "group": "height"}], "links": [{"source": "doi_h1", "target": "doi_h02"}, {"source": "doi_h2", "target": "doi_h1"}]} \ No newline at end of file -- GitLab