Skip to content

API Reference

Identifiers

uvt_scholarly.identifiers.ARXIV_BASE_URL module-attribute

ARXIV_BASE_URL = 'https://arxiv.org/abs'

Base URL for arXiv documents.

uvt_scholarly.identifiers.ARXIV_PDF_URL module-attribute

ARXIV_PDF_URL = 'https://arxiv.org/pdf'

Base URL for arXiv PDF files.

uvt_scholarly.identifiers.DOI_RESOLVER module-attribute

DOI_RESOLVER: str = 'https://doi.org'

Default resolver for the DOI class.

uvt_scholarly.identifiers.arXiv dataclass

Bases: ABC

An arXiv identifier.

year instance-attribute

year: int

Year of the arXiv submission.

month instance-attribute

month: int

Month of the arXiv submission.

number instance-attribute

number: str

The identifier of the submission in the month. This is usually a padded digit string, depending on the variant of the arXiv identifier.

version instance-attribute

version: int | None

A version for the submission. If None, the latest version is assumed.

archive instance-attribute

archive: str | None

The archive the submission belongs to.

subjectclass instance-attribute

subjectclass: str | None

The subject class the submission belongs to.

is_valid abstractmethod property

is_valid: bool

True if the arXiv is valid.

url property

url: str

A URL for the abstract page corresponding to this arXiv identifier.

pdf_url property

pdf_url: str

A URL for the PDF page corresponding to this arXiv identifier.

latest abstractmethod

latest() -> str

A string representing the latest version of the arXiv identifier.

stamp abstractmethod

stamp() -> str

A string matching the stamp added to the left-hand side of arXiv papers.

display

display() -> str

A (versioned) display string for an arXiv identifier.

from_string staticmethod

from_string(arxivid: str) -> arXiv

Convert some text into an arXiv instance.

This function supports both old-style and new style arXiv identifiers. For more information see the official decumentation.

uvt_scholarly.identifiers.ModernArXiv dataclass

Bases: arXiv

A modern arXiv identifier of the form YYMM.NNNN[N][vN].

uvt_scholarly.identifiers.LegacyArXiv dataclass

Bases: arXiv

A legacy arXiv identifier of the form ARCHIVE.[SUBJECTCLASS]/YYMMNNN.

uvt_scholarly.identifiers.DOI dataclass

A parsed Digital Object Identifier.

The DOI has a standard form NN.RRRR/suffix, where the first part is the namespace, the second part is the registrant and the last part is the item suffix.

Info

When comparing two DOIs for equality, the suffix partially compares in a case-insensitive way. In particular, all ASCII letters from the suffix are considered to be case-insensitive, but other Unicode letters are compared in a case-sensitive fashion.

namespace instance-attribute

namespace: str

The namespace for the identifier. This is usually 10 for scientific publications.

registrant instance-attribute

registrant: str

The registrant for this identifier. There is no official list of all registrants, but some information can be obtained, e.g., from Crossref by querying https://api.crossref.org/prefixes/10.1038.

item instance-attribute

item: str

The unique identifier for this item.

url property

url: str

A URL for the DOI using a supported resolver.

is_valid property

is_valid: bool

True if the DOI is valid.

Note that this just checks the general format of the DOI, e.g. size, allowed characters, etc. The only official way to verify if a DOI is valid is to resolve it. This can be done using resolve, which effectively checks if url is redirects successfully.

display

display() -> str

A display string for the DOI (recommended by the DOI Foundation).

from_string staticmethod

from_string(doi: str) -> DOI

Convert some text into a DOI instance.

Some basic structural checks are performed on the input string to ensure that it can represents a DOI (e.g. length of parts).

resolve

resolve(client: Client | None = None) -> bool

Parameters:

  • client (Client | None, default: None ) –

    A client used for the HTTP request. This function automatically creates a client if none is provided. However, if checking many DOIs at once, it is recommended to create a client, so that requests can be handled more efficiently.

Returns:

  • bool

    True if the current DOI redirects correctly.

uvt_scholarly.identifiers.ISBN10 dataclass

An ISBN-10 identifier.

parts instance-attribute

parts: tuple[str, str, str, str]

The parts of the identifier, according to the standard. These are mostly internal and should not be used.

They are: the registration group identifier, the registrant identifier (e.g. publisher), the publication identifier (e.g. title) and the check digit. These are currently not parsed correctly and should not be relied upon.

is_valid property

is_valid: bool

True if the ISBN-10 is valid.

from_string staticmethod

from_string(isbn10: str) -> ISBN10

Convert some text into an ISBN10 instance.

to_isbn13

to_isbn13() -> ISBN13

Convert an ISBN-10 into an ISBN-13.

uvt_scholarly.identifiers.ISBN13 dataclass

parts instance-attribute

parts: tuple[str, str, str, str, str]

The parts of the identifier, according to the standard. These are mostly internal and should not be used.

is_valid property

is_valid: bool

True if the ISBN-13 is valid.

from_string staticmethod

from_string(isbn13: str) -> ISBN13

Convert some text into an ISBN13 instance.

Note that this function also supports ISBN-10 inputs, which are converted to ISBN-13 using ISBN10.to_isbn13.

to_isbn10

to_isbn10() -> ISBN10

Convert an ISBN-13 into an ISBN-10.

Note that not all ISBN-13 identifiers can be converted to ISBN-10. Only those with the special prefix 978 are allowed.

uvt_scholarly.identifiers.ISSN dataclass

A parsed International Standard Serial Number.

parts instance-attribute

parts: tuple[str, str]

The two parts of the ISSN, which generally has the form NNNN-NNNC.

is_valid property

is_valid: bool

True if the ISSN is valid.

from_string staticmethod

from_string(issn: str) -> ISSN

Convert some text into an ISSN instance.

Some basic structural checks are performed on the input string to ensure that it can represents a ISSN (e.g. length of parts).

uvt_scholarly.identifiers.ORCiD dataclass

A parsed ORCiD.

parts instance-attribute

parts: tuple[str, str, str, str]

The four parts of the ORCiD, which generally has the form NNNN-NNNN-NNNN-NNNN.

is_valid property

is_valid: bool

True if the ORCiD is valid.

from_string staticmethod

from_string(orcid: str) -> ORCiD

Convert some text into an ORCiD instance.

Some basic structural checks are performed on the input string to ensure that it can represents a ORCiD (e.g. length of parts).

uvt_scholarly.identifiers.ResearcherID dataclass

A parsed ResearcherID.

parts instance-attribute

parts: tuple[str, str, str]

The three parts of the ResearcherID, which generally has the form X[XX]-NNNN-NNNN, which an ASCII letter as the first part and two 4-digit numeric identifiers.

year property

year: int

The year the ResearcherID was registered. This is only the last 4 digits of the identifier.

is_valid property

is_valid: bool

True if the ResearcherID is valid.

Note that there is no standardized format for the ResearcherID, so this validation should be taken with a grain of salt. It mainly checks that values found in the wild are considered valid.

from_string staticmethod

from_string(rid: str) -> ResearcherID

Convert some text into a ResearcherID instance.

Some basic structural checks are performed on the input string to ensure that it can represents a ResearcherID (e.g. length of parts).

Publication

uvt_scholarly.publication.SCORE_FULL_NAME module-attribute

SCORE_FULL_NAME: dict[ScoreType, str] = {ScoreType.AIS: 'Article Influence Score', ScoreType.JIF: 'Journal Impact Factor', ScoreType.RIF: 'Relative Impact Factor', ScoreType.RIS: 'Relative Influence Score'}

A mapping from journal scores to their full names.

uvt_scholarly.publication.Author dataclass

first_name instance-attribute

first_name: str | None

First name of the author. This can contain multiple first names and initials, as necessary. It can also be None, if the author does not have a first name, for whatever reason.

last_name instance-attribute

last_name: str

Last name of the author. This can contain additional parts as well, e.g. von Neumann.

affiliations class-attribute instance-attribute

affiliations: tuple[str, ...] = ()

A list of affiliations for the author. This is generally only meant for a particular publication, not a general list over time.

researcherid class-attribute instance-attribute

researcherid: ResearcherID | None = None

The ResearcherID for the author.

orcid class-attribute instance-attribute

orcid: ORCiD | None = None

The ORCiD for the author.

uvt_scholarly.publication.ScoreType

Bases: Enum

Supported types of Journal scores.

AIS class-attribute instance-attribute

AIS = enum.auto()

Article Influence Score.

JIF class-attribute instance-attribute

JIF = enum.auto()

Journal Impact Factor.

RIF class-attribute instance-attribute

RIF = enum.auto()

Relative Impact Factor.

RIS class-attribute instance-attribute

RIS = enum.auto()

Relative Influence Score.

uvt_scholarly.publication.Quartile

Bases: IntEnum

The quartile a journal belongs to.

NA class-attribute instance-attribute

NA = 99

The quartile for this publication is not set or not applicable.

uvt_scholarly.publication.JournalCategory dataclass

A category for a journal.

name instance-attribute

name: str

The main name of the category, e.g. Mathematics.

field instance-attribute

field: str | None

A sub-category or sub-field in the main category, e.g. Applied.

uvt_scholarly.publication.Journal dataclass

A basic description of a journal.

name instance-attribute

name: str

The name of the journal.

issn instance-attribute

issn: ISSN | None

An International Standard Serial Number (ISSN) for the journal or publishing house, if available.

eissn instance-attribute

eissn: ISSN | None

An electronic ISSN, if available.

publisher instance-attribute

publisher: str | None

The publisher for this journal.

scores class-attribute instance-attribute

scores: Mapping[ScoreType, float] = field(default_factory=dict)

A mapping of known scores for this journal, as available.

quartile class-attribute instance-attribute

quartile: Mapping[ScoreType, Quartile] = field(default_factory=dict)

A mapping of known quartiles for each score, as available.

categories class-attribute instance-attribute

categories: tuple[JournalCategory, ...] = ()

A list of categories the journal can be classified in. This generally depends heavily on the source of the metadata (e.g. Web of Science categories).

uvt_scholarly.publication.Pages dataclass

Page range for a publication.

start instance-attribute

start: str

The starting page identifier. This is generally a numerical value, but more modern online-only journals can use different identifiers.

end instance-attribute

end: str | None

The ending page identifier. This can be missing for some journals.

count instance-attribute

count: int | None

A total page count. If all values are numeric, this should correspond to just end - start + 1. This is a separate attribute because some journals do not provide numeric page ranges.

uvt_scholarly.publication.DocumentType

Bases: Enum

A enumeration of supported document types.

Article class-attribute instance-attribute

Article = enum.auto()

A standard journal article.

Book class-attribute instance-attribute

Book = enum.auto()

A standard book.

BookChapter class-attribute instance-attribute

BookChapter = enum.auto()

A chapter from a book.

Dataset class-attribute instance-attribute

Dataset = enum.auto()

A published dataset.

Other class-attribute instance-attribute

Other = enum.auto()

An unknown or unsupported type of document.

ProceedingsPaper class-attribute instance-attribute

ProceedingsPaper = enum.auto()

A published paper in conference proceedings.

Review class-attribute instance-attribute

Review = enum.auto()

A review paper.

Report class-attribute instance-attribute

Report = enum.auto()

A technical report.

uvt_scholarly.publication.CitedPublication dataclass

Stripped down publication metadata for cited references.

first_author instance-attribute

first_author: str

The last name of the first author.

journal instance-attribute

journal: str

The (usually abbreviated) journal name.

year instance-attribute

year: int

The year of the publication.

doi instance-attribute

doi: DOI

The Digital Object Identifier (DOI) for this publication.

uvt_scholarly.publication.Publication dataclass

authors instance-attribute

authors: tuple[Author, ...]

A list of authors for the current publication.

title instance-attribute

title: str

The main title of the current publication.

journal instance-attribute

journal: Journal

The journal in which it was published.

year instance-attribute

year: int

The year in which it was published.

volume instance-attribute

volume: str

The volume in which it was published. This is usually a numerical value, but can also be written as Roman numerals or other identifiers.

issue instance-attribute

issue: str

The issue in which it was published. This is usually a numerical value, but it can be some other identifier or even something like "Summer" for various periodicals.

pages instance-attribute

pages: Pages

Page range in the issue.

doi instance-attribute

doi: DOI | None

A Digital Object Identifier (DOI) for the publication.

dtype instance-attribute

dtype: DocumentType

A generic document type for the publication.

identifier instance-attribute

identifier: str

A unique identifier for the publication the repository from which it was obtained (e.g. a Web of Science Accession Number).

cited_by_count instance-attribute

cited_by_count: int

A total number of citations for this publication. This value is generally exported from a repository and does not necessarily match citations.

cited_by instance-attribute

cited_by: tuple[Publication, ...]

A list of publications that have cited this publication.

citations instance-attribute

citations: dict[DOI, CitedPublication]

A list of publications cited by this publication.

uvt_scholarly.enrich.add_cited_by

add_cited_by(pubs: Sequence[Publication], citations: Sequence[Publication]) -> tuple[Publication, ...]

Fill out the cited_by entry of a Publication.

This function matches the given citations to their respective pubs based on the DOI. The citations must have the Publication.citations field filled in (e.g. by passing in include_citations to read_from_csv).

Publications in pubs that do not have a DOI are ignored and will not be returned.

uvt_scholarly.enrich.add_scores

add_scores(pubs: tuple[Publication, ...], dbfile: Path, *, past: int = 5, scores: ScoreType | set[ScoreType] | None = None) -> tuple[Publication, ...]

Fill in the scores for each publication.

Publications that do not have known scores in the database are left as is. The score added to each publication will be the maximum over the past past years. This function cannot add just the score from a specific year.

Parameters:

  • past (int, default: 5 ) –

    The past number of years over which the score is taken.

  • scores (ScoreType | set[ScoreType] | None, default: None ) –

    A list of scores to add. If left empty, no scores are added and the publication list is returned as is.

UEFISCDI

uvt_scholarly.uefiscdi.CITATION_INDEX_DISPLAY_NAME module-attribute

CITATION_INDEX_DISPLAY_NAME = {CitationIndex.AHCI: 'Arts Humanities Citation Index', CitationIndex.ESCI: 'Emerging Sources Citation Index', CitationIndex.SCIE: 'Science Citation Index Expanded', CitationIndex.SSCI: 'Social Sciences Citation Index'}

A mapping of citation indices (as they appear in the UEFISCDI databases) to their full names.

uvt_scholarly.uefiscdi.UEFISCDI_DATABASE_URL module-attribute

UEFISCDI_DATABASE_URL = {2025: {ScoreType.AIS: 'https://uefiscdi.gov.ro/resource-865528-AIS.JCR2024.iunie2025.xlsx', ScoreType.RIS: 'https://uefiscdi.gov.ro/resource-865521-RIS.2024.iunie-2025.xlsx', ScoreType.RIF: 'https://uefiscdi.gov.ro/resource-865599-RIF.iunie2025.xlsx'}, 2024: {ScoreType.AIS: 'https://uefiscdi.gov.ro/resource-861731-AIS.JCR2023.iunie2024.xlsx', ScoreType.RIS: 'https://uefiscdi.gov.ro/resource-861773-RIS.2023iunie2024.xlsx', ScoreType.RIF: 'https://uefiscdi.gov.ro/resource-861735-FIR.2023iunie2024.xlsx'}, 2023: {ScoreType.AIS: 'https://uefiscdi.gov.ro/resource-863884-ais_2022.xlsx', ScoreType.RIS: 'https://uefiscdi.gov.ro/resource-863882-ris_2022.xlsx', ScoreType.RIF: 'https://uefiscdi.gov.ro/resource-863887-rif_2022.xlsx'}, 2022: {ScoreType.AIS: 'https://uefiscdi.gov.ro/resource-862108-ais.2021.xlsx', ScoreType.RIS: 'https://uefiscdi.gov.ro/resource-862102-ris.2021.xlsx', ScoreType.RIF: 'https://uefiscdi.gov.ro/resource-862155-rif.2021.xlsx'}, 2021: {ScoreType.AIS: 'https://uefiscdi.gov.ro/resource-820980-ais.2020.xlsx', ScoreType.RIS: 'https://uefiscdi.gov.ro/resource-820984-sri.2020.xlsx', ScoreType.RIF: 'https://uefiscdi.gov.ro/resource-820987-rif.2020.xlsx'}, 2020: {ScoreType.AIS: 'https://uefiscdi.gov.ro/resource-821312-ais2019-iunie2020-.valori.cuartile.xlsx', ScoreType.RIS: 'https://uefiscdi.gov.ro/resource-829001-sri.2019.xlsx', ScoreType.RIF: 'https://uefiscdi.gov.ro/resource-829003-rif.2019.xlsx'}}

A mapping of database identifiers to URLs containing the databases themselves.

uvt_scholarly.uefiscdi.UEFISCDI_DEFAULT_PASSWORD module-attribute

UEFISCDI_DEFAULT_PASSWORD = 'uefiscdi'

Default password used in several UEFISCDI documents.

uvt_scholarly.uefiscdi.UEFISCDI_DEFAULT_VERSION module-attribute

UEFISCDI_DEFAULT_VERSION = max(UEFISCDI_DATABASE_URL)

Default version used for databases.

uvt_scholarly.uefiscdi.CitationIndex

Bases: Enum

The citation index to which a given score belongs to.

Many relative scores are generally computed per field of research. These are the citation indices used by the UEFISCDI (by way of Web of Science).

AHCI class-attribute instance-attribute

AHCI = enum.auto()

Arts Humanities Citation Index.

ESCI class-attribute instance-attribute

ESCI = enum.auto()

Emerging Sources Citation Index.

SCIE class-attribute instance-attribute

SCIE = enum.auto()

Science Citation Index Expanded.

SSCI class-attribute instance-attribute

SSCI = enum.auto()

Social Sciences Citation Index.

display_name property

display_name: str

Show a full display name for the index.

uvt_scholarly.uefiscdi.Database

Bases: Generic[ScoreT]

A context manager that can be used to add scores to a sqlite3 database.

This class will handle creating the database from a given schema and an index for efficient searching.

name class-attribute

name: str

The name of the database.

schema class-attribute

schema: str

A schema for the database. Note that the database name should match name.

index class-attribute

index: str

An statement used to create an index for the database. Note that the database and index names should match name.

filename instance-attribute

filename: Path = filename

The file containing the database.

uvt_scholarly.uefiscdi.Score dataclass

Bases: ABC

A base class for parsed scores from UEFISCDI documents.

journal instance-attribute

journal: str

The journal this score is for.

issn instance-attribute

issn: ISSN | None

The ISSN of the journal, if any.

eissn instance-attribute

eissn: ISSN | None

The eISSN of the journal, if any.

score instance-attribute

score: float

The score of the journal. This value can also be zero if no score is given.

name abstractmethod property

name: str

An identifier name for the score, e.g. RIS.

issns property

issns: str | None

A string variant of the ISSN.

eissns property

eissns: str | None

A string variant of the eISSN.

is_valid property

is_valid: bool

Checks if the score is valid.

In general, the score is valid if it has a non-empty journal name, valid ISSN and eISSN and the value of the numerical score is positive. Subclasses can check additional requirements.

uvt_scholarly.uefiscdi.XLSXParser

Bases: Generic[ScoreT], ABC

A parser / reader for XLSX score files from the UEFISCDI.

skip_header property

skip_header: bool

If True, the first row in the file is skipped.

ncolumns abstractmethod property

ncolumns: int

Number of columns in the parsed file.

parse_row abstractmethod

parse_row(row: tuple[ReadOnlyCell, ...]) -> ScoreT | None

Parse a row from the file and return the Score.

parse

parse(filename: Path) -> tuple[ScoreT, ...]

Read an UEFISCDI XLSX file and return the valid scores.

Raises:

uvt_scholarly.uefiscdi.ais.ArticleInfluenceScore dataclass

Bases: Score

The AIS for a given journal.

citation_index instance-attribute

citation_index: CitationIndex

The citation index this score is a part of.

journal_category instance-attribute

journal_category: JournalCategory

The category the journal is part of (scores are relative to the category).

quartile instance-attribute

quartile: Quartile

The quartile the journal belongs to, in its category.

position instance-attribute

position: int

The position of the journal in its quartile.

category instance-attribute

category: Category | None

A category based on the quartile used by the CS exporter.

from_strings staticmethod

from_strings(journal: str, issn: str, eissn: str, journal_category: str, citation_index: str, score: str, quartile: int | str | Quartile, position: int | str) -> ArticleInfluenceScore

Convert the given data into an ArticleInfluenceScore.

The given data is normalized and cleaned up, as appropriate. This function can raise if the data is incorrect (e.g. a non-numeric score).

uvt_scholarly.uefiscdi.ais.parse_article_influence_score

parse_article_influence_score(filename: Path, version: int) -> tuple[ArticleInfluenceScore, ...]

Read AIS scores from the given file.

Parameters:

  • version (int) –

    the year the list in filename was published.

Raises:

uvt_scholarly.uefiscdi.ais.store_article_influence_score

store_article_influence_score(filename: Path, *, years: set[int] | None = None, a_star_percentage: int = 20, force: bool = False) -> None

Download AIS scores for the given years and store them in filename.

Parameters:

  • years (set[int] | None, default: None ) –

    A list of years for which to download the AIS scores. By default, all the years in uvt_scholarly.uefiscdi.UEFISCDI_DATABASE_URL are downloaded.

  • a_star_percentage (int, default: 20 ) –

    Percentage used in determining categories for the Computer Science department.

  • force (bool, default: False ) –

    If True, all documents are re-downloaded (even if cached).

Raises:

uvt_scholarly.uefiscdi.ris.RelativeInfluenceScore dataclass

Bases: Score

The RIF for a given journal.

from_strings staticmethod

from_strings(journal: str, issn: str, eissn: str, score: str) -> RelativeInfluenceScore

Convert the given data into an RelativeInfluenceScore.

The given data is normalized and cleaned up, as appropriate. This function can raise if the data is incorrect (e.g. a non-numeric score).

uvt_scholarly.uefiscdi.ris.parse_relative_influence_score

parse_relative_influence_score(filename: Path, version: int) -> tuple[RelativeInfluenceScore, ...]

Read RIS scores from the given file.

Parameters:

  • version (int) –

    the year the list in filename was published.

Raises:

uvt_scholarly.uefiscdi.ris.store_relative_influence_score

store_relative_influence_score(filename: Path, *, years: int | set[int] | None = None, force: bool = False) -> None

Download RIS scores for the given years and store them in filename.

Parameters:

  • years (int | set[int] | None, default: None ) –

    A list of years for which to download the RIS scores. By default, all the years in uvt_scholarly.uefiscdi.UEFISCDI_DATABASE_URL are downloaded.

  • force (bool, default: False ) –

    If True, all documents are re-downloaded (even if cached).

Raises:

uvt_scholarly.uefiscdi.rif.RelativeImpactFactor dataclass

Bases: Score

The RIF for a given journal.

from_strings staticmethod

from_strings(journal: str, issn: str, eissn: str, score: str) -> RelativeImpactFactor

Convert the given data into an RelativeImpactFactor.

The given data is normalized and cleaned up, as appropriate. This function can raise if the data is incorrect (e.g. a non-numeric score).

uvt_scholarly.uefiscdi.rif.parse_relative_impact_factor

parse_relative_impact_factor(filename: Path, version: int) -> tuple[RelativeImpactFactor, ...]

Read RIF scores from the given file.

Parameters:

  • version (int) –

    the year the list in filename was published.

Raises:

uvt_scholarly.uefiscdi.rif.store_relative_impact_factor

store_relative_impact_factor(filename: Path, *, years: set[int] | None = None, force: bool = False) -> None

Download RIF scores for the given years and store them in filename.

Parameters:

  • years (set[int] | None, default: None ) –

    A list of years for which to download the RIF scores. By default, all the years in uvt_scholarly.uefiscdi.UEFISCDI_DATABASE_URL are downloaded.

  • force (bool, default: False ) –

    If True, all documents are re-downloaded (even if cached).

Raises:

Web of Science

uvt_scholarly.wos.WOS_FIELD_TAGS module-attribute

WOS_FIELD_TAGS = {'AB': 'Abstract', 'AF': 'Author Full Name', 'AR': 'Article Number', 'AU': 'Authors', 'BA': 'Book Authors', 'BE': 'Editors', 'BF': 'Book Authors Full Name', 'BN': 'International Standard Book Number (ISBN)', 'BP': 'Beginning Page', 'BS': 'Book Series Subtitle', 'C1': 'Author Address', 'CA': 'Group Authors', 'CL': 'Conference Location', 'CR': 'Cited References', 'CT': 'Conference Title', 'CY': 'Conference Date', 'D2': 'Book Digital Object Identifier (DOI)', 'DE': 'Author Keywords', 'DI': 'Digital Object Identifier (DOI)', 'DT': 'Document Type', 'EF': 'End of File', 'EI': 'Electronic International Standard Serial Number (eISSN)', 'EM': 'E-mail Address', 'EP': 'Ending Page', 'ER': 'End of Record', 'FN': 'File Name', 'FU': 'Funding Agency and Grant Number', 'FX': 'Funding Text', 'GA': 'Document Delivery Number', 'GP': 'Book Group Authors', 'HO': 'Conference Host', 'ID': 'Keywords Plus®', 'IS': 'Issue', 'J9': '29-Character Source Abbreviation', 'JI': 'ISO Source Abbreviation', 'LA': 'Language', 'MA': 'Meeting Abstract', 'NR': 'Cited Reference Count', 'OI': 'ORCID Identifier (Open Researcher and Contributor ID)', 'P2': 'Chapter Count (Book Citation Index)', 'PA': 'Publisher Address', 'PD': 'Publication Date', 'PG': 'Page Count', 'PI': 'Publisher City', 'PM': 'PubMed ID', 'PN': 'Part Number', 'PT': 'Publication Type (J=Journal; B=Book; S=Series; P=Patent)', 'PU': 'Publisher', 'PY': 'Year Published', 'RI': 'ResearcherID Number', 'RP': 'Reprint Address', 'SC': 'Research Areas', 'SE': 'Book Series Title', 'SI': 'Special Issue', 'SN': 'International Standard Serial Number (ISSN)', 'SO': 'Publication Name', 'SP': 'Conference Sponsors', 'SU': 'Supplement', 'TC': 'Web of Science Core Collection Times Cited Count', 'TI': 'Document Title', 'U1': 'Usage Count (Last 180 Days)', 'U2': 'Usage Count (Since 2013)', 'UT': 'Accession Number', 'VL': 'Volume', 'VR': 'Version Number', 'WC': 'Web of Science Categories', 'Z9': 'Total Times Cited Count'}

A list of fields present in the Tab delimited files exported by Web of Science (see the official list of field tags).

uvt_scholarly.wos.PUBLICATION_TYPE module-attribute

Initial of the publication type (as used in the Web of Science exported files) to a PublicationType.

uvt_scholarly.wos.DOCUMENT_TYPE module-attribute

DOCUMENT_TYPE = {'Art Exhibit Review': DocumentType.Review, 'Article': DocumentType.Article, 'Bibliography': DocumentType.Other, 'Biographical-Item': DocumentType.Other, 'Book Chapter': DocumentType.BookChapter, 'Book Review': DocumentType.Review, 'Book': DocumentType.Book, 'Correction': DocumentType.Other, 'Dance Performance Review': DocumentType.Review, 'Data Paper': DocumentType.Dataset, 'Database Review': DocumentType.Review, 'Early Access': DocumentType.Article, 'Editorial Material': DocumentType.Other, 'Excerpt': DocumentType.Other, 'Expression of Concern': DocumentType.Other, 'Fiction, Creative Prose': DocumentType.Other, 'Film Review': DocumentType.Review, 'Hardware Review': DocumentType.Review, 'Item Withdrawal': DocumentType.Other, 'Letter': DocumentType.Other, 'Meeting Abstract': DocumentType.Report, 'Meeting Summary': DocumentType.Report, 'Meeting': DocumentType.Other, 'Music Performance Review': DocumentType.Review, 'Music Score Review': DocumentType.Review, 'Music Score': DocumentType.Other, 'News Item': DocumentType.Other, 'Poetry': DocumentType.Other, 'Proceedings Paper': DocumentType.ProceedingsPaper, 'Publication with Expression of Concern': DocumentType.Other, 'Record Review': DocumentType.Review, 'Reprint': DocumentType.Article, 'Retracted Publication': DocumentType.Article, 'Retraction': DocumentType.Other, 'Review': DocumentType.Review, 'Script': DocumentType.Other, 'Software Review': DocumentType.Review, 'TV Review, Radio Review': DocumentType.Review, 'Theater Review': DocumentType.Review, 'Withdrawn Publication': DocumentType.Article, 'Abstract of Published Item': DocumentType.Other, 'Chronology': DocumentType.Review, 'Discussion': DocumentType.Report, 'Item About an Individual': DocumentType.Review, 'Note': DocumentType.Other, 'TV Review, Radio Review, Video Review': DocumentType.Review}

A list of known Web of Science document types to our own uvt_scholarly.publication.DocumentType.

uvt_scholarly.wos.PublicationType

Bases: Enum

Supported types of publications for the Web of Science exports.

Book class-attribute instance-attribute

Book = enum.auto()

A standard book type.

Conference class-attribute instance-attribute

Conference = enum.auto()

A conference proceeding publication type.

Journal class-attribute instance-attribute

Journal = enum.auto()

A standard journal article type.

Patent class-attribute instance-attribute

Patent = enum.auto()

A publication of type patent.

Preprint class-attribute instance-attribute

Preprint = enum.auto()

A preprint of a journal publication.

Series class-attribute instance-attribute

Series = enum.auto()

A series of publications, e.g. book series or proceedings.

uvt_scholarly.wos.read_from_csv

read_from_csv(filename: Path, *, encoding: str = 'utf-8', delimiter: str = '\t', include_citations: bool = False) -> tuple[Publication, ...]

Read publications from a Web of Science exported CSV file.

In the Web of Science export list, this is called a Tab delimited file. When exporting, it is recommended to use the Full Record option to ensure that all the required fields are available. However, this function only uses the fields required to fill out a uvt_scholarly.publication.Publication.

Parameters:

  • delimiter (str, default: '\t' ) –

    A delimiter to be used when reading the file. This should not be changed, as all exported documents use a TAB delimiter.

  • include_citations (bool, default: False ) –

    If True, we also look for the Cited-References entry for each publication and attempt to parse all the citations.

Returns:

  • tuple[Publication, ...]

    A list of all the publications in the given file. Note that entries that fail to parse for whatever reason (e.g. invalid DOI) are ignored.

uvt_scholarly.wos.read_from_bib

read_from_bib(filename: Path, *, encoding: str = 'utf-8', include_citations: bool = False) -> tuple[Publication, ...]

Read publications from a Web of Science exported BibTeX file.

In the Web of Science export list, this is called a BibTeX. When exporting, it is recommended to use the Full Record option to ensure that all the required fields are available. However, this function only uses the fields required to fill out a uvt_scholarly.publication.Publication.

Info

This function requires the bibtexparser library to read the BibTeX file.

Parameters:

  • include_citations (bool, default: False ) –

    If True, we also look for the Cited-References entry for each publication and attempt to parse all the citations.

Returns:

  • tuple[Publication, ...]

    A list of all the publications in the given file. Note that entries that fail to parse for whatever reason (e.g. invalid DOI) are ignored.

uvt_scholarly.wos.read_pubs

read_pubs(filename: Path, *, encoding: str = 'utf-8', include_citations: bool = False) -> tuple[Publication, ...]

Read a list of publications from a Web of Science exported file.

This function calls to read_from_csv, read_from_bib, etc. as appropriate to read all the entries to the file. The format is determined by the extension of the file.

uvt_scholarly.wos.merge_csv_files

merge_csv_files(filenames: Sequence[Path], outfile: Path, *, overwrite: bool = False) -> None

Merge publications from multiple files into a single file.

This function supports duplicate entries between the files and will remove and such entries. The deduplication is based on the Web of Science ID (UT column).

Parameters:

  • filenames (Sequence[Path]) –

    a list of files to merge.

  • outfile (Path) –

    the file to which the merged entries are written.

  • overwrite (bool, default: False ) –

    If True and outfile exists, it will be overwritten.

Raises:

  • FileExistsError

    if outfile exists and overwrite is False.

  • ValueError

    if the filenames cannot be merged for whatever reason, e.g. columns do not match.

uvt_scholarly.wos.filter_csv_publications

filter_csv_publications(filename: Path, outfile: Path, *, dbfile: Path | None = None, score: ScoreType = RIS, overwrite: bool = False) -> None

Filter out publications from filename.

This function removes publications from filename and writes the result to outfile. Publications are removed if they do not satisfy the following criteria:

  1. Both the ISSN and eISSN need to be valid (or None).
  2. The DOI should be valid.
  3. If dbfile is given, the journals for each publication are searched in an UEFISCDI Database for the chosen score. If it is not in the database, the publication will be removed.

Parameters:

  • filename (Path) –

    An inputs CSV file to filter publications from.

  • outfile (Path) –

    The output CSV file to write the results to.

  • dbfile (Path | None, default: None ) –

    If given, the path to an sqlite3 database for UEFISCDI journal scores (e.g. see store_article_influence_score).

Raises:

  • ValueError

    if the database for score does not exist.

ANZSRC

Support for the Australian and New Zealand Standard Research Classification (ANZSRC).

uvt_scholarly.anzsrc.ANZSRC_FOR_URL module-attribute

ANZSRC_FOR_URL: str = 'https://www.abs.gov.au/statistics/classifications/australian-and-new-zealand-standard-research-classification-anzsrc/2020/anzsrc2020_for.xlsx'

The full URL for the ANZSRC classification. The latest version can be found at the official website.

uvt_scholarly.anzsrc.ANZSRC_CLASSIFICATIONS module-attribute

ANZSRC_CLASSIFICATIONS: dict[int, str] = {30: 'Agricultural, Veterinary and Food Sciences', 3001: 'Agricultural biotechnology', 3002: 'Agriculture, land and farm management', 3003: 'Animal production', 3004: 'Crop and pasture production', 3005: 'Fisheries sciences', 3006: 'Food sciences', 3007: 'Forestry sciences', 3008: 'Horticultural production', 3009: 'Veterinary sciences', 3099: 'Other agricultural, veterinary and food sciences', 31: 'Biological Sciences', 3101: 'Biochemistry and cell biology', 3102: 'Bioinformatics and computational biology', 3103: 'Ecology', 3104: 'Evolutionary biology', 3105: 'Genetics', 3106: 'Industrial biotechnology', 3107: 'Microbiology', 3108: 'Plant biology', 3109: 'Zoology', 3199: 'Other biological sciences', 32: 'Biomedical and Clinical Sciences', 3201: 'Cardiovascular medicine and haematology', 3202: 'Clinical sciences', 3203: 'Dentistry', 3204: 'Immunology', 3205: 'Medical biochemistry and metabolomics', 3206: 'Medical biotechnology', 3207: 'Medical microbiology', 3208: 'Medical physiology', 3209: 'Neurosciences', 3210: 'Nutrition and dietetics', 3211: 'Oncology and carcinogenesis', 3212: 'Ophthalmology and optometry', 3213: 'Paediatrics', 3214: 'Pharmacology and pharmaceutical sciences', 3215: 'Reproductive medicine', 3299: 'Other biomedical and clinical sciences', 33: 'Built Environment and Design', 3301: 'Architecture', 3302: 'Building', 3303: 'Design', 3304: 'Urban and regional planning', 3399: 'Other built environment and design', 34: 'Chemical Sciences', 3401: 'Analytical chemistry', 3402: 'Inorganic chemistry', 3403: 'Macromolecular and materials chemistry', 3404: 'Medicinal and biomolecular chemistry', 3405: 'Organic chemistry', 3406: 'Physical chemistry', 3407: 'Theoretical and computational chemistry', 3499: 'Other chemical sciences', 35: 'Commerce, Management, Tourism and Services', 3501: 'Accounting, auditing and accountability', 3502: 'Banking, finance and investment', 3503: 'Business systems in context', 3504: 'Commercial services', 3505: 'Human resources and industrial relations', 3506: 'Marketing', 3507: 'Strategy, management and organisational behaviour', 3508: 'Tourism', 3509: 'Transportation, logistics and supply chains', 3599: 'Other commerce, management, tourism and services', 36: 'Creative Arts and Writing', 3601: 'Art history, theory and criticism', 3602: 'Creative and professional writing', 3603: 'Music', 3604: 'Performing arts', 3605: 'Screen and digital media', 3606: 'Visual arts', 3699: 'Other creative arts and writing', 37: 'Earth Sciences', 3701: 'Atmospheric sciences', 3702: 'Climate change science', 3703: 'Geochemistry', 3704: 'Geoinformatics', 3705: 'Geology', 3706: 'Geophysics', 3707: 'Hydrology', 3708: 'Oceanography', 3709: 'Physical geography and environmental geoscience', 3799: 'Other earth sciences', 38: 'Economics', 3801: 'Applied economics', 3802: 'Econometrics', 3803: 'Economic theory', 3899: 'Other economics', 39: 'Education', 3901: 'Curriculum and pedagogy', 3902: 'Education policy, sociology and philosophy', 3903: 'Education systems', 3904: 'Specialist studies in education', 3999: 'Other education', 40: 'Engineering', 4001: 'Aerospace engineering', 4002: 'Automotive engineering', 4003: 'Biomedical engineering', 4004: 'Chemical engineering', 4005: 'Civil engineering', 4006: 'Communications engineering', 4007: 'Control engineering, mechatronics and robotics', 4008: 'Electrical engineering', 4009: 'Electronics, sensors and digital hardware', 4010: 'Engineering practice and education', 4011: 'Environmental engineering', 4012: 'Fluid mechanics and thermal engineering', 4013: 'Geomatic engineering', 4014: 'Manufacturing engineering', 4015: 'Maritime engineering', 4016: 'Materials engineering', 4017: 'Mechanical engineering', 4018: 'Nanotechnology', 4019: 'Resources engineering and extractive metallurgy', 4099: 'Other engineering', 41: 'Environmental Sciences', 4101: 'Climate change impacts and adaptation', 4102: 'Ecological applications', 4103: 'Environmental biotechnology', 4104: 'Environmental management', 4105: 'Pollution and contamination', 4106: 'Soil sciences', 4199: 'Other environmental sciences', 42: 'Health Sciences', 4201: 'Allied health and rehabilitation science', 4202: 'Epidemiology', 4203: 'Health services and systems', 4204: 'Midwifery', 4205: 'Nursing', 4206: 'Public health', 4207: 'Sports science and exercise', 4208: 'Traditional, complementary and integrative medicine', 4299: 'Other health sciences', 43: 'History, Heritage and Archaeology', 4301: 'Archaeology', 4302: 'Heritage, archive and museum studies', 4303: 'Historical studies', 4399: 'Other history, heritage and archaeology', 44: 'Human Society', 4401: 'Anthropology', 4402: 'Criminology', 4403: 'Demography', 4404: 'Development studies', 4405: 'Gender studies', 4406: 'Human geography', 4407: 'Policy and administration', 4408: 'Political science', 4409: 'Social work', 4410: 'Sociology', 4499: 'Other human society', 45: 'Indigenous Studies', 4501: 'Aboriginal and Torres Strait Islander culture, language and history', 4502: 'Aboriginal and Torres Strait Islander education', 4503: 'Aboriginal and Torres Strait Islander environmental knowledges and management', 4504: 'Aboriginal and Torres Strait Islander health and wellbeing', 4505: 'Aboriginal and Torres Strait Islander peoples, society and community', 4506: 'Aboriginal and Torres Strait Islander sciences', 4507: 'Te ahurea, reo me te hītori o te Māori (Māori culture, language and history)', 4508: 'Mātauranga Māori (Māori education)', 4509: 'Ngā mātauranga taiao o te Māori (Māori environmental knowledges)', 4510: 'Te hauora me te oranga o te Māori (Māori health and wellbeing)', 4511: 'Ngā tāngata, te porihanga me ngā hapori o te Māori (Māori peoples, society and community)', 4512: 'Ngā pūtaiao Māori (Māori sciences)', 4513: 'Pacific Peoples culture, language and history', 4514: 'Pacific Peoples education', 4515: 'Pacific Peoples environmental knowledges', 4516: 'Pacific Peoples health and wellbeing', 4517: 'Pacific Peoples sciences', 4518: 'Pacific Peoples society and community', 4519: 'Other Indigenous data, methodologies and global Indigenous studies', 4599: 'Other Indigenous studies', 46: 'Information and Computing Sciences', 4601: 'Applied computing', 4602: 'Artificial intelligence', 4603: 'Computer vision and multimedia computation', 4604: 'Cybersecurity and privacy', 4605: 'Data management and data science', 4606: 'Distributed computing and systems software', 4607: 'Graphics, augmented reality and games', 4608: 'Human-centred computing', 4609: 'Information systems', 4610: 'Library and information studies', 4611: 'Machine learning', 4612: 'Software engineering', 4613: 'Theory of computation', 4699: 'Other information and computing sciences', 47: 'Language, Communication and Culture', 4701: 'Communication and media studies', 4702: 'Cultural studies', 4703: 'Language studies', 4704: 'Linguistics', 4705: 'Literary studies', 4799: 'Other language, communication and culture', 48: 'Law and Legal Studies', 4801: 'Commercial law', 4802: 'Environmental and resources law', 4803: 'International and comparative law', 4804: 'Law in context', 4805: 'Legal systems', 4806: 'Private law and civil obligations', 4807: 'Public law', 4899: 'Other law and legal studies', 49: 'Mathematical Sciences', 4901: 'Applied mathematics', 4902: 'Mathematical physics', 4903: 'Numerical and computational mathematics', 4904: 'Pure mathematics', 4905: 'Statistics', 4999: 'Other mathematical sciences', 50: 'Philosophy and Religious Studies', 5001: 'Applied ethics', 5002: 'History and philosophy of specific fields', 5003: 'Philosophy', 5004: 'Religious studies', 5005: 'Theology', 5099: 'Other philosophy and religious studies', 51: 'Physical Sciences', 5101: 'Astronomical sciences', 5102: 'Atomic, molecular and optical physics', 5103: 'Classical physics', 5104: 'Condensed matter physics', 5105: 'Medical and biological physics', 5106: 'Nuclear and plasma physics', 5107: 'Particle and high energy physics', 5108: 'Quantum physics', 5109: 'Space sciences', 5110: 'Synchrotrons and accelerators', 5199: 'Other physical sciences', 52: 'Psychology', 5201: 'Applied and developmental psychology', 5202: 'Biological psychology', 5203: 'Clinical and health psychology', 5204: 'Cognitive and computational psychology', 5205: 'Social and personality psychology', 5299: 'Other psychology'}

A list of codes to the main fields of researched in the ANZSRC.

uvt_scholarly.anzsrc.get_name_from_code

get_name_from_code(code: int | str) -> str

Returns:

  • str

    The full name of a Field of Research based on its code.

uvt_scholarly.anzsrc.parse_research_classification

parse_research_classification(filename: Path) -> dict[int, str]

Construct the [ANZSRC_CLASSIFICATIONS] list.

This function takes the data from ANZSRC_FOR_URL and converts it into a helpful dictionary.

CORE

Support for the Computing Research and Education (CORE) Association of Australasia.

uvt_scholarly.core.CORE_COLLECTION_NAMES module-attribute

CORE_COLLECTION_NAMES = frozenset({'ICORE2026', 'CORE2023', 'CORE2021', 'CORE2020'})

A set of CORE collection names.

uvt_scholarly.core.CORE_COLLECTION_URL module-attribute

CORE_COLLECTION_URL = 'https://portal.core.edu.au/conf-ranks/?search=&by=all&source={source}&sort=atitle&page=1&do=Export'

Download URL for the CORE rankings.

uvt_scholarly.core.EXTRA_CORE_CLASSIFICATIONS module-attribute

EXTRA_CORE_CLASSIFICATIONS: dict[str, str] = {'CSE': 'Computer Systems Engineering'}

Additional CORE classifications not available in ANZSRC.

uvt_scholarly.core.RANK_TO_NAME module-attribute

RANK_TO_NAME = {Rank.S: 'A*', Rank.A: 'A', Rank.B: 'B', Rank.C: 'C', Rank.D: 'D', Rank.Unranked: 'Unranked', Rank.National: 'National', Rank.Published: 'Published', Rank.Multiconference: 'Multiconference'}

A mapping from the Rank enumeration to an appropriate display string.

uvt_scholarly.core.CORE_NAME_TO_RANK module-attribute

CORE_NAME_TO_RANK = {name: rank for rank, name in (RANK_TO_NAME.items())}

A mapping from the CORE rank name to the Rank enumeration.

uvt_scholarly.core.Rank

Bases: Enum

Known ranks from the CORE collections.

S class-attribute instance-attribute

S = enum.auto()

The A* ranking in the CORE collection.

A class-attribute instance-attribute

A = enum.auto()

The A ranking in the CORE collection.

B class-attribute instance-attribute

B = enum.auto()

The B ranking in the CORE collection.

C class-attribute instance-attribute

C = enum.auto()

The C ranking in the CORE collection.

D class-attribute instance-attribute

D = enum.auto()

The D ranking in the CORE collection.

Unranked class-attribute instance-attribute

Unranked = enum.auto()

An unranked conference in the CORE collection.

National class-attribute instance-attribute

National = enum.auto()

A national conference (unranked) in the CORE collection.

Published class-attribute instance-attribute

Published = enum.auto()

A conference with proceedings published in a journal.

Multiconference class-attribute instance-attribute

Multiconference = enum.auto()

An umbrella event with multiple conferences.

uvt_scholarly.core.Conference dataclass

name instance-attribute

name: str

The full name of the conference, as it appears in the CORE collection.

acronym instance-attribute

acronym: str

The acronym of the conference, as it appears in the CORE collection.

source instance-attribute

source: str

The name of the collection the conference classification is from (should be one of CORE_COLLECTION_NAMES).

rank instance-attribute

rank: Rank

The rank of the conference in the CORE collection.

primary_fields instance-attribute

primary_fields: tuple[str, ...]

The code for the primary Field of Research of this conference. Use get_primary_field_name to get a display name for these codes.

identifier instance-attribute

identifier: int

A unique identifier of the conference in the collection source. This is usually the a numeric index into the collection list.

uvt_scholarly.core.get_url_for_collection

get_url_for_collection(collection: str) -> str

Returns:

  • str

    A URL for the given collection that can be used to download the rankings. The download file is usually a CSV file.

uvt_scholarly.core.get_primary_field_name

get_primary_field_name(code: int | str) -> str

A display name for the primary field code of a conference.

uvt_scholarly.core.parse_core_csv

parse_core_csv(filename: Path, *, encoding: str = 'utf-8', delimiter: str = ',') -> tuple[Conference, ...]

Read all the conferences from the collection given in filename.

Parameters:

  • delimiter (str, default: ',' ) –

    The delimiter for the CSV file used by the CORE collections. This should not be modified, as all current collections use a standard command separated file.

Returns:

  • tuple[Conference, ...]

    A sequence of all the conferences in the collection.

Raises:

  • ParsingError

    if some error is encountered during reading the file, e.g. unknown rank for a conference.

Misc

uvt_scholarly.utils.PROJECT_NAME module-attribute

PROJECT_NAME = 'uvt-scholarly'

Default name of the project. Users should query importlib.metadata instead.

uvt_scholarly.utils.UVT_SCHOLARLY_CACHE_DIR module-attribute

UVT_SCHOLARLY_CACHE_DIR = pathlib.Path(platformdirs.user_cache_dir(PROJECT_NAME))

The path used to cache results and intermediate metadata by the library.

uvt_scholarly.utils.ScholarlyError

Bases: Exception

A generic exception raised by this library.

uvt_scholarly.utils.ParsingError

Bases: ScholarlyError

Exception raised while parsing (or reading and validating) an input file.

uvt_scholarly.utils.DownloadError

Bases: ScholarlyError

Exception raised when failing a download.

uvt_scholarly.utils.BlockTimer dataclass

A context manager for timing blocks of code.

    with BlockTimer("my-code-block") as bt:
        # ... do some work ...

    print(bt)

name class-attribute instance-attribute

name: str = 'block'

An identifier used to differentiate the timer.

t_wall class-attribute instance-attribute

t_wall: float = field(init=False)

Total wall time (set after __exit__), obtained from time.perf_counter.

t_proc class-attribute instance-attribute

t_proc: float = field(init=False)

Total process time (set after __exit__), obtained from time.process_time.

t_cpu property

t_cpu: float

Total CPU time, obtained from t_proc / t_wall.