From 7412025849abe85b67698b1309fb9ec9d7139912 Mon Sep 17 00:00:00 2001 From: Merle Stahl <merle.stahl@studium.uni-hamburg.de> Date: Wed, 15 Dec 2021 16:39:48 +0100 Subject: [PATCH] =?UTF-8?q?l=C3=B6schen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- count_journal.py | 40 --- example_input.py | 13 - input/README.md | 50 --- input/__init__.py | 0 input/get/__init__.py | 0 input/get/acs.py | 192 ----------- input/get/journal_fetcher.py | 96 ------ input/get/nature.py | 59 ---- input/get/template_.py | 51 --- input/interface.py | 113 ------- input/publication.py | 143 --------- input/requirements.txt | 2 - input/test/__init__.py | 0 input/test/test_acs.py | 303 ------------------ input/test/test_input.py | 82 ----- input_old/README.md | 3 - input_old/__pycache__/input_fj.cpython-39.pyc | Bin 4300 -> 0 bytes input_old/example_urls | 2 - input_old/input_fj.py | 154 --------- input_old/pub.py | 32 -- input_old/test.py | 15 - input_old/x | 234 -------------- verarbeitung/Processing.py | 247 -------------- verarbeitung/Processing_unittest.py | 66 ---- .../__pycache__/Processing.cpython-36.pyc | Bin 3693 -> 0 bytes .../__pycache__/Processing.cpython-38.pyc | Bin 4009 -> 0 bytes .../__pycache__/Processing.cpython-39.pyc | Bin 4045 -> 0 bytes .../Processing_pub_objs_only.cpython-39.pyc | Bin 4137 -> 0 bytes .../__pycache__/input_fj.cpython-36.pyc | Bin 4299 -> 0 bytes .../__pycache__/input_fj.cpython-38.pyc | Bin 4329 -> 0 bytes .../__pycache__/input_fj.cpython-39.pyc | Bin 4337 -> 0 bytes .../__pycache__/input_test.cpython-36.pyc | Bin 2579 -> 0 bytes .../__pycache__/input_test.cpython-38.pyc | Bin 2862 -> 0 bytes .../__pycache__/input_test.cpython-39.pyc | Bin 3865 -> 0 bytes .../__pycache__/json_demo.cpython-36.pyc | Bin 865 -> 0 bytes .../__pycache__/json_demo.cpython-38.pyc | Bin 1131 -> 0 bytes .../__pycache__/json_demo.cpython-39.pyc | Bin 1163 -> 0 bytes .../__pycache__/unittest.cpython-36.pyc | Bin 646 -> 0 bytes verarbeitung/input_test.py | 82 ----- verarbeitung/json_demo.py | 49 --- "verarbeitung/n\303\266tige Tests.txt" | 4 - 41 files changed, 2032 deletions(-) delete mode 100755 count_journal.py delete mode 100755 example_input.py delete mode 100644 input/README.md delete mode 100644 input/__init__.py delete mode 100755 input/get/__init__.py delete mode 100755 input/get/acs.py delete mode 100755 input/get/journal_fetcher.py delete mode 100644 input/get/nature.py delete mode 100755 input/get/template_.py delete mode 100755 input/interface.py delete mode 100755 input/publication.py delete mode 100644 input/requirements.txt delete mode 100644 input/test/__init__.py delete mode 100644 input/test/test_acs.py delete mode 100755 input/test/test_input.py delete mode 100644 input_old/README.md delete mode 100644 input_old/__pycache__/input_fj.cpython-39.pyc delete mode 100644 input_old/example_urls delete mode 100644 input_old/input_fj.py delete mode 100644 input_old/pub.py delete mode 100755 input_old/test.py delete mode 100644 input_old/x delete mode 100644 verarbeitung/Processing.py delete mode 100644 verarbeitung/Processing_unittest.py delete mode 100644 verarbeitung/__pycache__/Processing.cpython-36.pyc delete mode 100644 verarbeitung/__pycache__/Processing.cpython-38.pyc delete mode 100644 verarbeitung/__pycache__/Processing.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/Processing_pub_objs_only.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/input_fj.cpython-36.pyc delete mode 100644 verarbeitung/__pycache__/input_fj.cpython-38.pyc delete mode 100644 verarbeitung/__pycache__/input_fj.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/input_test.cpython-36.pyc delete mode 100644 verarbeitung/__pycache__/input_test.cpython-38.pyc delete mode 100644 verarbeitung/__pycache__/input_test.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/json_demo.cpython-36.pyc delete mode 100644 verarbeitung/__pycache__/json_demo.cpython-38.pyc delete mode 100644 verarbeitung/__pycache__/json_demo.cpython-39.pyc delete mode 100644 verarbeitung/__pycache__/unittest.cpython-36.pyc delete mode 100644 verarbeitung/input_test.py delete mode 100644 verarbeitung/json_demo.py delete mode 100644 "verarbeitung/n\303\266tige Tests.txt" diff --git a/count_journal.py b/count_journal.py deleted file mode 100755 index 13886a2..0000000 --- a/count_journal.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python3 - -from input.interface import InputInterface as Input - -def count_journals(url: str): - inter = Input() - pub = inter.get_publication(url) - - if pub.citations: - for citation in pub.citations: - journal = citation.journal - if journal in cit: - cit[journal] += 1 - else: - cit[journal] = 1 - - if pub.references: - for reference in pub.references: - journal = reference.journal - if journal in cit: - cit[journal] += 1 - else: - cit[journal] = 1 - -if __name__ == "__main__": - cit = {} - - count_journals("https://doi.org/10.1021/acs.jcim.1c00203") - count_journals("https://doi.org/10.1021/acs.jcim.6b00561") - count_journals("https://doi.org/10.1021/acs.jcim.6b00613") - count_journals("https://doi.org/10.1021/acs.jcim.1c00917") - count_journals("https://doi.org/10.1021/acs.jmedchem.0c01332") - #count_journals("https://pubs.acs.org/doi/10.1021/acs.biochem.1c00290") - #count_journals("https://pubs.acs.org/doi/10.1021/acsenvironau.1c00007") - #count_journals("https://pubs.acs.org/doi/10.1021/acs.biochem.7b01162") - - cit = dict(sorted(cit.items(), key=lambda item: item[1])) - for journal in cit: - if journal != "": - print(f'{journal}: {cit[journal]}') diff --git a/example_input.py b/example_input.py deleted file mode 100755 index c9bca41..0000000 --- a/example_input.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python3 - -from input.interface import InputInterface as Input - -def main(url: str): - i = Input() - #print(i.get_publication(url)) - print(i.get_pub_light(url)) - # print(i.get_supported_fetchers()) Useless because all classes are called the same - -if __name__ == "__main__": - #main("https://doi.org/10.1021/acs.jcim.1c0023") - main("https://doi.org/10.1021/acs.jcim.5b00332") diff --git a/input/README.md b/input/README.md deleted file mode 100644 index 110ce69..0000000 --- a/input/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Projekt CiS-Projekt 2021/22 - -Input-Package to fetch publication information with a given url. - -## Usage/Examples - -```python -from input.interface import InputInterface as Input -from input.publication import Publication - -def main(url): - inter = Input() - try: - pub = inter.get_publication(url) - except Exception as error: - raise error - - print(pub) - pub.title = "Cool new Title" - print(pub) - -if __name__ == "__main__": - main("https://doi.org/10.1021/acs.chemrev.8b00728") -``` - -The expected results of calling this methode are: -| Input-Url | Result | -|-----------|-----------| -| supported & correct| A publication Instance | -| supported & uncorrect| ValueError| -| not supported | ValueError| - -Supported Url are urls, which comply with the url-pattern of supported Journals. - -### Supported Journals: - -- ACS-Journals -- (Nature-Journals) - -## Testing - -``` c -python -m unittest input/test/<file.py> -v -# for all tests in directory -python -m unittest discover input/test -v -``` -## Authors -- Florian Jochens -- Sam Ockenden -- Julius Schenk \ No newline at end of file diff --git a/input/__init__.py b/input/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/input/get/__init__.py b/input/get/__init__.py deleted file mode 100755 index e69de29..0000000 diff --git a/input/get/acs.py b/input/get/acs.py deleted file mode 100755 index 9691845..0000000 --- a/input/get/acs.py +++ /dev/null @@ -1,192 +0,0 @@ -#!/usr/bin/env python3 - -""" -Child class of JournalFetcher -Usage: Check if Url can be used with 'can_use_url' - and then fetch publication with 'get_publication' -""" - -import re - -from input.get.journal_fetcher import JournalFetcher -from input.publication import Publication, Citation - - -class Fetcher(JournalFetcher): - """ - Specific Fetcher for the ACS journals. - """ - - # Constant for the abbreviations of the supported Journals - SUPPORTED_JOURNALS = ['1021'] - - @staticmethod - def can_use_url(url: str) -> str: - """ - Uses Regex to extract journal specific substrings in Doi. - TODO: Support non Doi-urls - """ - matched_url = re.match(r'^(https?://)?(doi.org/|pubs.acs.org/doi/)?(10.(\d{4})/\w+.\S+)', url.strip(". \t\r\n")) - - #Checks if match exists - if matched_url is not None: - return matched_url[4] in Fetcher.SUPPORTED_JOURNALS - else: - return False - - @staticmethod - - - def get_pub_light(url: str) -> Publication: - """ - Fetches html and creates Beatifulsoup-instance in parent class. - Specific css-searches for ACS-Journals and creates Publication-instance. - """ - - # Creation of Soup - try: - soup = JournalFetcher.get_soup(url) - except Exception as error: - raise error - - # Raise Error if re recognizes Pattern, but url isnt correct: - # For other Urls - if soup.text.strip(" \t\n")=="Missing resource null": - raise ValueError("'{}' matches Pattern for 'ACS', but doesnt link to Paper.".format(url)) - - # For Dois - if soup.title is not None: - if soup.title.text == "Error: DOI Not Found": - raise ValueError("'{}' matches Pattern for 'ACS', but doesnt link to Paper.".format(url)) - - - soup_header = soup.select('.article_header')[0] - - # Creates Publication - doi_url = soup_header.select('a[title="DOI URL"]')[0].string - title = soup_header.select(".hlFld-Title")[0].text - - contributors = [] - for author in soup_header.select(".hlFld-ContribAuthor"): - contributors.append(author.text) - - journal = soup_header.select(".cit-title")[0].text - - # Replaces abbreviation with whole name - if journal in JournalFetcher.abbrev_dict: - journal = JournalFetcher.abbrev_dict[journal] - - - published = soup_header.select(".pub-date-value")[0].text - - subjects = [] - subject_soup = soup_header.select('.article_header-taxonomy')[0] - for subject in subject_soup.select('a'): - subjects.append(subject.text) - - return Publication(doi_url, title, contributors, journal, published, - subjects) - - def get_publication(url: str) -> Publication: - """ - Fetches html and creates Beatifulsoup-instance in parent class. - Specific css-searches for ACS-Journals and creates Publication-instance. - """ - - # Creation of Soup - try: - soup = JournalFetcher.get_soup(url) - except Exception as error: - raise error - - # Raise Error if re recognizes Pattern, but url isnt correct: - # For other Urls - if soup.text.strip(" \t\n")=="Missing resource null": - raise ValueError("'{}' matches Pattern for 'ACS', but doesnt link to Paper.".format(url)) - - # For Dois - if soup.title is not None: - if soup.title.text == "Error: DOI Not Found": - raise ValueError("'{}' matches Pattern for 'ACS', but doesnt link to Paper.".format(url)) - - - soup_header = soup.select('.article_header')[0] - - #Could be used for more specific search - ref_cit_soup = soup - - # Creates Publication - doi_url = soup_header.select('a[title="DOI URL"]')[0].string - title = soup_header.select(".hlFld-Title")[0].text - - contributors = [] - for author in soup_header.select(".hlFld-ContribAuthor"): - contributors.append(author.text) - - journal = soup_header.select(".cit-title")[0].text - - # Replaces abbreviation with whole name - if journal in JournalFetcher.abbrev_dict: - journal = JournalFetcher.abbrev_dict[journal] - - - published = soup_header.select(".pub-date-value")[0].text - - subjects = [] - subject_soup = soup_header.select('.article_header-taxonomy')[0] - for subject in subject_soup.select('a'): - subjects.append(subject.text) - - - references = [] - references_soup = ref_cit_soup.select('ol#references') - if references_soup != []: - for reference in references_soup[0].select('li'): - if reference.select('.refDoi') != []: - ref_doi = "https://doi.org/{}".format(reference.select('.refDoi')[0].text.strip()[5:]) - else: - # No Doi -> No Paper - continue - ref_title = reference.select('.NLM_article-title')[0].text\ - if reference.select('.NLM_article-title') != [] else None - ref_journal = reference.select('i')[0].text\ - if reference.select('i') != [] else None - - # Replaces abbreviation with whole name - if ref_journal in JournalFetcher.abbrev_dict: - ref_journal = JournalFetcher.abbrev_dict[ref_journal] - - ref_contributors=[] - for author in reference.select('.NLM_contrib-group'): - ref_contributors.append(author.text.replace("\n", " ").replace("\r", "")) - - references.append(Citation(ref_doi, ref_title, ref_journal, ref_contributors, cit_type="Reference")) - - citations = [] - citation_soup = ref_cit_soup.select('.cited-content_cbyCitation') - if citation_soup != []: - for citation in citation_soup[0].select('li'): - if citation.select('a[title="DOI URL"]') != []: - cit_doi = citation.select('a[title="DOI URL"]')[0].text - else: - # No Doi -> No Paper - continue - cit_title = citation.select('.cited-content_cbyCitation_article-title')[0].text\ - if citation.select('.cited-content_cbyCitation_article-title')!= [] else None - cit_journal = citation.select('.cited-content_cbyCitation_journal-name')[0].text\ - if citation.select('.cited-content_cbyCitation_journal-name') != [] else None - - # Replaces abbreviation with whole name - if cit_journal in JournalFetcher.abbrev_dict: - cit_journal = JournalFetcher.abbrev_dict[cit_journal] - cit_contributors =[] - cit_contributors = citation.select('.cited-content_cbyCitation_article-contributors')[0]\ - .text.replace("\n", " ").replace("\r", "").split(', ') - # clean up of the last Entry - cit_contributors_last = cit_contributors.pop().strip(". ") - if cit_contributors_last != '': - cit_contributors.append(cit_contributors_last) - citations.append(Citation(cit_doi, cit_title, cit_journal, cit_contributors, cit_type = "Citation")) - - return Publication(doi_url, title, contributors, journal, published - , subjects, references, citations) diff --git a/input/get/journal_fetcher.py b/input/get/journal_fetcher.py deleted file mode 100755 index 514af1f..0000000 --- a/input/get/journal_fetcher.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env python3 - -""" -Parent class for specific Journal -""" - -from abc import ABCMeta, abstractmethod -from bs4 import BeautifulSoup -import requests -from input.publication import Publication - - -class JournalFetcher(metaclass=ABCMeta): - """ - This is a abstract-class for fetcher modules - """ - - @staticmethod - def get_soup(url: str) -> BeautifulSoup: - """ - Retrieves webside-html and returns a BeautifulSoup-instance - - Parameters: - ----------- - :type url: str - :param url: doi-url to a publication - :return: BeatifulSoup-instance - """ - try: - req = requests.get(url) - except requests.exceptions.HTTPError as err: - raise SystemExit(err) - - return BeautifulSoup(req.content, 'html.parser') - - - @staticmethod - @abstractmethod - def can_use_url(url: str) -> bool: - """ - Abstract-function to be implemented in subclass. - Checks if given url links to a supported journal - """ - raise AttributeError("JournalFetcher for '{}' hasnt implemented 'can_use_url()'".format(url)) - - - @staticmethod - @abstractmethod - def get_publication(url: str) -> Publication: - """ - Abstract-function to be implemented in subclass. - Creates a Publication-instance. - """ - raise AttributeError("JournalFetcher for '{}' hasnt implemented 'get_publication()'".format(url)) - - - # A Dictionary, which connects abbreviation to whole journal-name - abbrev_dict = { - "Nat. Protoc.":"Journal of Natural Products" - ,"PLoS Comput. Biol.":"PLoS Computational Biology" - ,"PLoS One":"PLoS One" - ,"Protein Sci.":"Protein Science" - ,"J. Am. Chem. Soc.":"Journal of the American Chemical Society" - ,"J. Chem. Phys.":"Journal of Chemical Physics" - ,"Appl. Sci.":"Applied Science" - ,"Comput. Sci. Eng.":"Computing in Science & Engineering" - ,"Beilstein J. Org. Chem.":"Beilstein Journal of Organic Chemistry" - ,"Biol. Chem.":"Biological Chemistry" - ,"Isr. J. Chem.":"Israel Journal of Chemistry" - ,"Nat. Methods":"Nature Methods" - ,"Proc. Natl. Acad. Sci. U. S. A.":"Proceedings of the National Academy of Sciences of the United States of America" - ,"J. Phys. Chem. B":"Journal of Physical Chemistry B" - ,"Carbohydr. Res.":"Carbohydrate Research" - ,"J. Chem. Theory Comput.":"Journal of Chemical Theory and Computation" - ,"J. Mol. Biol.":"Journal of Molecular Biology" - ,"Nucleic Acids Res.":"Nucleic Acids Research" - ,"J. Comput. Chem.":"Journal of Computational Chemistry" - ,"J. Cheminf.":"Journal of Cheminformatics" - ,"J. Med. Chem.":"Journal of Medicinal Chemistry" - ,"J. Comput.-Aided Mol. Des.":"Journal of Computer-Aided Molecular Design" - ,"J. Chem. Inf. Model.":"Journal of Chemical Information and Modeling" - ,"Mol. Cell":"Molecular Cell" - ,"J. Cell Biolog.":"Journal of Cell Biology" - ,"Mol. Cell Biol.":"Molecular and Cellular Biology" - ,"J. Cell Sci.":"Journal of Cell Science" - ,"Nat. Cell Biol.":"Nature Cell Biology" - ,"J. Aerosol Sci. Technol.":"Aerosol Science and Technology" - ,"Mol. Biol. Cell":"Molecular Biology of the Cell" - ,"Build. Environ.":"Building and Environment" - ,"Sci. Rep.":"Scientific Reports" - ,"Nat. Chem.":"Nature Chemistry" - ,"Nat. Med.":"Nature Medicine" - ,"Nat. Commun.":"Nature Communications" - ,"Exp. Cell Res.":"Experimental Cell Research" - ,"Nat. Chem. Biol.":"Nature Chemical Biology" - } \ No newline at end of file diff --git a/input/get/nature.py b/input/get/nature.py deleted file mode 100644 index c50ea0e..0000000 --- a/input/get/nature.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python3 - -""" -Child class of JournalFetcher -Usage: Check if Url can be used with 'can_use_url' - and then fetch publication with 'get_publication' -""" - -# import re -from input.get.journal_fetcher import JournalFetcher -from input.publication import Publication - - -class Fetcher(JournalFetcher): - - """ - scrapes publication metadata from a provided url - """ - - # TODO: List of Compatable Journals - # NOTE: nature does not use journal names in doi links, must match by 10.xxxx identifier instead - SUPPORTED_JOURNALS = [] - - @staticmethod - def can_use_url(url: str) -> bool: - """ - Checks if given url links to a supported journal. - """ - - # TODO: Check the URL for compatability - # re.match in SUPPORTED_JOURNALS - return False - - @staticmethod - def get_publication(url: str) -> Publication: - """ - Creates a Publication-instance. - """ - - soup = JournalFetcher.get_soup(url) - - _doi_url = "https://doi.org/" + soup.head.find(attrs={"name": "DOI"}).get("content") - _title = soup.head.find(attrs={"name": "citation_title"}).get("content") - _journal = soup.head.find(attrs={"name": "citation_journal_title"}).get("content") - _published = soup.head.find(attrs={"name": "prism.publicationDate"}).get("content") - _contributors = [] - _subjects = [] - - for creator in soup.head.findAll(attrs={"name": "dc.creator"}): - _contributors.append(creator.get("content")) - - for subject in soup.head.findAll(attrs={"name": "dc.subject"}): - _subjects.append(subject.get("content")) - - return Publication(_doi_url, _title, _contributors, _journal, _published, _subjects) - - # TODO: Exceptions-handling - # raise ValueException("Cant Fetch: '{}'".format(error)) - # return None diff --git a/input/get/template_.py b/input/get/template_.py deleted file mode 100755 index 58de023..0000000 --- a/input/get/template_.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python3 - -""" -Child class of JournalFetcher -Usage: None, this is just a template and should be ignored -""" - -# import re -from input.get.journal_fetcher import JournalFetcher -from input.publication import Publication - - -class Fetcher(JournalFetcher): - - """ - This is only a template and therefore has no functionality - """ - - # TODO: Naming-Convention: - # Class: 'Fetcher' - # file: [journal-/organisation-name] - # format = "[a-z]*.py" allowed - # TODO: List of Compatable Journals - SUPPORTED_JOURNALS = [] - - @staticmethod - def can_use_url(url: str) -> bool: - """ - Checks if given url links to a supported journal. - """ - - # TODO: Check the URL for compatability - # url_re = re.match(r'(https?://)?(doi.org/)?(10.(\d{4})/\w+.\S+)', url) - # if url_re is not None: - # return url_re[4] in SUPPORTED_JOURNALS - # else: - return False - - @staticmethod - def get_publication(url: str) -> Publication: - """ - Creates a Publication-instance. - """ - - # TODO: Fetch data from the HTML - # soup = JournalFetcher.get_soup(url) - # doi,title,contributors[],journal,publication_date,subjects[],references[],citations[] - # TODO: Create new Publication-instance - # return Publication(doi_url, title, contributors = [], journal - # , publication_date, subjects = [], references = [], citations = []) - return None \ No newline at end of file diff --git a/input/interface.py b/input/interface.py deleted file mode 100755 index 59515b3..0000000 --- a/input/interface.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python3 - -""" -Interface for the Input-Package only this should be accessed from outside this Package. - -""" -from os import walk -import importlib -import pathlib -import re -from input.publication import Publication - -class InputInterface: - """ - Singleton which dynamically imports and manages fetchers - """ - - instance = None - get_path = None - fetcher_classes=[] - - # '__new__' is called before '__init__' and gives us an instance - def __new__(cls, *args, **kwargs): - - # checks if an instance exists and if it doesnt creates one - if cls.instance == None: - cls.instance = super(InputInterface, cls).__new__(cls,*args, **kwargs) - - return cls.instance - - def __init__(self): - # imports all modules - - if self.fetcher_classes ==[]: - self.import_fetcher_classes() - if self.fetcher_classes ==[]: - raise AttributeError("No specific Fetchers where found at: '{}'" - .format(self.get_path)) - - - def get_publication(self, url: str) -> Publication: - """ - The interface-method to get a Publication-instance - (including it's citations and references) - - Parameters - ---------- - :param url: url to a Publication - :type url: str - :return: Publication instance or None if not supported - """ - - # Checks if module supports the 'url' and - # returns a Publication if it does. - for fetcher_class in InputInterface.fetcher_classes: - if fetcher_class.can_use_url(url): - return fetcher_class.get_publication(url) - - # No Module for given url was found - raise ValueError("'{}' is not supported".format(url)) - - def get_pub_light(self, url: str) -> Publication: - """ - The interface-method to get a Publication-instance - (only for main article) - - Parameters - ---------- - :param url: url to a Publication - :type url: str - :return: Publication instance or None if not supported - """ - - # Checks if module supports the 'url' and - # returns a Publication if it does. - for fetcher_class in InputInterface.fetcher_classes: - if fetcher_class.can_use_url(url): - return fetcher_class.get_pub_light(url) - - # No Module for given url was found - raise ValueError("'{}' is not supported".format(url)) - - def get_supported_fetchers(self): - # print(self.fetcher_classes[0].__name__) Useless right now, - # because all classes are called the same - return [a.__name__ for a in self.fetcher_classes] - - def import_fetcher_classes(self): - """ - Searches in 'get', if there are [a-z]*.py modules (specific Fetchers) - and tries to import them. - Saves found modules in 'fetcher_files'. - """ - - # Path to 'get'-package - self.get_path = '{}/get'.format(pathlib.Path(__file__).parent.resolve()) - - # Searches for modules with given Pattern - fetcher_file_names=[] - for file in next(walk(self.get_path), (None, None, []))[2]: - if re.match(r'[a-z]+.py', file) is not None: - fetcher_file_names.append(file) - - # Tries to import those modules and saves their 'Fetcher'-class - for file in fetcher_file_names: - try: - fetcher_class = importlib.import_module("input.get.{}".format(file[:-3])) - try: - self.fetcher_classes.append(fetcher_class.__getattribute__('Fetcher')) - except Exception as error: - ImportError("Module '{}' does not have a 'Fetcher'-class".format(file[:-3])) - except Exception: - raise ImportError("Module '{}' can not be imported".format(file[:-3])) diff --git a/input/publication.py b/input/publication.py deleted file mode 100755 index fc512e7..0000000 --- a/input/publication.py +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/env python3 - -# this is needed for typing pre python 3.9, this maybe as an large Overhead -from typing import Any, List - - -class Publication: - """ - Represents a Publications - """ - def __init__(self, doi_url: str, title: str \ - , contributors: List[str], journal: str \ - , publication_date: str, subjects: List[str]\ - , references: List[Any] = None, citations: List[Any] = None ): - """ - Parameters - ---------- - :param doi_url: doi_url of the publication - :type doi_url: str - :param title: title of the publication - :type title: str - :param contributors:list of all contributors - :type contributors: list[] - :param published: date of release - :type published: str - :param subjects: the subject of the Publication - :type subjects: List[str] - :param references: the Citation which is been referenced by this Publication - :type references: List[Any] - :param citations: the Citation which references this Publication - :type citations: List[Any] - :return: None - """ - self.doi_url = doi_url - self.title = title - self.contributors = contributors - self.journal = journal - self.publication_date = publication_date - self.subjects = subjects - if references is None: - self.references = [] - else: - self.references = references - if citations is None: - self.citations = [] - else: - self.citations = citations - - # For the 'Verarbeitungsgruppe' - self.group = None - - def __str__(self) -> str: - return ("Title: {}\n" - "Doi-url: {}\n" - "Authors: {}\n" - "Journal: {}\n" - "Published on: {}\n" - "Subjects: {}\n" - "References: \n{}\n" - "Citations: \n{}")\ - .format(self.title, self.doi_url, ", ".join(self.contributors) - , self.journal, self.publication_date - , ", ".join(self.subjects) - , "\n".join(self.get_citation_string(self.references)) - , "\n".join(self.get_citation_string(self.citations))) - - @staticmethod - def get_citation_string(citations): - if citations == []: - return ["None"] - else: - citation_string = [] - for citation in citations: - citation_string.append(citation.__str__()) - return citation_string - - def add_citations(self, citation) -> None: - """ - Appends a list of Citations or Citation to self.citations. - - Parameter - --------- - :param citation: Citation or Reference of the Publication - :type citation: Citation or list[Citation] - :return: self.citations - """ - if type(citation) is Citation: - self.citations.append(citation) - - # Checks if 'citation' is a list of Citations - elif type(citation) is list: - for _cit in citation: - if type(_cit) is Citation: - self.citations.append(_cit) - else: - raise TypeError("_set_citation expects Citations or List of Citations, not: '{}'" - .format(type(_cit))) - else: - raise TypeError("_set_citation expects Citations or List of Citations, not: '{}'" - .format(type(citation))) - - return self.citations - - def __eq__(self, other) -> bool: - """ Compares the unique doi_url of two Publications""" - if type(self)==type(other): - return self.doi_url == other.doi_url - return False - - -class Citation: - def __init__(self, doi_url: str, title: str \ - , journal: str, contributors: List[str] \ - , cit_type: str = "Citation"): - """ - Parameters - ---------- - :param doi_url: doi_url of the publication - :type doi_url: str - :param title: title of the publication - :type title: str - :param contributors: list of all contributors - :type contributors: List[str] - :param cit_type: Specifies if Reference or Citation - :type cit_type: str - :return: None - """ - - self.title = title - self.doi_url = doi_url - self.journal = journal - self.contributors = contributors - self.cit_type = cit_type - - def __str__(self) -> str: - return ("\t{}-Title: {}\n" - "\t{}-Doi: {}\n" - "\t{}-Journal: {}\n" - "\t{}-Contributors: {}\n")\ - .format(self.cit_type, self.title - , self.cit_type, self.doi_url - , self.cit_type, self.journal - , self.cit_type, ", ".join(self.contributors)) diff --git a/input/requirements.txt b/input/requirements.txt deleted file mode 100644 index a151126..0000000 --- a/input/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -beautifulsoup4 -requests \ No newline at end of file diff --git a/input/test/__init__.py b/input/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/input/test/test_acs.py b/input/test/test_acs.py deleted file mode 100644 index e3dfe84..0000000 --- a/input/test/test_acs.py +++ /dev/null @@ -1,303 +0,0 @@ -#!/usr/bin/env python - -from input.get.acs import Fetcher as Acs -from input.publication import Publication, Citation -from input.test.test_input import FetcherTestCase - - -class AcsTestCase(FetcherTestCase): - """ - Methods with test_* will be detected by unittest and run. - """ - - def test_acs_url(self): - # Positive Testing - self.can_use_url_test(Acs, "https://doi.org/10.1021/acs.jcim.1c00203" , True) - self.can_use_url_test(Acs, "doi.org/10.1021/acs.jcim.1c00203" , True) - self.can_use_url_test(Acs, "10.1021/acs.jcim.1c00203" , True) - self.can_use_url_test(Acs, " 10.1021/acs.jcim.1c00203" , True) - self.can_use_url_test(Acs, "10.1021/acs.jcim.1c00203 " , True) - self.can_use_url_test(Acs, "\t 10.1021/acs.jcim.1c00203 \t\n" , True) - self.can_use_url_test(Acs, "https://pubs.acs.org/doi/10.1021/acs.jcim.1c00203" , True) - - # Negative Testing - self.can_use_url_test(Acs, "" , False) - self.can_use_url_test(Acs, "https://doi.org/10.1038/219021a0" , False) - self.can_use_url_test(Acs, "https://www.nature.com/articles/219021a0" , False) - self.can_use_url_test(Acs, "https://pubs.acs.org/doi/doi.org/10.1021/acs.jcim.1c00203", False) - - - - def test_acs_publication(self): - url = "https://doi.org/10.1021/acs.jcim.1c00203" - self.get_publication_test(Acs, url, self.expectedPubs[url]) - - def test_acs_exceptions(self): - test_url= "https://doi.org/10.1021/acs.jcim.1c002" - self.get_publication_exception_test(Acs, test_url) - - # Dictionary of Expected Results, with url - expectedPubs = { - "https://doi.org/10.1021/acs.jcim.1c00203": - Publication( - doi_url = "https://doi.org/10.1021/acs.jcim.1c00203", - title = "AutoDock Vina 1.2.0: New Docking Methods, Expanded Force Field, and Python Bindings", - contributors = ["Jerome Eberhardt", "Diogo Santos-Martins", "Andreas F. Tillack", "Stefano Forli"], - journal="Journal of Chemical Information and Modeling", - publication_date = "July 19, 2021", - subjects = ["Algorithms","Ligands","Molecules","Receptors","Macrocycles"], - references = [ - Citation(doi_url = "https://doi.org/10.1002/jcc.21334" - , title ="AutoDock Vina: improving the speed and accuracy of docking with a new scoring function, efficient optimization, and multithreading" - , journal="Journal of Computational Chemistry" - , contributors=["Trott, O.", "Olson, A. J."] - , cit_type="Reference") - , Citation(doi_url = "https://doi.org/10.1038/nprot.2016.051" - , title ="Computational protein-ligand docking and virtual drug screening with the AutoDock suite" - , journal="Journal of Natural Products" - , contributors=["Forli, S.","Huey, R.","Pique, M. E.","Sanner, M. F.","Goodsell, D. S.","Olson, A. J."] - , cit_type="Reference") - , Citation(title = "A semiempirical free energy force field with charge-based desolvation" - , doi_url = "https://doi.org/10.1002/jcc.20634" - , journal="Journal of Computational Chemistry" - , contributors=["Huey, R.","Morris, G. M.","Olson, A. J.","Goodsell, D. S."] - , cit_type="Reference") - , Citation(title="Accelerating autodock4 with gpus and gradient-based local search" - , doi_url="https://doi.org/10.1021/acs.jctc.0c01006" - , journal="Journal of Chemical Theory and Computation" - , contributors=["Santos-Martins, D.","Solis-Vasquez, L.","Tillack, A. F.","Sanner, M. F.","Koch, A.","Forli, S."] - , cit_type="Reference") - , Citation(title="AutoDockFR: Advances in Protein-Ligand Docking with Explicitly Specified Binding Site Flexibility" - , doi_url="https://doi.org/10.1371/journal.pcbi.1004586" - , journal="PLoS Computational Biology" - , contributors=["Ravindranath, P. A.","Forli, S.","Goodsell, D. S.","Olson, A. J.","Sanner, M. F."] - , cit_type="Reference") - , Citation(title="Docking flexible cyclic peptides with AutoDock CrankPep" - , doi_url="https://doi.org/10.1021/acs.jctc.9b00557" - , journal="Journal of Chemical Theory and Computation" - , contributors=["Zhang, Y.","Sanner, M. F."] - , cit_type="Reference") - , Citation(title="Fast, accurate, and reliable molecular docking with QuickVina 2" - , doi_url="https://doi.org/10.1093/bioinformatics/btv082" - , journal="Bioinformatics" - , contributors=["Alhossary, A.","Handoko, S. D.","Mu, Y.","Kwoh, C.-K."] - , cit_type="Reference") - , Citation(title="Lessons learned in empirical scoring with smina from the CSAR 2011 benchmarking exercise" - , doi_url="https://doi.org/10.1021/ci300604z" - , journal="Journal of Chemical Information and Modeling" - , contributors=["Koes, D. R.","Baumgartner, M. P.","Camacho, C. J."] - , cit_type="Reference") - , Citation(title="Vina-Carb: Improving Glycosidic Angles during Carbohydrate Docking" - , doi_url="https://doi.org/10.1021/acs.jctc.5b00834" - , journal="Journal of Chemical Theory and Computation" - , contributors=["Nivedha, A. K.","Thieker, D. F.","Makeneni, S.","Hu, H.","Woods, R. J."] - , cit_type="Reference") - , Citation(title="AutoDock VinaXB: implementation of XBSF, new empirical halogen bond scoring function, into AutoDock Vina" - , doi_url="https://doi.org/10.1186/s13321-016-0139-1" - , journal="Journal of Cheminformatics" - , contributors=["Koebel, M. R.","Schmadeke, G.","Posner, R. G.","Sirimulla, S."] - , cit_type="Reference") - , Citation(title="Vinardo: A Scoring Function Based on Autodock Vina Improves Scoring, Docking, and Virtual Screening" - , doi_url="https://doi.org/10.1371/journal.pone.0155183" - , journal="PLoS One" - , contributors=["Quiroga, R.","Villarreal, M. A."] - , cit_type="Reference") - , Citation(title="Lennard-Jones potential and dummy atom settings to overcome the AUTODOCK limitation in treating flexible ring systems" - , doi_url="https://doi.org/10.1021/ci700036j" - , journal="Journal of Chemical Information and Modeling" - , contributors=["Forli, S.","Botta, M."] - , cit_type="Reference") - , Citation(title="AutoDock4Zn: an improved AutoDock force field for small-molecule docking to zinc metalloproteins" - , doi_url="https://doi.org/10.1021/ci500209e" - , journal="Journal of Chemical Information and Modeling" - , contributors=["Santos-Martins, D.","Forli, S.","Ramos, M. J.","Olson, A. J."] - , cit_type="Reference") - , Citation(title="A force field with discrete displaceable waters and desolvation entropy for hydrated ligand docking" - , doi_url="https://doi.org/10.1021/jm2005145" - , journal="Journal of Medicinal Chemistry" - , contributors=["Forli, S.","Olson, A. J."] - , cit_type="Reference") - , Citation(title="Directional phosphorylation and nuclear transport of the splicing factor SRSF1 is regulated by an RNA recognition motif" - , doi_url="https://doi.org/10.1016/j.jmb.2016.04.009" - , journal="Journal of Molecular Biology" - , contributors=["Serrano, P.","Aubol, B. E.","Keshwani, M. M.","Forli, S.","Ma, C.-T.","Dutta, S. K.","Geralt, M.","Wüthrich, K.","Adams, J. A."] - , cit_type="Reference") - , Citation(title="Covalent docking using autodock: Two-point attractor and flexible side chain methods" - , doi_url="https://doi.org/10.1002/pro.2733" - , journal="Protein Science" - , contributors=["Bianco, G.","Forli, S.","Goodsell, D. S.","Olson, A. J."] - , cit_type="Reference") - , Citation(title="Consensus docking: improving the reliability of docking in a virtual screening context" - , doi_url="https://doi.org/10.1021/ci300399w" - , journal="Journal of Chemical Information and Modeling" - , contributors=["Houston, D. R.","Walkinshaw, M. D."] - , cit_type="Reference") - , Citation(title="DockBench: an integrated informatic platform bridging the gap between the robust validation of docking protocols and virtual screening simulations" - , doi_url="https://doi.org/10.3390/molecules20069977" - , journal="Molecules" - , contributors=["Cuzzolin, A.","Sturlese, M.","Malvacio, I.","Ciancetta, A.","Moro, S."] - , cit_type="Reference") - , Citation(title="A new force field for molecular mechanical simulation of nucleic acids and proteins" - , doi_url="https://doi.org/10.1021/ja00315a051" - , journal="Journal of the American Chemical Society" - , contributors=["Weiner, S. J.","Kollman, P. A.","Case, D. A.","Singh, U. C.","Ghio, C.","Alagona, G.","Profeta, S.","Weiner, P."] - , cit_type="Reference") - , Citation(title="AutoDock Bias: improving binding mode prediction and virtual screening using known protein-ligand interactions" - , doi_url="https://doi.org/10.1093/bioinformatics/btz152" - , journal="Bioinformatics" - , contributors=["Arcon, J. P.","Modenutti, C. P.","Avendaño, D.","Lopez, E. D.","Defelipe, L. A.","Ambrosio, F. A.","Turjanski, A. G.","Forli, S.","Marti, M. A."] - , cit_type="Reference") - , Citation(title="Inhomogeneous Fluid Approach to Solvation Thermodynamics. 1. Theory" - , doi_url="https://doi.org/10.1021/jp9723574" - , journal="Journal of Physical Chemistry B" - , contributors=["Lazaridis, T."] - , cit_type="Reference") - , Citation(title="Inhomogeneous fluid approach to solvation thermodynamics. 2. Applications to simple fluids" - , doi_url="https://doi.org/10.1021/jp972358w" - , journal="Journal of Physical Chemistry B" - , contributors=["Lazaridis, T."] - , cit_type="Reference") - , Citation(title="Grid inhomogeneous solvation theory: Hydration structure and thermodynamics of the miniature receptor cucurbit[7]uril" - , doi_url="https://doi.org/10.1063/1.4733951" - , journal="Journal of Chemical Physics" - , contributors=["Nguyen, C. N.","Young, T. K.","Gilson, M. K."] - , cit_type="Reference") - , Citation(title="AutoDock-GIST: Incorporating Thermodynamics of Active-Site Water into Scoring Function for Accurate Protein-Ligand Docking" - , doi_url="https://doi.org/10.3390/molecules21111604" - , journal="Molecules" - , contributors=["Uehara, S.","Tanaka, S."] - , cit_type="Reference") - , Citation(title="ZINC20—A Free Ultralarge-Scale Chemical Database for Ligand Discovery" - , doi_url="https://doi.org/10.1021/acs.jcim.0c00675" - , journal="Journal of Chemical Information and Modeling" - , contributors=["Irwin, J. J.","Tang, K. G.","Young, J.","Dandarchuluun, C.","Wong, B. R.","Khurelbaatar, M.","Moroz, Y. S.","Mayfield, J.","Sayle, R. A."] - , cit_type="Reference") - , Citation(title="Structural biology-inspired discovery of novel KRAS–PDEδ inhibitors" - , doi_url="https://doi.org/10.1021/acs.jmedchem.7b01243" - , journal="Journal of Medicinal Chemistry" - , contributors=["Jiang, Y.","Zhuang, C.","Chen, L.","Lu, J.","Dong, G.","Miao, Z.","Zhang, W.","Li, J.","Sheng, C."] - , cit_type="Reference") - , Citation(title="D3R grand challenge 2015: evaluation of protein–ligand pose and affinity predictions" - , doi_url="https://doi.org/10.1007/s10822-016-9946-8" - , journal="Journal of Computer-Aided Molecular Design" - , contributors=["Gathiaka, S.","Liu, S.","Chiu, M.","Yang, H.","Stuckey, J. A.","Kang, Y. N.","Delproposto, J.","Kubish, G.","Dunbar, J. B.","Carlson, H. A.","Burley, S. K.","Walters, W. P.","Amaro, R. E.","Feher, V. A.","Gilson, M. K."] - , cit_type="Reference") - , Citation(title="D3R grand challenge 4: blind prediction of protein–ligand poses, affinity rankings, and relative binding free energies" - , doi_url="https://doi.org/10.1007/s10822-020-00289-y" - , journal="Journal of Computer-Aided Molecular Design" - , contributors=["Parks, C. D.","Gaieb, Z.","Chiu, M.","Yang, H.","Shao, C.","Walters, W. P.","Jansen, J. M.","McGaughey, G.","Lewis, R. A.","Bembenek, S. D.","Ameriks, M. K.","Mirzadegan, T.","Burley, S. K.","Amaro, R. E.","Gilson, M. K."] - , cit_type="Reference") - , Citation(title="D3R Grand Challenge 4: prospective pose prediction of BACE1 ligands with AutoDock-GPU" - , doi_url="https://doi.org/10.1007/s10822-019-00241-9" - , journal="Journal of Computer-Aided Molecular Design" - , contributors=["Santos-Martins, D.","Eberhardt, J.","Bianco, G.","Solis-Vasquez, L.","Ambrosio, F. A.","Koch, A.","Forli, S."] - , cit_type="Reference") - , Citation(title="Comparison of affinity ranking using AutoDock-GPU and MM-GBSA scores for BACE-1 inhibitors in the D3R Grand Challenge 4" - , doi_url="https://doi.org/10.1007/s10822-019-00240-w" - , journal="Journal of Computer-Aided Molecular Design" - , contributors=["El Khoury, L.","Santos-Martins, D.","Sasmal, S.","Eberhardt, J.","Bianco, G.","Ambrosio, F. A.","Solis-Vasquez, L.","Koch, A.","Forli, S.","Mobley, D. L."] - , cit_type="Reference") - , Citation(title="Macrocycle modeling in ICM: benchmarking and evaluation in D3R Grand Challenge 4" - , doi_url="https://doi.org/10.1007/s10822-019-00225-9" - , journal="Journal of Computer-Aided Molecular Design" - , contributors=["Lam, P. C.-H.","Abagyan, R.","Totrov, M."] - , cit_type="Reference") - , Citation(title="Directory of useful decoys, enhanced (DUD-E): better ligands and decoys for better benchmarking" - , doi_url="https://doi.org/10.1021/jm300687e" - , journal="Journal of Medicinal Chemistry" - , contributors=["Mysinger, M. M.","Carchia, M.","Irwin, J. J.","Shoichet, B. K."] - , cit_type="Reference") - , Citation(title="Evaluation of AutoDock and AutoDock Vina on the CASF-2013 benchmark" - , doi_url="https://doi.org/10.1021/acs.jcim.8b00312" - , journal="Journal of Chemical Information and Modeling" - , contributors=["Gaillard, T."] - , cit_type="Reference") - , Citation(title="Autodock vina adopts more accurate binding poses but autodock4 forms better binding affinity" - , doi_url="https://doi.org/10.1021/acs.jcim.9b00778" - , journal="Journal of Chemical Information and Modeling" - , contributors=["Nguyen, N. T.","Nguyen, T. H.","Pham, T. N. H.","Huy, N. T.","Bay, M. V.","Pham, M. Q.","Nam, P. C.","Vu, V. V.","Ngo, S. T."] - , cit_type="Reference") - , Citation(title="Development and validation of a genetic algorithm for flexible docking" - , doi_url="https://doi.org/10.1006/jmbi.1996.0897" - , journal="Journal of Molecular Biology" - , contributors=["Jones, G.","Willett, P.","Glen, R. C.","Leach, A. R.","Taylor, R."] - , cit_type="Reference") - , Citation(title="Glide: a new approach for rapid, accurate docking and scoring. 1. Method and assessment of docking accuracy" - , doi_url="https://doi.org/10.1021/jm0306430" - , journal="Journal of Medicinal Chemistry" - , contributors=["Friesner, R. A.","Banks, J. L.","Murphy, R. B.","Halgren, T. A.","Klicic, J. J.","Mainz, D. T.","Repasky, M. P.","Knoll, E. H.","Shelley, M.","Perry, J. K."] - , cit_type="Reference") - , Citation(title="Surflex: fully automatic flexible molecular docking using a molecular similarity-based search engine" - , doi_url="https://doi.org/10.1021/jm020406h" - , journal="Journal of Medicinal Chemistry" - , contributors=["Jain, A. N."] - , cit_type="Reference") - , Citation(title="A fast flexible docking method using an incremental construction algorithm" - , doi_url="https://doi.org/10.1006/jmbi.1996.0477" - , journal="Journal of Molecular Biology" - , contributors=["Rarey, M.","Kramer, B.","Lengauer, T.","Klebe, G."] - , cit_type="Reference") - , Citation(title="EDock: blind protein–ligand docking by replica-exchange monte carlo simulation" - , doi_url="https://doi.org/10.1186/s13321-020-00440-9" - , journal="Journal of Cheminformatics" - , contributors=["Zhang, W.","Bell, E. W.","Yin, M.","Zhang, Y."] - , cit_type="Reference") - , Citation(title="DOCK 6: Impact of new features and current docking performance" - , doi_url="https://doi.org/10.1002/jcc.23905" - , journal="Journal of Computational Chemistry" - , contributors=["Allen, W. J.","Balius, T. E.","Mukherjee, S.","Brozell, S. R.","Moustakas, D. T.","Lang, P. T.","Case, D. A.","Kuntz, I. D.","Rizzo, R. C."] - , cit_type="Reference") - , Citation(title="Improving scoring-docking-screening powers of protein–ligand scoring functions using random forest" - , doi_url="https://doi.org/10.1002/jcc.24667" - , journal="Journal of Computational Chemistry" - , contributors=["Wang, C.","Zhang, Y."] - , cit_type="Reference") - , Citation(title="ID-Score: a new empirical scoring function based on a comprehensive set of descriptors related to protein–ligand interactions" - , doi_url="https://doi.org/10.1021/ci300493w" - , journal="Journal of Chemical Information and Modeling" - , contributors=["Li, G.-B.","Yang, L.-L.","Wang, W.-J.","Li, L.-L.","Yang, S.-Y."] - , cit_type="Reference") - , Citation(title="Further development and validation of empirical scoring functions for structure-based binding affinity prediction" - , doi_url="https://doi.org/10.1023/a:1016357811882" - , journal="Journal of Computer-Aided Molecular Design" - , contributors=["Wang, R.","Lai, L.","Wang, S."] - , cit_type="Reference") - , Citation(title="A knowledge-based energy function for protein- ligand, protein- protein, and protein- DNA complexes" - , doi_url="https://doi.org/10.1021/jm049314d" - , journal="Journal of Medicinal Chemistry" - , contributors=["Zhang, C.","Liu, S.","Zhu, Q.","Zhou, Y."] - , cit_type="Reference") - , Citation(title="DLIGAND2: an improved knowledge-based energy function for protein–ligand interactions using the distance-scaled, finite, ideal-gas reference state" - , doi_url="https://doi.org/10.1186/s13321-019-0373-4" - , journal="Journal of Cheminformatics" - , contributors=["Chen, P.","Ke, Y.","Lu, Y.","Du, Y.","Li, J.","Yan, H.","Zhao, H.","Zhou, Y.","Yang, Y."] - , cit_type="Reference") - , Citation(title="Comparing AutoDock and Vina in ligand/decoy discrimination for virtual screening" - , doi_url="https://doi.org/10.3390/app9214538" - , journal="Applied Science" - , contributors=["Vieira, T. F.","Sousa, S. F."] - , cit_type="Reference") - , Citation(title="Benchmark of four popular virtual screening programs: construction of the active/decoy dataset remains a major determinant of measured performance" - , doi_url="https://doi.org/10.1186/s13321-016-0167-x" - , journal="Journal of Cheminformatics" - , contributors=["Chaput, L.","Martinez-Sanz, J.","Quiniou, E.","Rigolet, P.","Saettel, N.","Mouawad, L."] - , cit_type="Reference") - , Citation(title="Array programming with NumPy" - , doi_url="https://doi.org/10.1038/s41586-020-2649-2" - , journal="Nature" - , contributors=["Harris, C. R."] - , cit_type="Reference") - , Citation(title="Matplotlib: A 2D graphics environment" - , doi_url="https://doi.org/10.1109/mcse.2007.55" - , journal="Computing in Science & Engineering" - , contributors=["Hunter, J. D."] - , cit_type="Reference") - ], citations = [ - Citation(doi_url = "https://doi.org/10.1021/acsomega.1c04320" - , title ="Novel Anti-Hepatitis B Virus Activity of Euphorbia schimperi and Its Quercetin and Kaempferol Derivatives" - , journal="ACS Omega" - , contributors=["Mohammad K. Parvez","Sarfaraz Ahmed","Mohammed S. Al-Dosari","Mazin A. S. Abdelwahid","Ahmed H. Arbab","Adnan J. Al-Rehaily","Mai M. Al-Oqail"],cit_type="Citation"), - - ] - ) - } \ No newline at end of file diff --git a/input/test/test_input.py b/input/test/test_input.py deleted file mode 100755 index b2ca55f..0000000 --- a/input/test/test_input.py +++ /dev/null @@ -1,82 +0,0 @@ -import unittest -from input.get.journal_fetcher import JournalFetcher -from input.interface import InputInterface -from input.publication import Publication - -""" -Testing the Publication fetcher - -Publication 1: 'https://doi.org/10.1021/acs.jcim.1c00203' -Publication 2: 'doi.org/10.1021/acs.jcim.1c00917' -Publication 3: '10.1038/nchem.1781' -Publication 4: '11.12/jaj' -Publication 5: '11.12/' -Publication 6: 'https://doi.org/10.1021/acs.jmedchem.0c01332' # Paper is a PDF -""" -# TODO: Testcases for: -# - Specific Journals: Inherit from FetcherTestCase -# - interface module-importer (test case) -# - Error detection -# - wrong/no Journal_fetchers -# - wrong urls -# - correct Types in publication -# - Edgecases (i.e. paper as pdf, no connection, etc) - - -class InterfaceTestCase(unittest.TestCase): - def setUp(self): - self.assertEqual(InputInterface.instance, None) - self.interface = InputInterface() - - def test_singleton(self): - # interface should already be made in setUp() - self.assertNotEqual(self.interface.instance, None) - new_interface = InputInterface() - self.assertEqual(self.interface, new_interface) - - # def test_imported_modules(self): - # fetchers = self.interface.get_supported_fetchers - -class FetcherTestCase(unittest.TestCase): - - - def can_use_url_test(self, fetcher : JournalFetcher, test_url: str, expected_res: bool): - # Tests the 'can_use_url'-method - self.assertEqual(fetcher.can_use_url(test_url), expected_res) - - - def get_publication_test(self, fetcher : JournalFetcher, test_url: str, expected_res: Publication): - """ - this test asserts that every variable is equals to the expected result - """ - actual_res = fetcher.get_publication(test_url) - self.assertEqual(actual_res.doi_url, expected_res.doi_url) - self.assertEqual(actual_res.title, expected_res.title) - self.assertEqual(actual_res.contributors, expected_res.contributors) - self.assertEqual(actual_res.journal, expected_res.journal) - self.assertEqual(actual_res.publication_date, expected_res.publication_date) - self.assertEqual(actual_res.subjects, expected_res.subjects) - - # Checking for all references - self.assertEqual(len(actual_res.references), len(expected_res.references)) - num_references = len(expected_res.references) - for i in range(num_references): - self.assertEqual(actual_res.references[i].doi_url, expected_res.references[i].doi_url) - self.assertEqual(actual_res.references[i].journal, expected_res.references[i].journal) - self.assertEqual(actual_res.references[i].contributors, expected_res.references[i].contributors) - self.assertEqual(actual_res.references[i].cit_type, expected_res.references[i].cit_type) - - # Checking for all citations - self.assertEqual(len(actual_res.citations), len(expected_res.citations)) - num_citations = len(expected_res.citations) - for i in range(num_citations): - self.assertEqual(actual_res.citations[i].doi_url, expected_res.citations[i].doi_url) - self.assertEqual(actual_res.citations[i].journal, expected_res.citations[i].journal) - self.assertEqual(actual_res.citations[i].contributors, expected_res.citations[i].contributors) - self.assertEqual(actual_res.citations[i].cit_type, expected_res.citations[i].cit_type) - - - def get_publication_exception_test(self, fetcher: JournalFetcher, test_url: str): - # Ckecks - with self.assertRaises(ValueError): - fetcher.get_publication(test_url) \ No newline at end of file diff --git a/input_old/README.md b/input_old/README.md deleted file mode 100644 index 76bd11d..0000000 --- a/input_old/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Projekt CiS-Projekt 2021/22 -Input-Skripts - diff --git a/input_old/__pycache__/input_fj.cpython-39.pyc b/input_old/__pycache__/input_fj.cpython-39.pyc deleted file mode 100644 index a3e6099f4ab4c56400b2698c812d4b5fc9a9a7aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4300 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 diff --git a/input_old/example_urls b/input_old/example_urls deleted file mode 100644 index 96ac680..0000000 --- a/input_old/example_urls +++ /dev/null @@ -1,2 +0,0 @@ -https://pubs.acs.org/doi/10.1021/acs.jcim.5b00332 -https://pubs.acs.org/doi/10.1021/acs.jcim.6b00709 diff --git a/input_old/input_fj.py b/input_old/input_fj.py deleted file mode 100644 index ecc8e68..0000000 --- a/input_old/input_fj.py +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/env python3 -""" -Functions for information retrieval of articles from the ACS journal JCIM - -""" - -__author__ = "Florian Jochens" -__email__ = "fj@andaco.de" -__status__ = "Production" -#__copyright__ = "" -#__credits__ = ["", "", "", ""] -#__license__ = "" -#__version__ = "" -#__maintainer__ = "" - -from bs4 import BeautifulSoup as bs -import requests as req -import sys -from pathlib import Path - -class Publication: - #_registry = [] - _citations = [] - _references = [] - - def __init__(self, title, publication_date, contributors, doi_url, - subjects = None, num_citations = None): - #self._registry.append(self) - self.title = title - self.publication_date = publication_date - self.contributors = contributors - self.doi_url = doi_url - self.subjects = subjects - self.num_citations = num_citations - #self._citations = [] - #self._references = [] - -class Citation: - def __init__(self, title, journal, contributors, doi_url): - self.title = title - self.journal = journal - self.contributors = contributors - self.doi_url = doi_url - -class References: - def __init__(self, title, journal, contributors, doi_url): - self.title = title - self.journal = journal - self.contributors = contributors - self.doi_url = doi_url - -def get_article_info(soup): - header = soup.find('div', class_ = 'article_header-left pull-left') - article_title = header.find('span', class_ = 'hlFld-Title').text - publication_date = header.find('span', class_ = 'pub-date-value').text - for link in header.find('div', class_ = 'article_header-doiurl'): - doi_url = link.get('href') - subs = header.find('div', class_ = 'article_header-taxonomy') - subjects = [] - for sub in subs.find_all('a'): - subjects.append(sub.get('title')) - cons = header.find('ul', class_ = 'loa') - contributors = [] - for con in cons.find_all('span', class_ = 'hlFld-ContribAuthor'): - contributors.append(con.text) - numc = header.find('div', class_ = 'articleMetrics_count') - if not numc.a: - num_citations = 0 - else: - num_citations = numc.a.text - - pub = Publication(article_title, publication_date, contributors, doi_url, - subjects, num_citations) - return pub - -def get_download_url(): - export = soup.find('div', class_ = 'cit-download-dropdown_content') - url = 'https://pubs.acs.org' - for link in export.find_all('a'): - if link.get('title') == 'Citation and references': - url += link.get('href') - print(url) - return url - -def download(url): # Download citation and references file - if url.find('='): - filename = url.rsplit('=', 1)[1] - path = Path(('./files/' + filename)) - if path.is_file(): - print("File already exists") - else: - print("File does not exist") - -def get_citation_info(pub, num_citations, soup): - pub._citations = [] - details = soup.find('ol', class_ = 'cited-content_cbyCitation') - titles = [] - for title in details.find_all('span', - class_ = 'cited-content_cbyCitation_article-title'): - titles.append(title.text.replace('.', '')) - journal_names = [] - for name in details.find_all('span', - class_ = 'cited-content_cbyCitation_journal-name'): - journal_names.append(name.text) - doi_urls = [] - for url in details.find_all('a'): - doi_urls.append(url.get('href')) - contributors = [] - for contrib in details.find_all('span', - class_ = 'cited-content_cbyCitation_article-contributors'): - contributors.append(contrib.text) - for i in range(0, int(num_citations)): - pub._citations.append(Citation(titles[i], journal_names[i], - contributors[i], doi_urls[i])) -def print_pub_info(pub): - print(f'''Article title: {pub.title} -Publication date: {pub.publication_date} -DOI-URL: {pub.doi_url} - -Subjects:''') - print(*(pub.subjects), sep = ", ") - print('\nContributors:') - print(*(pub.contributors), sep = ", ") - - if int(pub.num_citations) > 0: - if int(pub.num_citations) == 1: - print(f'\nThis publication is cited by the following publication:\n') - else: - print(f'\nThis publication is cited by the following {pub.num_citations} publications:\n') - for citation in pub._citations: - print(f''' - Title: {citation.title} - Journal: {citation.journal} - Contributors: {citation.contributors} - DOI-URL: {citation.doi_url} - ''') - else: - print('\nThis publication is not cited by any other publication.') - -def input(url): - html_text = req.get(url).text - soup = bs(html_text, 'html.parser') - - pub = get_article_info(soup) - if int(pub.num_citations) > 0: - get_citation_info(pub, int(pub.num_citations), soup) - return pub - -#if len(sys.argv) != 2: -# sys.stderr.write('Usage: {} <url>\n'.format(sys.argv[0])) -# exit(1) -#url = sys.argv[1] -#pub = input(url) -#print_pub_info(pub) diff --git a/input_old/pub.py b/input_old/pub.py deleted file mode 100644 index 13b90e8..0000000 --- a/input_old/pub.py +++ /dev/null @@ -1,32 +0,0 @@ -class Publication: - #_registry = [] - #_citations = [] - #_references = [] - - def __init__(self, title, publication_date, contributors, doi_url, - subjects, num_citations): - #self._registry.append(self) - self.title = title - self.publication_date = publication_date - self.contributors = contributors - self.doi_url = doi_url - self.subjects = subjects - self.num_citations = num_citations - self.num_references = num_references - self._citations = [] - self._references = [] - -class Citation: - def __init__(self, title, journal, contributors, doi_url): - self.title = title - self.journal = journal - self.contributors = contributors - self.doi_url = doi_url - -class References: - def __init__(self, title, journal, contributors, doi_url): - self.title = title - self.journal = journal - self.contributors = contributors - self.doi_url = doi_url - diff --git a/input_old/test.py b/input_old/test.py deleted file mode 100755 index dc623ca..0000000 --- a/input_old/test.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python3 - -from input_fj import input, print_pub_info -import sys - -if len(sys.argv) != 3: - sys.stderr.write('Usage: {} <url> <url>\n'.format(sys.argv[0])) - exit(1) -url = sys.argv[1] -url2 = sys.argv[2] -pub = input(url) -print_pub_info(pub) -pub2 = input(url2) -print_pub_info(pub2) - diff --git a/input_old/x b/input_old/x deleted file mode 100644 index c8ade9d..0000000 --- a/input_old/x +++ /dev/null @@ -1,234 +0,0 @@ -Article title: Feasibility of Active Machine Learning for Multiclass Compound Classification -Publication date: January 7, 2016 -DOI-URL: https://doi.org/10.1021/acs.jcim.5b00332 - -Subjects: -Algorithms, Molecules, Drug discovery, Screening assays, Receptors - -Contributors: -Tobias Lang, Florian Flachsenberg, Ulrike von Luxburg, Matthias Rarey - -This publication is cited by the following 30 publications: - - - Title: Concepts of Artificial Intelligence for Computer-Assisted Drug Discovery - Journal: Chemical Reviews - Contributors: Xin Yang, Yifei Wang, Ryan Byrne, Gisbert Schneider, Shengyong Yang. - DOI-URL: https://doi.org/10.1021/acs.chemrev.8b00728 - - - Title: De Novo Molecule Design by Translating from Reduced Graphs to SMILES - Journal: Journal of Chemical Information and Modeling - Contributors: Peter Pogány, Navot Arad, Sam Genway, Stephen D. Pickett. - DOI-URL: https://doi.org/10.1021/acs.jcim.8b00626 - - - Title: Designing Algorithms To Aid Discovery by Chemical Robots - Journal: ACS Central Science - Contributors: Alon B. Henson, Piotr S. Gromski, Leroy Cronin. - DOI-URL: https://doi.org/10.1021/acscentsci.8b00176 - - - Title: Modeling Kinase Inhibition Using Highly Confident Data Sets - Journal: Journal of Chemical Information and Modeling - Contributors: Sorin Avram, Alina Bora, Liliana Halip, Ramona Curpăn. - DOI-URL: https://doi.org/10.1021/acs.jcim.7b00729 - - - Title: Predictive Models for Fast and Effective Profiling of Kinase Inhibitors - Journal: Journal of Chemical Information and Modeling - Contributors: Alina Bora, Sorin Avram, Ionel Ciucanu, Marius Raica, and Stefana Avram . - DOI-URL: https://doi.org/10.1021/acs.jcim.5b00646 - - - Title: Evaluation of categorical matrix completion algorithms: toward improved active learning for drug discovery - Journal: Bioinformatics - Contributors: Huangqingbo Sun, Robert F Murphy, . - DOI-URL: https://doi.org/10.1093/bioinformatics/btab322 - - - Title: An Artificial Intelligence Approach Based on Hybrid CNN-XGB Model to Achieve High Prediction Accuracy through Feature Extraction, Classification and Regression for Enhancing Drug Discovery in Biomedicine - Journal: International Journal of Biology and Biomedical Engineering - Contributors: Mukesh Madanan, Biju T. Sayed, Nurul Akhmal Mohd Zulkefli, Nitha C. Velayudhan. - DOI-URL: https://doi.org/10.46300/91011.2021.15.22 - - - Title: Artificial Intelligence in Medicinal Chemistry - Journal: - Contributors: Edward Griffen, Alexander Dossetter, Andrew Leach, Shane Montague. - DOI-URL: https://doi.org/10.1002/0471266949.bmc267 - - - Title: Practical Chemogenomic Modeling and Molecule Discovery Strategies Unveiled by Active Learning - Journal: - Contributors: J.B. Brown. - DOI-URL: https://doi.org/10.1016/B978-0-12-801238-3.11533-8 - - - Title: Machine learning phases and criticalities without using real data for training - Journal: Physical Review B - Contributors: D.-R. Tan, F.-J. Jiang. - DOI-URL: https://doi.org/10.1103/PhysRevB.102.224434 - - - Title: Active learning effectively identifies a minimal set of maximally informative and asymptotically performant cytotoxic structure–activity patterns in NCI-60 cell lines - Journal: RSC Medicinal Chemistry - Contributors: Takumi Nakano, Shunichi Takeda, J.B. Brown. - DOI-URL: https://doi.org/10.1039/D0MD00110D - - - Title: Active learning efficiently converges on rational limits of toxicity prediction and identifies patterns for molecule design - Journal: Computational Toxicology - Contributors: Ahsan Habib Polash, Takumi Nakano, Christin Rakers, Shunichi Takeda, J.B. Brown. - DOI-URL: https://doi.org/10.1016/j.comtox.2020.100129 - - - Title: Practical considerations for active machine learning in drug discovery - Journal: Drug Discovery Today: Technologies - Contributors: Daniel Reker. - DOI-URL: https://doi.org/10.1016/j.ddtec.2020.06.001 - - - Title: Designing compact training sets for data-driven molecular property prediction through optimal exploitation and exploration - Journal: Molecular Systems Design & Engineering - Contributors: Bowen Li, Srinivas Rangarajan. - DOI-URL: https://doi.org/10.1039/C9ME00078J - - - Title: Applicability Domain of Active Learning in Chemical Probe Identification: Convergence in Learning from Non-Specific Compounds and Decision Rule Clarification - Journal: Molecules - Contributors: Ahsan Habib Polash, Takumi Nakano, Shunichi Takeda, J.B. Brown. - DOI-URL: https://doi.org/10.3390/molecules24152716 - - - Title: Capturing and applying knowledge to guide compound optimisation - Journal: Drug Discovery Today - Contributors: Matthew Segall, Tamsin Mansley, Peter Hunt, Edmund Champness. - DOI-URL: https://doi.org/10.1016/j.drudis.2019.02.004 - - - Title: A novel graph kernel on chemical compound classification - Journal: Journal of Bioinformatics and Computational Biology - Contributors: Qiangrong Jiang, Jiajia Ma. - DOI-URL: https://doi.org/10.1142/S0219720018500269 - - - Title: Accelerating Drug Discovery Using Convolution Neural Network Based Active Learning - Journal: - Contributors: Pengfei Liu, Kwong-Sak Leung. - DOI-URL: https://doi.org/10.1109/TENCON.2018.8650298 - - - Title: An Adaptive Lightweight Security Framework Suited for IoT - Journal: - Contributors: Menachem Domb. - DOI-URL: https://doi.org/10.5772/intechopen.73712 - - - Title: Adaptive mining and model building of medicinal chemistry data with a multi-metric perspective - Journal: Future Medicinal Chemistry - Contributors: JB Brown. - DOI-URL: https://doi.org/10.4155/fmc-2018-0188 - - - Title: Chemogenomic Active Learning's Domain of Applicability on Small, Sparse qHTS Matrices: A Study Using Cytochrome P450 and Nuclear Hormone Receptor Families - Journal: ChemMedChem - Contributors: Christin Rakers, Rifat Ara Najnin, Ahsan Habib Polash, Shunichi Takeda, J.B. Brown. - DOI-URL: https://doi.org/10.1002/cmdc.201700677 - - - Title: Automating drug discovery - Journal: Nature Reviews Drug Discovery - Contributors: Gisbert Schneider. - DOI-URL: https://doi.org/10.1038/nrd.2017.232 - - - Title: Classifiers and their Metrics Quantified - Journal: Molecular Informatics - Contributors: J. B. Brown. - DOI-URL: https://doi.org/10.1002/minf.201700127 - - - Title: Active Search for Computer-aided Drug Design - Journal: Molecular Informatics - Contributors: Dino Oglic, Steven A. Oatley, Simon J. F. Macdonald, Thomas Mcinally, Roman Garnett, Jonathan D. Hirst, Thomas Gärtner. - DOI-URL: https://doi.org/10.1002/minf.201700130 - - - Title: Selection of Informative Examples in Chemogenomic Datasets - Journal: - Contributors: Daniel Reker, J. B. Brown. - DOI-URL: https://doi.org/10.1007/978-1-4939-8639-2_13 - - - Title: The value of prior knowledge in machine learning of complex network systems - Journal: Bioinformatics - Contributors: Dana Ferranti, David Krane, David Craft, . - DOI-URL: https://doi.org/10.1093/bioinformatics/btx438 - - - Title: Lightweight adaptive Random-Forest for IoT rule generation and execution - Journal: Journal of Information Security and Applications - Contributors: Menachem Domb, Elisheva Bonchek-Dokow, Guy Leshem. - DOI-URL: https://doi.org/10.1016/j.jisa.2017.03.001 - - - Title: Active learning for computational chemogenomics - Journal: Future Medicinal Chemistry - Contributors: Daniel Reker, Petra Schneider, Gisbert Schneider, JB Brown. - DOI-URL: https://doi.org/10.4155/fmc-2016-0197 - - - Title: Small Random Forest Models for Effective Chemogenomic Active Learning - Journal: Journal of Computer Aided Chemistry - Contributors: Christin Rakers, Daniel Reker, J.B. Brown. - DOI-URL: https://doi.org/10.2751/jcac.18.124 - - - Title: Large-Scale Off-Target Identification Using Fast and Accurate Dual Regularized One-Class Collaborative Filtering and Its Application to Drug Repurposing - Journal: PLOS Computational Biology - Contributors: Hansaim Lim, Aleksandar Poleksic, Yuan Yao, Hanghang Tong, Di He, Luke Zhuang, Patrick Meng, Lei Xie, . - DOI-URL: https://doi.org/10.1371/journal.pcbi.1005135 - -Article title: Matched Molecular Series: Measuring SAR Similarity -Publication date: May 1, 2017 -DOI-URL: https://doi.org/10.1021/acs.jcim.6b00709 - -Subjects: -Substituents, Mathematical methods, Structure activity relationship, Biological databases - -Contributors: -Emanuel S. R. Ehmki, Christian Kramer - -This publication is cited by the following 5 publications: - - - Title: Matched Molecular Series Analysis for ADME Property Prediction - Journal: Journal of Chemical Information and Modeling - Contributors: Mahendra Awale, Sereina Riniker, Christian Kramer. - DOI-URL: https://doi.org/10.1021/acs.jcim.0c00269 - - - Title: Approaches using AI in medicinal chemistry - Journal: - Contributors: Christian Tyrchan, Eva Nittinger, Dea Gogishvili, Atanas Patronov, Thierry Kogej. - DOI-URL: https://doi.org/10.1016/B978-0-12-822249-2.00002-5 - - - Title: Bioactivity Prediction Based on Matched Molecular Pair and Matched Molecular Series Methods - Journal: Current Pharmaceutical Design - Contributors: Xiaoyu Ding, Chen Cui, Dingyan Wang, Jihui Zhao, Mingyue Zheng, Xiaomin Luo, Hualiang Jiang, Kaixian Chen. - DOI-URL: https://doi.org/10.2174/1381612826666200427111309 - - - Title: BRADSHAW: a system for automated molecular design - Journal: Journal of Computer-Aided Molecular Design - Contributors: Darren V. S. Green, Stephen Pickett, Chris Luscombe, Stefan Senger, David Marcus, Jamel Meslamani, David Brett, Adam Powell, Jonathan Masson. - DOI-URL: https://doi.org/10.1007/s10822-019-00234-8 - - - Title: The use of matched molecular series networks for cross target structure activity relationship translation and potency prediction - Journal: MedChemComm - Contributors: Christopher E. Keefer, George Chang. - DOI-URL: https://doi.org/10.1039/C7MD00465F - diff --git a/verarbeitung/Processing.py b/verarbeitung/Processing.py deleted file mode 100644 index 0dcc739..0000000 --- a/verarbeitung/Processing.py +++ /dev/null @@ -1,247 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Functions to generate a graph representing citations between multiple ACS/Nature journals - -""" - -__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski" -__email__ = "cis-project2021@zbh.uni-hamburg.de" -__status__ = "Production" -#__copyright__ = "" -#__credits__ = ["", "", "", ""] -#__license__ = "" -#__version__ = "" -#__maintainer__ = "" - -from bs4 import BeautifulSoup as bs -import requests as req -import sys -from pathlib import Path -from input_fj import input -from input_test import input_test_func -from json_demo import output_to_json - -# adds every publication from input list to graph structure -# doi_input_list: list of publication dois from user -def initialize_nodes_list(doi_input_list, search_depth_max, search_height_max, test_var): - references_pub_obj_list = [] - citations_pub_obj_list = [] - - for pub_doi in doi_input_list: - - #checks if its a test and chooses input function accordingly - if(test_var): - pub = input_test_func(pub_doi) - else: - pub = input(pub_doi) - - # checks if publication already exists in nodes - not_in_nodes = True - for node in nodes: # checks if a pub is already in nodes - if (pub.doi_url == node.doi_url): - not_in_nodes = False - break - if (not_in_nodes): - nodes.append(pub) - pub.group = "input" - else: - doi_input_list.remove(pub_doi) - - # inserts references as publication objects into list and - # inserts first depth references into nodes/edges if maximum search depth > 0 - for reference in create_graph_structure_references(pub, 0, search_depth_max, test_var): - references_pub_obj_list.append(reference) - - # inserts citations as publication objects into list and - # inserts first height citations into nodes if maximum search height > 0 - for citation in create_graph_structure_citations(pub, 0, search_height_max, test_var): - citations_pub_obj_list.append(citation) - - return(references_pub_obj_list, citations_pub_obj_list) - - -# adds edges between citation and reference group -def complete_inner_edges(test_var): - for node in nodes: - if (node.group == "depth"): - for citation in node.citations: - for cit in nodes: - if (citation.doi_url == cit.doi_url and [citation.doi_url, node.doi_url] not in edges): - edges.append([citation.doi_url, node.doi_url]) - if (node.group == "height"): - for reference in node.references: - for ref in nodes: - if (reference.doi_url == ref.doi_url and [node.doi_url, reference.doi_url] not in edges): - edges.append([node.doi_url,reference.doi_url]) - - - -# adds a node for every publication unknown -# adds edges for references between publications -def create_graph_structure_references(pub, search_depth, search_depth_max, test_var): - references_pub_obj_list = [] - for reference in pub.references: - not_in_nodes = True - for node in nodes: - # checks every reference for duplication - if (reference.doi_url == node.doi_url): - not_in_nodes = False - break - if (not_in_nodes): - if (search_depth < search_depth_max): - - #checks if its a test and chooses input function accordingly - if (test_var): - reference_pub_obj = input_test_func(reference.doi_url) - else: - reference_pub_obj = input(reference.doi_url) - - reference_pub_obj.group = "depth" - nodes.append(reference_pub_obj) - edges.append([pub.doi_url,reference_pub_obj.doi_url]) - references_pub_obj_list.append(reference_pub_obj) - - # adds edge only if citation already exists - elif [pub.doi_url,reference.doi_url] not in edges: - edges.append([pub.doi_url,reference.doi_url]) - return references_pub_obj_list - - -# recursive function to implement height-first-search on references -# references_pub_obj_list: input list of references as publication objects -# search_depth: current search_depth of height-first-search -# search_depth_max: maximal search_depth for dfs -def process_references_rec(references_pub_obj_list, search_depth, search_depth_max, test_var): - # adds next level to nodes/edges - for pub in references_pub_obj_list: - new_reference_pub_obj_list = create_graph_structure_references(pub, search_depth, search_depth_max, test_var) - - # If the maximum height has not yet been reached, calls function recursivly with increased height - if (search_depth < search_depth_max): - process_references_rec(new_reference_pub_obj_list, search_depth+1, search_depth_max, test_var) - - - - -# adds a node for every publication unknown -# adds edges for citations between publications -def create_graph_structure_citations(pub, search_height, search_height_max, test_var): - citations_pub_obj_list = [] - for citation in pub.citations: - not_in_nodes = True - for node in nodes: - # checks every citation for duplication - if (citation.doi_url == node.doi_url): - not_in_nodes = False - break - if (not_in_nodes): - if (search_height < search_height_max): - - #checks if its a test and chooses input function accordingly - if (test_var): - citation_pub_obj = input_test_func(citation.doi_url) - else: - citation_pub_obj = input(citation.doi_url) - - citation_pub_obj.group = "height" - nodes.append(citation_pub_obj) - edges.append([citation_pub_obj.doi_url,pub.doi_url]) - citations_pub_obj_list.append(citation_pub_obj) - - # adds only edge if citation already exists - elif [citation.doi_url,pub.doi_url] not in edges: - edges.append([citation.doi_url,pub.doi_url]) - return citations_pub_obj_list - - - -# recursive function to implement height-first-search on citations -# citations_pub_obj_list: input list of citations as publication objects -# search_height: current search_height of height-first-search -# search_height_max: maximal search_height for dfs -def process_citations_rec(citations_pub_obj_list, search_height, search_height_max, test_var): - # adds next level to nodes/edges - for pub in citations_pub_obj_list: - new_citation_pub_obj_list = create_graph_structure_citations(pub, search_height, search_height_max, test_var) - - # If the maximum height has not yet been reached, calls function recursivly with increased height - if (search_height < search_height_max): - process_citations_rec(new_citation_pub_obj_list, search_height+1, search_height_max, test_var) - - - - -# main function to call. Needs as input: -# doi_input_list: input list of dois -# search_height: max search height to process to -# search_depth: max search depth to process to -# test_var: only needed for unit test as True, default is False -def process_main(doi_input_list, search_height, search_depth, test_var = False): - # ERROR-Handling doi_array = NULL - if (len(doi_input_list) == 0): - print("Error, no input data") - - # ERROR- if a negative number is entered for height - if (search_height < 0): - print("Error, search_height of search must be positive") - - # ERROR- if a negative number is entered for depth - if (search_depth < 0): - print("Error, search_depth of search must be positive") - - # create empty array for the nodes - # create empty array for the edges - global nodes, edges - nodes = [] - edges = [] - - # initializes nodes/edges from input and gets a list with publication objects for citations and references returned - references_obj_list, citations_obj_list = initialize_nodes_list(doi_input_list,search_depth, search_height, test_var) - - # function calls to begin recursive processing up to max depth/height - process_citations_rec(citations_obj_list, 1, search_height, test_var) - process_references_rec(references_obj_list, 1, search_depth, test_var) - - # adds edges between reference group and citation group of known publications - complete_inner_edges(test_var) - - # calls a skript to save nodes and edges of graph in .json file - output_to_json(nodes,edges) - - # only for unit tests - if (test_var == True): - doi_nodes_list = [] - for node in nodes: - doi_nodes_list.append(node.doi_url) - return(doi_nodes_list, edges) - - - - -# a function to print nodes and edges from a graph -def print_graph(nodes, edges): - print("Knoten:\n") - for node in nodes: - print(node.title, "\n") - print("\nKanten:\n") - for edge in edges: - print(edge,"\n") - - -# program test, because there is no connection to UI yet. -def try_known_publications(): - doi_list = [] - doi_list.append('https://pubs.acs.org/doi/10.1021/acs.jcim.9b00249') - #arr.append('https://pubs.acs.org/doi/10.1021/acs.jcim.9b00249') - doi_list.append('https://doi.org/10.1021/acs.jmedchem.0c01332') - #arr.append('https://doi.org/10.1021/acs.jcim.0c00741') - - #arr.append('https://doi.org/10.1021/ci700007b') - #arr.append('https://doi.org/10.1021/acs.jcim.5b00292') - #url = sys.argv[1] - #arr.append[url] - - - nodes,edges = process_main(doi_list,2,2) - - print_graph(nodes, edges) \ No newline at end of file diff --git a/verarbeitung/Processing_unittest.py b/verarbeitung/Processing_unittest.py deleted file mode 100644 index 772d572..0000000 --- a/verarbeitung/Processing_unittest.py +++ /dev/null @@ -1,66 +0,0 @@ -import unittest -from Processing import process_main - -class ProcessingTest(unittest.TestCase): - def testCycle(self): - nodes, edges = process_main(['doiz1'],1,1,True) - self.assertCountEqual(nodes, ['doiz1', 'doiz2']) - self.assertCountEqual(edges, [['doiz1', 'doiz2'], ['doiz2', 'doiz1']]) - - nodes, edges = process_main(['doiz1'],2,2,True) - self.assertCountEqual(nodes, ['doiz1', 'doiz2']) - self.assertCountEqual(edges, [['doiz2', 'doiz1'], ['doiz1', 'doiz2']]) - - #def testBigCycle(self): - - #def testEmptyHeight(self): - - #def testEmptyDepth(self): - - def testEmptyDepthHeight(self): - nodes, edges = process_main(['doi1'],0,0,True) - self.assertCountEqual(nodes,['doi1']) - self.assertCountEqual(edges, []) - - nodes, edges = process_main(['doi1', 'doi2'],0,0,True) - self.assertCountEqual(nodes, ['doi1','doi2']) - self.assertCountEqual(edges, [['doi1', 'doi2']]) - - nodes, edges = process_main(['doi1', 'doi2', 'doi3'],0,0,True) - self.assertCountEqual(nodes, ['doi1','doi2', 'doi3']) - self.assertCountEqual(edges, [['doi3', 'doi1'], ['doi1', 'doi2']]) - - - def testInnerEdges(self): - nodes, edges = process_main(['doi_ie1'],1,1,True) - self.assertCountEqual(nodes,['doi_ie1','doi_ie2','doi_ie3']) - self.assertCountEqual(edges,[['doi_ie1','doi_ie2'],['doi_ie3','doi_ie1'],['doi_ie3','doi_ie2']]) - - def testRightHeight(self): - nodes, edges = process_main(['doi_h01'],1,0,True) - self.assertCountEqual(nodes,['doi_h01']) - self.assertCountEqual(edges, []) - - nodes, edges = process_main(['doi_h02'],1,0,True) - self.assertCountEqual(nodes,['doi_h02','doi_h1']) - self.assertCountEqual(edges, [['doi_h1','doi_h02']]) - - nodes, edges = process_main(['doi_h02'],2,0,True) - self.assertCountEqual(nodes,['doi_h02','doi_h1','doi_h2']) - self.assertCountEqual(edges, [['doi_h1','doi_h02'], ['doi_h2','doi_h1']]) - - def testRightDepth(self): - nodes, edges = process_main(['doi_d01'],0,1,True) - self.assertCountEqual(nodes,['doi_d01']) - self.assertCountEqual(edges, []) - - nodes, edges = process_main(['doi_d02'],0,1,True) - self.assertCountEqual(nodes,['doi_d02','doi_d1']) - self.assertCountEqual(edges, [['doi_d02','doi_d1']]) - - nodes, edges = process_main(['doi_d02'],0,2,True) - self.assertCountEqual(nodes,['doi_d02','doi_d1','doi_d2']) - self.assertCountEqual(edges, [['doi_d02','doi_d1'], ['doi_d1','doi_d2']]) - -if __name__ == "__main__": - unittest.main() \ No newline at end of file diff --git a/verarbeitung/__pycache__/Processing.cpython-36.pyc b/verarbeitung/__pycache__/Processing.cpython-36.pyc deleted file mode 100644 index eb6d8a0418a1340b746f2f664997515622356d8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3693 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 diff --git a/verarbeitung/__pycache__/Processing.cpython-38.pyc b/verarbeitung/__pycache__/Processing.cpython-38.pyc deleted file mode 100644 index 63ac529316c848e829cd83ef44ec749e5903bf9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4009 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 diff --git a/verarbeitung/__pycache__/Processing.cpython-39.pyc b/verarbeitung/__pycache__/Processing.cpython-39.pyc deleted file mode 100644 index 54c63251bbf3affbdd176d3d55f4956c2fc08406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4045 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 DM|^?B diff --git a/verarbeitung/__pycache__/Processing_pub_objs_only.cpython-39.pyc b/verarbeitung/__pycache__/Processing_pub_objs_only.cpython-39.pyc deleted file mode 100644 index 9ce1023e6ea54e1b04b37ad5a1fd08115d5f52a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4137 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 C633hX diff --git a/verarbeitung/__pycache__/input_fj.cpython-36.pyc b/verarbeitung/__pycache__/input_fj.cpython-36.pyc deleted file mode 100644 index 04312c91f0a7675651e99a2a6c10a2c9da146758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4299 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 diff --git a/verarbeitung/__pycache__/input_fj.cpython-38.pyc b/verarbeitung/__pycache__/input_fj.cpython-38.pyc deleted file mode 100644 index 515ab99c01a5ce78bb5bb6de554a4dae3ffe4b4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4329 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 LCkH2oD2F5f?ZOc2 diff --git a/verarbeitung/__pycache__/input_fj.cpython-39.pyc b/verarbeitung/__pycache__/input_fj.cpython-39.pyc deleted file mode 100644 index 175f9ebbfdf5f3313196b4f10aa01dc2e8e20509..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4337 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 MI5;^tIYc=m0eu}6EC2ui diff --git a/verarbeitung/__pycache__/input_test.cpython-36.pyc b/verarbeitung/__pycache__/input_test.cpython-36.pyc deleted file mode 100644 index 85878d6d127d9d2bd5efe9130672d982bb70c5fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2579 zcmXr!<>mV9xF~TSCj-M{1|-12z`)?Zz`#&^je&u|ogsxGg|USpg|V3_3dCbdVQyha zVQyxMVsvLnVM$?aVMt+ZW{P4;VM}3eVTfW*;Yi_ZVTfW$;Y#6dVTfW);Ys05;Y(*s z;ZG4r5lm-H5lUxF5l-ibVoMQB5lInEXG{@G5l?4G;em>?rwFA;q)4VSrbwkogGAFA z!0I_tWKv{P<Wl6*nNk!|6jPMa8NnE27H5i5igJodifTGjidu?#icC5q7=z@vQrS}3 zQ#n#OQ@PSvqqtKvf*CY5laV~kzy$NL2m=E{Dnk@w3PTiA3S$Zr*gwp{44N#rxC2U) zax#+>OEUBGk~yKeK{QCSGbp%X7#J987;6~f8ETkn7~&agm}?l~nQB;S7~+|0SZf&K zS!&o)7_vEv^wJq>7~)y;xJuY+*qT8)SZmn9G9F+V_B^f<jv98b40{bn4MRL<3PUi1 zCZnGw*Ddyx{LJ{$qMTc-C7C5TskeBN^YcoIGLuS6@{5XZv1jF%7Ud=8+!822I5$2e zu_W~tS5azOYEf!la%%A{=AzWJTb#+6C1CFq-(pVAEV;#+UX)*2pvifQr8qSwtqA0= zB4!2#h9VXa!3rYSKm<F80QtO#n}LC0B|{M}0|UdaK>dvT+*JL<oXk8BF0Iga&J5NK zD9X=D%`VYT&eSc|Er4)z%TkLHi;_|^OG@+7^-(yPc?G2<@g=FnC3*#ww>aYCGxIV_ z;^RS1DV6|*IU^e!axii*aWO*3DiNgE(SvF8(_{gek(Zd88Xtd)D?UCqKczGW#O8^Q zFDy;Wfyfl`gFFQC1lT7Kf)6Cd$iTn=!o?s5a4;5u*d!+$4rgdECxb!{<OvWBG7+3= zlnAC8SlqMXj1o<@A|8-?L55<DGKA;A{sMUzl+=s4K+b`OXq6z$smMWCBmgp65JU)p z2#{t-7@?Ue%)r0^!m!W+u}Kas&LCJS9bCaB1IpoO!6gKDD_P+MiUDbmv7l(<U@QXh zlR-%g6e*yL2g+XHG!ntUz)%rX!r;OX>s8BG!%)MR!YIj*%~Zrz!U$p4Fs3j`g2b7@ zBny~i1(R%Gk{wKPNHR2Y)H2mD1v3<~g)@Lt7N_4!kcBTnHopWp<t51Om!M4l5|rs* zf|Bb?P^Q;py2Y21SzHpIpBA53RFqg*49*dn%(vJJN|WMK@-uI-g2it!7nCL;r4dk~ zyTy;l-0^9pdCAHkuY>9u21YJM9!4|9B1HxU26zB~><5K6H~^v;7#PwSY8fj6YCwVD zQOi`}1P%_XTIL$28fIv4h}1A<F_u92HO$~3VNL-B33Cc4NSIStB^jDon;97y3Pr*h z3c11=Y8ZnVG}-)$L_tYg3`B^72vA{DB+0<Qpvhb$%fP^Ji!HIBAT=+g2$ZNn#R@na zQt~sSSdueKiXk~u9;6d3Q-Hjn1@b8<gEBC(Fmi!?Ys6Rtk{P7FEdmuvP_Gt&;wg%y zC^Zd_FG100gw>ZInJAW&{7l0rHgJVy7=>J88AfqHYb?VkR!}u%2v%$aCXH_~Ks6bm zXflFpGJ<F_f+{mcQDzKRW(-kge2X<DKeNg(iXH5dD#I#%q{_3(P!B`ED2fy6yeh*e zHjw+OK<>=XtTKWbVuWgl5xOBpdPs&CK@BnT)8ql?9dICnb3QorgA+v&ILtVcQZtJS zGE;L5qu@*<1k*T*y{a-hr?l7*#xMdWRHR%7PKn^G$6*7h`RqV>ycm?q`Goj5_&7M& SIXE~tr5Gg`C75IwWtafTIu$nn diff --git a/verarbeitung/__pycache__/input_test.cpython-38.pyc b/verarbeitung/__pycache__/input_test.cpython-38.pyc deleted file mode 100644 index df395212453392e135532b12396cd4c30a92ea05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 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 LqYMZ$$}j-{ONE5A diff --git a/verarbeitung/__pycache__/input_test.cpython-39.pyc b/verarbeitung/__pycache__/input_test.cpython-39.pyc deleted file mode 100644 index 68e42fd6a47a02787524c68816a42574834931d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3865 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 AT>t<8 diff --git a/verarbeitung/__pycache__/json_demo.cpython-36.pyc b/verarbeitung/__pycache__/json_demo.cpython-36.pyc deleted file mode 100644 index 04acef5f40630ee2c7b6e887e33dc740b5e16a74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmXr!<>gwdG%xWPGXuk81|-15z`)?Zz`#(fz`($e!jQt4!w?0cnQ|C&nWC5&8B&;2 zSXvmOm{S;o88lg6g0%W+GTvg%%qu7@Nd{>L32`wnFo3W#$fz3(3=Aa<%?!0nV3N6n zv6-Qkr6Qt+!G$3<pq3TPXRBe&Vya<FVYFeWVa;N$VM}2Gvsh}_QkcOk)*7}H7BGvg zhAo8^%wn%$OJTENsA0<Ds9|enWMn9m2xq7;sbO?sh}EfO2b;`M!=Az}$xy?Q!ePTu z!=AzkW^>sv)G%jp)Np`x6@@d@Fx9Z6aDzl^SW<Xw7)m%(cvJYAnfirlIZL>*xNBHy zIGdRm8NwM-7y=oB7$O)_7=jrz`TcIO<R#{&MzJN9mSp4?-D0UsO)R>_o|Ru(l$V$j z#hj9#d5bl@D8ICzh>?MT;TBtQerZv1>PrZxB(W$xwd59SUVchy@h#Sz%)IR4D!#1Z z{Ji**)QS>45bG9WxhBsomYmGul3Oe(naL%$SW7ZXa#C;cB<JUq6lErrmgE-|-x4S& zP0GnkPAtjH&x=n<EJ-b51=+`*lAjr0T9i}72I8?L78IoBrQBl4FG$V1#R4{-C8adC zK$GhhW7sW5*C-*7J@NTz@gOI~gRCn?h^3~ar$WWJK~f-fi8(p9SU`%SIPy}<!Lqkl zKnkO{VElNaTkQFzC25&CsVf<ZWEdD2eg)`f<maa9C+1}4fpBSszH?@<Za`6fR%&*M zesZR6v2Fo`qg$3*lvtFMnpsksm#&Y(0XaWDB{er+ub}c4Uw&yxL1{^RNq#&?9OU_8 zEl^@)WCKGkMm9z+B*@1I65(OwVdP`vVB}!pVJwnkU|`T>DG~*R6bCp($ERf#ff6-X f3hZ(uLKdvfCO1E&G$+*#q^y{Qfq{X8k%tKYEMV(c diff --git a/verarbeitung/__pycache__/json_demo.cpython-38.pyc b/verarbeitung/__pycache__/json_demo.cpython-38.pyc deleted file mode 100644 index 4a1e7ba987775a20fddaa4a8f846bb238670d6a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1131 zcmWIL<>g{vU|<kFup%*qje+4Yh=Yuo7#J8F7#J9e4Hy_0QW#Pga~PsPG*b>^E>jc} zBSQ*v3QG$^6mtq|3R??96iW(w3P%e=6l)4&FoP!NOORQ9nvAztGxG{cOOhEud?;pN zU|;}YXOQs;3=9k<49yI+j5Q1{46y;VOeKuX47JQPOj%4d%qfgE3^hzy%r(p@OkfsE z4RZ=Jn8jMdoWcTTvDGlAu!33aHOwh&HVie43pi?+7cw$36mr#ooWt&SizP2HH#Lea zv9u&3zbJ~OGBvU27JF8HX;EHcP84%We&#LK^rHOI0!_|aEIFCQCAU~oGLuVgv6f_( z<fPu>NzTtJDauSLEy*t`z9mplnv|27oLG{XpBJB!Sdv-<^3E;xl>E&2(xRLqRt5%! zTWpC11*v%{nk=^%!)^(IjEv7ui_gnXNsR}YTzrcK#E#;~ODzWrtYjz>U|?YQ<(6y} z6Iz^FR2<`;n46gwlb%@;lboqrtXoi&pOu<jqFa_)lvtFMnpsksmmY({$tni9Cp9-; zub}c4Pg;IaZej`8#$p~&P>X@WpOKA`gOQDq3kmWt76~yhFyM|O8`L<`LBvrCqa*_? zZc>=RY*3sqE?`0le^$RDPy)EcR-9j2l$`n!!YN5CN>44(WG-T3U|=X>2N585f<nv{ z5n`z+>F^K(v7@+PAr@~04lxKJ2nutUpF!%1r9pn?L-I2ZBM25rg8T|f-XJLu23gO^ zz`y`bk3KNJGL<maFf=pPGM6ybFg7#RveYowFoDw}OAQk!HI^`gvOqIazfdh}3CjZ3 z8m1c7g-nbL;S8n>feb+m5ez8|!3>(Lez#abF<l(Rnv<EAU0lTnj;4~-iV{5#>lS0V zCL6@}pjZGq?-ombL2BMD7O*@^N@;F^CR-6ND1bn57{v`rK%mr=n3Gck@?nuU0|P@8 zdwyw2T4qivBtSrksR$e@eEFp%1*IkNCHe6n165JOg@X|Uc^Hf285kHe*@|RAMsa|1 vZG2i*5h$R*$ph>#up%V$5teY+<mRW8=A_zzG!%0%Ffed1@^EtSb8rCwrKt$8 diff --git a/verarbeitung/__pycache__/json_demo.cpython-39.pyc b/verarbeitung/__pycache__/json_demo.cpython-39.pyc deleted file mode 100644 index 4e31ce337645d5282ddab11668bc6d745735f9f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1163 zcmYe~<>g{vU|{I}vm!Btje+4Yh=Yuo7#J8F7#J9e4Hy_0QW#Pga~PsPG*b>^E>jc} zBSQ*v3QG$^6mtq|3R??96iW(w3P%e=6l)4&FoP!NOORQ9nvAztGxG{cOOhEud?;pN zU|;}YXOQs;3=9k<49yI+j5Q1{46y;VOeKuX47JQPOj%4d%qfgE3^hzy%r(p@OkfsE z4RZ=Jn8jMdoWcTTvDGlAu!33aHOwh&HVie43pi?+7cw$36mr#ooWt&SizP2HH#Lea zv9u&3zvvcAWoly4E%vPZ(xSY?oG9j${LEXd=|%aa1)7|<SaLFpOK!2GWG0u~VlBxm z$w|G%lboMdQk0ogT9RK>d`qC9G$|)DIk6-&KQBHdu_U#Km4Sib7JEv5W_)Q;P7xc3 z$Cg-7keZjG$#RP^?3NJ7$oTxU_`Lj-)Oe7|#kW{M>?n@B)N-)EN`@jq1_p*-LCIDz zp~b01#WB8#IVGtv?wKVq&Y8iw0Y&*)so5nl$(g#vx&;u9ZdqzkVo_3RW=UyYdJGCD zs~F_A)ZBc%g34PwY57IDi6vm$i+Mo7E(VGVMm9zcMm9z+B*?>9B+S6TfIGfyP~%Gn z5nm~ck_@nTN?``GLGi=5fC(ioSpAAXiQyJoaeir0a_UP6rzEi`J+(xWxrm*CfuV>4 zMDQ{&Fn~hO6%l%=De3Ug1F@sHV4)Xp1P(n2Ap{D4n4dxFilsq*=0ox`4<iT`NrC(d zO6njf5C%mZ$ad7U$yCBv!_drF%Ur@#!`RGN%TmK!!vs#7EHzA^lv%<I$_~v;{W7(z zB`gbAYnW<S7cwz2gfpZturRPNG&3_Y<Ovuu6bBhFFoIzu10zEULokCTtKThFP)aDi z#hR0umt9=N2adXu)QS>45bG9Wxh5MVL_jeEcJeKj{DRcHTP$FCmXy-m0!_9ekoStj z85kI%xIqaFl-d$=a*FstVJQI;X3sAzNz2Shg#;2Pu@!+siZ8#kq@c7Uz9c^$WS}Z) zSaC3dAP-}aA}BuCisV6o%K^^S@o8B_puhts8L-2^ijd4lSi)hGo1apelWGUjPz(xU M4n`hM4t@?U0C*7*OaK4? diff --git a/verarbeitung/__pycache__/unittest.cpython-36.pyc b/verarbeitung/__pycache__/unittest.cpython-36.pyc deleted file mode 100644 index 245eb7f9be9221daa930d9fa83c77368ba463af7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmXr!<>fNlw>VLok%8ec0}^0iU|?`yU|=Y=VqjoMVMt-jVTc0JOgW6XOi@gX4DJjm z%qc7_3@I$B3|Y+0%uy_<tSPM7Ohsm?3|VZ=42%pZjKK_=Y%f8E`e`!W;wdP~Pfjf^ zj?YcZ%u5D|!Y~ueE)fO>hE#?q#uSDqrWD2$rWS@M<`m{&22GY*d;t*MnR)3Usl_G9 zj8M%WnvH>h!5QRM0|o|$8ip)}62=t9bjB2>6s8pBW|kDj6qa<5c_5M{g)yBeohgl} znTe4hg&~+hlhyAQYf64*mElW}Ss@UPktWkE?!@Ba)S?pC!qUW?B9I$38E>%^r{<)s zWGLcfU|{&=ub+{ho2s9flbHv?r4{<lnZddNMfq8&*(LhPnYzWg1rUyIS!z*YQBrDV zNoiiXJ_@HaFSDd1wYWsDpz;<shynE|E6772TNxOuq@ZF@&+8#6^V4Lx#StH$mzbLx zAAgH0K0Y@;r8Eb`=82C7xf~)>#Ld6}aW&ZK5P}ON#>~LL0E+BlkX;;%MIb)NL{Kcn z$7{0R;()pE78k-9;PAM`0g4Le#Nt%2t|A@=28LTKAdL|7L4gEefo!_PVFPiS9VncO QIT#oiI2d`DgjhHj0Y5^X$^ZZW diff --git a/verarbeitung/input_test.py b/verarbeitung/input_test.py deleted file mode 100644 index 44361c4..0000000 --- a/verarbeitung/input_test.py +++ /dev/null @@ -1,82 +0,0 @@ -class Publication: - def __init__(self, doi_url, title, contributors, journal, publication_date, references, citations, group): - self.doi_url = doi_url - self.title = title - self.contributors = contributors - self.journal = journal - self.publication_date = publication_date - if references is None: - self.references = [] - else: - self.references = ref(references) - if citations is None: - self.citations = [] - else: - self.citations = cit(citations) - self.group = group - - -class Citation: - def __init__(self,doi_url, title, contributors, journal, publication_date): - self.doi_url = doi_url - self.title = title - self.contributors = contributors - self.journal = journal - self.publication_date = publication_date - -class Reference: - def __init__(self,doi_url, title, contributors, journal, publication_date): - self.doi_url = doi_url - self.title = title - self.contributors = contributors - self.journal = journal - self.publication_date = publication_date - -def input_test_func(pub_doi): - for array in list_of_arrays: - if pub_doi == array[0]: - pub = Publication(array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7]) - return pub - - -def cit(list_doi): - cits = [] - for doi_url in list_doi: - for array in list_of_arrays: - if doi_url == array[0]: - cits.append(Citation(array[0], array[1], array[2], array[3], array[4])) - return cits - -def ref(list_doi): - refs = [] - for doi_url in list_doi: - for array in list_of_arrays: - if doi_url == array[0]: - refs.append(Citation(array[0], array[1], array[2], array[3], array[4])) - return refs - - -beispiel1 = ['doi1', 'title1', ['contributor1'], 'journal1', 'date1', ['doi2'], ['doi3'], ''] -beispiel2 = ['doi2', 'title2', ['contributor2'], 'journal2', 'date2', [], ['doi1'], ''] -beispiel3 = ['doi3', 'title3', ['contributor3'], 'journal3', 'date3', ['doi1'], [], ''] - -zyklus1 = ['doiz1', 'titlez1', ['contributorz1.1', 'contributorz1.2'], 'journalz1', 'datez1', ['doiz2'], ['doiz2'], ''] -zyklus2 = ['doiz2', 'titlez2', ['contributorz2.1', 'contributorz2.2'], 'journalz2', 'datez2', ['doiz1'], ['doiz1'], ''] - -inner_edge1 = ['doi_ie1', 'title_ie1', ['contributor_ie1.1', 'contributor_ie1.2'], 'journal_ie1', 'date_ie1', ['doi_ie2'], ['doi_ie3'], ''] -inner_edge2 = ['doi_ie2', 'title_ie2', ['contributor_ie2.1', 'contributor_ie2.2'], 'journal_ie2', 'date_ie2', [], ['doi_ie1','doi_ie3'], ''] -inner_edge3 = ['doi_ie3', 'titlez_ie3', ['contributor_ie3.1', 'contributor_ie3.2'], 'journal_ie3', 'date_ie3', ['doi_ie1','doi_ie2'], [], ''] - -right_height01 = ['doi_h01', 'title_h01', ['contributor_h01'], 'journal_h01', 'date_h01', [], [], ''] -right_height02 = ['doi_h02', 'title_h02', ['contributor_h02'], 'journal_h02', 'date_h02', [], ['doi_h1'], ''] -right_height1 = ['doi_h1', 'title_h1', ['contributor_h1'], 'journal_h1', 'date_h1', [], ['doi_h2'], ''] -right_height2 = ['doi_h2', 'title_h2', ['contributor_h2'], 'journal_h2', 'date_h2', [], ['doi_h3'], ''] -right_height3 = ['doi_h3', 'title_h3', ['contributor_h3'], 'journal_h3', 'date_h3', [], [], ''] - -right_depth01 = ['doi_d01', 'title_d01', ['contributor_d01'], 'journal_d01', 'date_d01', [], [], ''] -right_depth02 = ['doi_d02', 'title_d02', ['contributor_d02'], 'journal_d02', 'date_d02', ['doi_d1'], [], ''] -right_depth1 = ['doi_d1', 'title_d1', ['contributor_d1'], 'journal_d1', 'date_d1', ['doi_d2'], [], ''] -right_depth2 = ['doi_d2', 'title_d2', ['contributor_d2'], 'journal_d2', 'date_d2', ['doi_d3'], [], ''] -right_depth3 = ['doi_d3', 'title_d3', ['contributor_d3'], 'journal_d3', 'date_d3', [], [], ''] - -list_of_arrays = [beispiel1, beispiel2, beispiel3, zyklus1, zyklus2, inner_edge1, inner_edge2, inner_edge3, right_height01, right_height02, right_height1, right_height2, right_height3, right_depth01, right_depth02, right_depth1, right_depth2, right_depth3] diff --git a/verarbeitung/json_demo.py b/verarbeitung/json_demo.py deleted file mode 100644 index b9f618d..0000000 --- a/verarbeitung/json_demo.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python3 -import json -from input_fj import input - -""" -Functions that format the computed graph to match the interface to the output-part - -""" - -# creates a list that contains a dictionary for each node -# the dictionaries store the values for the attributes -def format_nodes(V): - list_of_node_dicts = list() - for node in V: - new_dict = dict() - new_dict["name"] = node.title - new_dict["author"] = node.contributors - new_dict["year"] = node.publication_date - new_dict["journal"] = node.journal - new_dict["doi"] = node.doi_url - new_dict["group"] = node.group - list_of_node_dicts.append(new_dict) - return list_of_node_dicts - -# creates a list that contains a disctionary for each edge -# the dictionaries contain the source as keys and the target as values -def format_edges(E): - list_of_edge_dicts = list() - for edge in E: - new_dict_2 = dict() - new_dict_2["source"] = edge[0] - new_dict_2["target"] = edge[1] - list_of_edge_dicts.append(new_dict_2) - return list_of_edge_dicts - -# combine the lists of nodes and edges to a dictionary and saves it to a json file -def output_to_json(V,E): - dict_of_all = dict() - list_of_node_dicts = format_nodes(V) - list_of_edge_dicts = format_edges(E) - dict_of_all["nodes"] = list_of_node_dicts - dict_of_all["links"] = list_of_edge_dicts - with open('json_text.json','w') as outfile: - json.dump(dict_of_all, outfile) - -#knoten = ["doi1", "doi2", "doi3"] -#kanten = [[1,2],[3,4],[5,6]] -#output_to_json(knoten,kanten) - diff --git "a/verarbeitung/n\303\266tige Tests.txt" "b/verarbeitung/n\303\266tige Tests.txt" deleted file mode 100644 index 9556328..0000000 --- "a/verarbeitung/n\303\266tige Tests.txt" +++ /dev/null @@ -1,4 +0,0 @@ -Zyklus -großer Zyklus -Innere Kanten vervollständigen - -- GitLab