-
Notifications
You must be signed in to change notification settings - Fork 3
/
dev_playground.py
110 lines (75 loc) · 4.36 KB
/
dev_playground.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
import pickle
from pathlib import Path
from pyclinrec.recognizer.deep_recognizers import IntersEmbeddingConceptRecognizer
endpoint = "https://data-issa.cirad.fr/sparql" # args.endpoint[0]
from_stmt = "http://agrovoc.fao.org/graph" # args.from_stmt[0]
language = "fr" # args.language[0]
output = f"agrovoc-{language}.tsv" # args.output[0]
import os
from pyclinrec.dictionary import generate_dictionary_from_skos_sparql
class AgrovocDictionaryGenerator:
def __init__(self,
endpoint="https://data-issa.cirad.fr/sparql",
graph="http://agrovoc.fao.org/graph",
language="en",
output_dir='.'):
self.endpoint = endpoint
self.graph = graph
self.language = language
self.output = os.path.join(output_dir, f"agrovoc-{language}.tsv")
if not os.path.exists(self.output):
Path(output_dir).mkdir(exist_ok=True)
# generate dict tsv file
print('generating dictionary..')
generate_dictionary_from_skos_sparql(endpoint, self.output,
skos_xl_labels=True,
lang=language,
from_statement=graph)
dict_gen_en = AgrovocDictionaryGenerator(output_dir='./vocab', language="en")
dict_gen_fr = AgrovocDictionaryGenerator(output_dir='./vocab', language="fr")
from pyclinrec.dictionary import MgrepDictionaryLoader
from pyclinrec.recognizer import IntersStemConceptRecognizer
from pyclinrec import __path__ as pyclinrec_path
class AgrovocAnnotator:
def __init__(self, dictionary_file, language="en"):
dictionary_loader = MgrepDictionaryLoader(dictionary_file)
from transformers import AutoTokenizer, AutoModel
model_name = "emilyalsentzer/Bio_ClinicalBERT"
self.concept_recognizer = IntersEmbeddingConceptRecognizer(dictionary_loader, os.path.join(pyclinrec_path[0], f"stopwords{language}.txt"),
os.path.join(pyclinrec_path[0],f"termination_terms{language}.txt"),language, model_name, batch_size=200)
self.concept_recognizer.initialize()
def annotate(self, text):
return self.concept_recognizer(text)
if __name__ == "__main__":
pkl_file = 'AgrovocAnnotator_deep_en.pkl'
if not os.path.exists(pkl_file):
annotator_en = AgrovocAnnotator("./vocab/agrovoc-en.tsv", language="en")
# serialise to save time on initialization
with open(pkl_file, 'wb') as f:
pickle.dump(annotator_en, f)
else:
# deserialize
with open(pkl_file, 'rb') as f:
annotator_en = pickle.load(f)
len(annotator_en.concept_recognizer.concept_index)
pkl_file = 'AgrovocAnnotator_deep_fr.pkl'
if not os.path.exists(pkl_file):
annotator_fr = AgrovocAnnotator("./vocab/agrovoc-fr.tsv", language="fr")
# serialise to save time on initialization
with open(pkl_file, 'wb') as f:
pickle.dump(annotator_fr, f)
else:
# deserialize
with open(pkl_file, 'rb') as f:
annotator_fr = pickle.load(f)
len(annotator_fr.concept_recognizer.concept_index)
text = "Agwergsd. Plant-plant polination is possible"
annotations = annotator_en.annotate(text)
print(len(annotations[2]))
nul = [print(a) for a in sorted(list(annotations[2]), key=lambda x: x.concept_id)]
# text = """
# Les récents progrès des technologies à haut débit ont entraîné une explosion de la quantité de données dans le domaine agronomique. Il est urgent d'intégrer efficacement des informations complémentaires pour comprendre le système biologique dans sa globalité. Nous avons développé AgroLD, une base de connaissances qui exploite la technologie du Web sémantique et des ontologies du domaine biologique pertinentes, pour intégrer les informations sur les espèces végétales et faciliter ainsi la formulation de nouvelles hypothèses scientifiques. Nous présentons des résultats sur le processus d'intégration et sur la plateforme visualisation des données, qui était initialement axé sur la génomique, la protéomique et la phénomique.
# """
# annotations = annotator_fr.annotate(text)
# print(len(annotations[2]))
# nul = [print(a) for a in sorted(list(annotations[2]), key=lambda x: x.start)]