-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsnomedRF2toDB.py
More file actions
75 lines (65 loc) · 2.77 KB
/
snomedRF2toDB.py
File metadata and controls
75 lines (65 loc) · 2.77 KB
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
import csv
import snomedRF2bancoEstrutura as banco
import constantes
import glob
import ntpath
def processarArquivoRF2(arquivo, tabela):
""" Realiza a leitura do arquivo SNOMED no formato textual RF2 para processamento e gravacao no formato relacional
Arguments:
arquivo {str} -- Nome completo do arquivo com seu caminho (path)
tabela {str} -- Nome da tabela a ser processada
"""
bancoDeDados = banco.BDSnomed(constantes.BD_SQL_SNOMED)
with open(arquivo) as arq:
conteudo = csv.reader(arq, delimiter='\t')
with bancoDeDados:
if tabela == 'concept':
for linha in conteudo:
bancoDeDados.inserirConcept(linha)
elif tabela == 'description':
for linha in conteudo:
bancoDeDados.inserirDescription(linha)
elif tabela == 'relationship':
print("Tabela relationship não precisa ser importada")
# for linha in conteudo:
# bancoDeDados.inserirRelationShip(linha)
elif tabela == 'srefset':
for linha in conteudo:
bancoDeDados.inserirSrefSet(linha)
elif tabela == 'statedrelationship':
for linha in conteudo:
bancoDeDados.inserirStatedRelationShip(linha)
elif tabela == 'textdefinition':
print("Tabela textdefinition não precisa ser importada")
# for linha in conteudo:
# bancoDeDados.inserirTextDefinition(linha)
def listaArquivosEmDiretorio(mascara):
""" A partir de uma mascara (*.txt) por exemplo, retorna uma lista com os arquivos
Arguments:
mascara {str} -- Mascara que vai filtrar os arquivos
Returns:
array -- Lista com os arquivos encontrados e filtrados pela mascara
"""
arqs = []
for arq in glob.glob(mascara):
arqs.append(arq)
return arqs
def tematicaDoArquivoSnomed(arquivo):
""" Dado um nome de arquivo, retorna sua segunda parte separada pelo delimitador underline
Arguments:
arquivo {str} -- Exemplo: sct2_Concept_Snapshot_INT_20190731.txt
Returns:
str -- A segunda parte do nome, neste exemplo 'concept'
"""
partes = arquivo.split('_')
return partes[1].lower()
def importaRF2ParaSqliteSNOMED():
""" Permite definir os arquivos e seu caminho para processamento e gravacao no modelo relacional
"""
SNOMEDbaseDir = constantes.TERMINOLOGIA_SNOMED_PATH
arquivos = listaArquivosEmDiretorio(SNOMEDbaseDir + '*.txt')
for arq in arquivos:
tematica = tematicaDoArquivoSnomed(ntpath.basename(arq))
processarArquivoRF2(arq, tematica)
if __name__ == "__main__":
importaRF2ParaSqliteSNOMED()