diff options
Diffstat (limited to 'python/fatcat_tools/normal.py')
-rw-r--r-- | python/fatcat_tools/normal.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/python/fatcat_tools/normal.py b/python/fatcat_tools/normal.py index 80bcfa5a..a77c5eb0 100644 --- a/python/fatcat_tools/normal.py +++ b/python/fatcat_tools/normal.py @@ -19,7 +19,10 @@ def clean_doi(raw): Returns None if not a valid DOI """ + if not raw: + return None raw = raw.strip() + raw = raw.replace('\u2013', '-') # emdash if len(raw.split()) != 1: return None if raw.startswith("doi:"): @@ -32,6 +35,8 @@ def clean_doi(raw): raw = raw[8:] if raw.startswith("dx.doi.org/"): raw = raw[11:] + if raw[7:9] == "//": + raw = raw[:8] + raw[9:] if not raw.startswith("10."): return None if not DOI_REGEX.fullmatch(raw): @@ -40,6 +45,10 @@ def clean_doi(raw): def test_clean_doi(): assert clean_doi("10.1234/asdf ") == "10.1234/asdf" + assert clean_doi("10.1037//0002-9432.72.1.50") == "10.1037/0002-9432.72.1.50" + assert clean_doi("10.1037/0002-9432.72.1.50") == "10.1037/0002-9432.72.1.50" + assert clean_doi("10.23750/abm.v88i2 -s.6506") == None + assert clean_doi("10.17167/mksz.2017.2.129–155") == "10.17167/mksz.2017.2.129-155" assert clean_doi("http://doi.org/10.1234/asdf ") == "10.1234/asdf" assert clean_doi("https://dx.doi.org/10.1234/asdf ") == "10.1234/asdf" assert clean_doi("doi:10.1234/asdf ") == "10.1234/asdf" @@ -54,6 +63,8 @@ def clean_arxiv_id(raw): Works with versioned or un-versioned arxiv identifiers. """ + if not raw: + return None raw = raw.strip() if raw.lower().startswith("arxiv:"): raw = raw[6:] @@ -90,7 +101,26 @@ def test_clean_arxiv_id(): assert clean_arxiv_id("0806.v1") == None assert clean_arxiv_id("08062878v1") == None +def clean_pmid(raw): + if not raw: + return None + raw = raw.strip() + if len(raw.split()) != 1: + return None + if raw.isdigit(): + return raw + return None + +def test_clean_pmid(): + assert clean_pmid("1234") == "1234" + assert clean_pmid("1234 ") == "1234" + assert clean_pmid("PMC123") == None + assert clean_sha1("qfba3") == None + assert clean_sha1("") == None + def clean_pmcid(raw): + if not raw: + return None raw = raw.strip() if len(raw.split()) != 1: return None @@ -99,6 +129,8 @@ def clean_pmcid(raw): return None def clean_sha1(raw): + if not raw: + return None raw = raw.strip().lower() if len(raw.split()) != 1: return None @@ -134,6 +166,8 @@ def test_clean_sha256(): ISSN_REGEX = re.compile("^\d{4}-\d{3}[0-9X]$") def clean_issn(raw): + if not raw: + return None raw = raw.strip().upper() if len(raw) != 9: return None @@ -150,6 +184,8 @@ def test_clean_issn(): ISBN13_REGEX = re.compile("^97(?:8|9)-\d{1,5}-\d{1,7}-\d{1,6}-\d$") def clean_isbn13(raw): + if not raw: + return None raw = raw.strip() if not ISBN13_REGEX.fullmatch(raw): return None @@ -164,6 +200,8 @@ def test_clean_isbn13(): ORCID_REGEX = re.compile("^\d{4}-\d{4}-\d{4}-\d{3}[\dX]$") def clean_orcid(raw): + if not raw: + return None raw = raw.strip() if not ORCID_REGEX.fullmatch(raw): return None |