-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathobo-xrefs-to-sssom.pl
executable file
·124 lines (114 loc) · 2.75 KB
/
obo-xrefs-to-sssom.pl
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
#!/usr/bin/perl -w
use strict;
my %MAP = (
equivalentTo => "skos:exactMatch",
obsoleteEquivalent => "skos:exactMatch",
equivalentObsolete => "skos:exactMatch",
);
my @hdr = qw(
subject_id subject_label
predicate_id
object_id object_label
match_type
confidence
comment
);
my $DEFAULT;
$DEFAULT = 'skos:closeMatch';
while ($ARGV[0] =~ /^\-/) {
my $opt = shift @ARGV;
if ($opt eq '-h' || $opt eq '--help') {
print usage();
exit 0;
}
elsif ($opt eq '-p' || $opt eq '--predicate') {
$DEFAULT = shift @ARGV;
}
else {
die $opt;
}
}
my @lines = <>;
my %idh = ();
foreach (@lines) {
s@property_value: NCIT:P207 "(C\S+)"@xref: UMLS:$1@g;
s@^NCI:@NCIT:@;
s@^UMLS_CUI:@UMLS:@;
if (/^id:\s+(\S+)/) {
$idh{$1}++;
}
if (/^xref:\s+(\S+)/) {
$idh{$1}++;
}
}
my %dbh = ();
foreach my $id (keys %idh) {
$id =~ m@(\S+):@;
$dbh{$1}++;
}
print "#curie_map:\n";
print "# $_: http://purl.obolibrary.org/obo/$_"."_\n" foreach keys %dbh;
print join("\t", @hdr)."\n";
my $id;
my $name;
foreach (@lines) {
chomp;
if (/^id:\s+(\S+)/) {
$id = $1;
$name = "";
}
elsif (/^name:\s+(.*)/) {
$name = $1;
}
elsif (m@xref:\s+(\S+)(.*)@) {
my $x = $1;
my $xn = "";
my $rest = $2;
my $pred = $DEFAULT;
my $match_type = "Curated";
my $comment = "";
my $confidence = "0.5";
if ($rest =~ m@ \! (.*)@) {
$xn = $1;
}
if ($rest =~ m@\{(.*)}@) {
my $qualstr = $1;
$comment = $qualstr;
my @quals = split(/, /, $qualstr);
foreach my $q (@quals) {
my ($k, $v) = split('=',$q);
$v =~ s@\"@@g;
if ($v =~ m@^MONDO:(\S+)@) {
my $type = $1;
if ($MAP{$type}) {
$pred = $MAP{$type};
}
}
# ORDO specific
if ($v =~ m@^E \(Exact@) {
$pred = 'skos:exactMatch';
$confidence = 0.9;
}
if ($v =~ m@^NTBT@) {
$pred = 'owl:subClassOf';
$confidence = 0.9;
}
if ($v =~ m@^BTNT@) {
$pred = 'inverseOf(owl:subClassOf)';
$confidence = 0.9;
}
}
}
$x =~ s@^NCI:@NCIT:@;
$x =~ s@^UMLS_CUI:@UMLS:@;
my @row = (
$id, $name,
$pred,
$x, $xn,
$match_type,
$confidence,
$comment
);
print join("\t", @row)."\n";
}
}