Commit c77bf9d2 authored by Mathieu Rodic's avatar Mathieu Rodic

[FEATURE] File parsers - Started working on the IsiFileParser class

parent 6c4a607c
from parsing.FileParsers.FileParser import FileParser
#import FileParser
#
#class EuropressFileParser(FileParser, contents): class EuropressFileParser(FileParser):
#
# def parse(): def parse():
# pass pass
#
from django.db import transaction from django.db import transaction
from FileParser import FileParser from parsing.FileParsers.FileParser import FileParser
class IsiFileParser(FileParser): class IsiFileParser(FileParser):
def parse(self, parentNode): _parameters = {
# read the file, line by line "ER": {"type": "delimiter"},
for line in self.__file: "AU": {"type": "metadata", "key": "authors", "concatenate": False},
"AB": {"type": "metadata", "key": "abstract", "concatenate": True},
}
# open the file as XML def parse(self, parentNode=None, tag=True):
xml_parser = etree.XMLParser(resolve_entities=False, recover=True) metadata = {}
xml = etree.parse(self._file, parser=xml_parser) last_key = None
# parse all the articles, one by one last_values = []
# all database operations should be performed within one transaction for line in self.file:
xml_articles = xml.findall('PubmedArticle') if len(line) > 2:
with transaction.atomic(): parameter_key = line[:2]
for xml_article in xml_articles: if parameter_key != last_key:
# extract data from the document if last_key is not None:
date_year = int(xml_article.find('MedlineCitation/DateCreated/Year').text) parameter = self._parameters[last_key]
date_month = int(xml_article.find('MedlineCitation/DateCreated/Month').text) if parameter["type"] == "metadata":
date_day = int(xml_article.find('MedlineCitation/DateCreated/Day').text) metadata[parameter["key"]] = ' '.join(last_values) if parameter["concatenate"] else last_values
metadata = { elif parameter["type"] == "metadata":
# other metadata should also be included: print(metadata)
# authors, submission date, etc. metadata = {}
"date_pub": datetime.date(year, month, day), break
"journal": xml_article.find('MedlineCitation/Article/Journal/Title').text parameter = self._parameters[last_key]
"title": xml_article.find('MedlineCitation/Article/ArticleTitle').text last_key = parameter_key
"language_iso3": xml_article.find('MedlineCitation/Article/Language').text last_values = []
"doi": xml_article.find('PubmedData/ArticleIdList/ArticleId[type=doi]').text last_values.append(line[3:-1])
} \ No newline at end of file
contents = xml_article.find('MedlineCitation/Article/Abstract/AbstractText').text
# create the document in the database
yield self.create_document(
parentNode = parentNode
title = metadata["title"],
contents = contents,
language = self._languages_iso3[metadata["language"].lower()]
metadata = metadata,
guid = metadata["doi"],
)
...@@ -7,7 +7,7 @@ import datetime ...@@ -7,7 +7,7 @@ import datetime
class PubmedFileParser(FileParser): class PubmedFileParser(FileParser):
def parse(self, parentNode, tag=True): def parse(self, parentNode=None, tag=True):
# open the file as XML # open the file as XML
xml_parser = etree.XMLParser(resolve_entities=False, recover=True) xml_parser = etree.XMLParser(resolve_entities=False, recover=True)
documents = [] documents = []
......
#from parsing.FileParsers import EuropressFileParser from parsing.FileParsers.IsiFileParser import IsiFileParser
from parsing.FileParsers import PubmedFileParser from parsing.FileParsers.PubmedFileParser import PubmedFileParser
from parsing.FileParsers.EuropressFileParser import EuropressFileParser
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment