-
Notifications
You must be signed in to change notification settings - Fork 0
/
NodeExO.py
132 lines (117 loc) · 3.92 KB
/
NodeExO.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from owlready2 import get_ontology, sync_reasoner_pellet
import pandas as pd
import numpy
#print("abrindo ontologia...")
onto = get_ontology("/home/tales/Downloads/NodeESOtaxo.owl").load()
#populate onto
#insert PullRequests and Tags
dados = pd.read_csv('tags-pull-nodejs.csv', sep=";", header=0)
array = dados.values
size = 0
for n in array:
size = size + 1
k = 0
for k in range(size):
tag = onto.Tag("Tag"+str(array[k][1]))
tag.tagname.append(str(array[k][1]))
pull = onto.PullRequest("PullRequest"+str(array[k][0]))
pull.hasTag.append(tag)
k = k + 1
sync_reasoner_pellet(infer_property_values=True, infer_data_property_values=True)
#insert developers
dados = pd.read_csv('author-pull-nodejs.csv', sep=";", header=0)
array = dados.values
size = 0
for n in array:
size = size + 1
k = 0
for k in range(size):
pull = onto.PullRequest("PullRequest"+str(array[k][0]))
dev = onto.Developer("Dev"+str(array[k][1]))
dev.hasPullRequest.append(pull)
k = k + 1
sync_reasoner_pellet(infer_property_values=True, infer_data_property_values=True)
#get all PullRequests
PR = onto.search(type = onto.PullRequest)
N = onto.search(type = onto.NULL)
#for each PullRequest
for i in PR:
top = i.hasTopic
stop = i.hasSpecificTopic
mod = i.hasModule
di = i.hasDirectory
ap = i.hasPA
cont = 1
#print(top,stop,mod)
#if empty receiver NULL. Not to block the loop below.
if(not top):
top = N
if(not stop):
stop = N
if(not mod):
mod = N
if(not di):
di = N
if(not ap):
ap = N
if(top!=N):
for a in top:
for b in mod:
for c in di:
for d in ap:
#create object expertise
ex = onto.Expertise(i.name+"Expertise"+str(cont), hasTopic = [a], hasModule = [b], hasDirectory = [c], hasPA = [d], hasSpecificTopic = N)
#create relation PullRequest hasExpertise
i.hasExpertise.append(ex)
cont = cont + 1
if(stop!=N):
for a in stop:
for b in mod:
for c in di:
for d in ap:
#create object expertise
ex = onto.Expertise(i.name+"Expertise"+str(cont), hasSpecificTopic = [a], hasModule = [b], hasDirectory = [c], hasPA = [d], hasTopic = N)
#create relation PullRequest hasExpertise
i.hasExpertise.append(ex)
cont = cont + 1
if(stop==N and top==N):
for a in top:
for b in mod:
for c in di:
for d in ap:
#create object expertise
ex = onto.Expertise(i.name+"Expertise"+str(cont), hasSpecificTopic = N, hasModule = [b], hasDirectory = [c], hasPA = [d], hasTopic = N)
#create relation PullRequest hasExpertise
i.hasExpertise.append(ex)
cont = cont + 1
sync_reasoner_pellet(infer_property_values=True, infer_data_property_values=True)
#required expertise
top = '[NodeESOtaxo.null]'
stop = '[NodeESOtaxo.C++]'
mod = '[NodeESOtaxo.null]'
di = '[NodeESOtaxo.null]'
pa = '[NodeESOtaxo.null]'
D = onto.search(type = onto.Developer)
num = 0
for j in D:
num = num + 1
count = 0
ex = j.hasExpertise
for k in ex:
flag = 1
if(top != str(k.hasTopic)):
flag = 0
if(stop != str(k.hasSpecificTopic)):
flag = 0
if(mod != str(k.hasModule)):
flag = 0
if(di != str(k.hasDirectory)):
flag = 0
if(pa != str(k.hasPA)):
flag = 0
if(flag == 1):
count = count + 1
wei = onto.Weight("Developer"+str(num)+"Weight")
wei.weight.append(count)
#print(count)
onto.save(file = "/home/tales/Downloads/result.owl", format = "rdfxml")