Source code for academic_metrics.factories.abstract_classifier_factory
# abstract_classifier_factory.py
from __future__ import annotations
import logging
import os
from typing import TYPE_CHECKING, Dict
if TYPE_CHECKING:
from academic_metrics.utils.taxonomy_util import Taxonomy
from academic_metrics.AI import AbstractClassifier
from academic_metrics.configs import (
configure_logging,
DEBUG,
)
[docs]
class ClassifierFactory:
"""Factory for creating AbstractClassifier instances.
Attributes:
logger (logging.Logger): Logger for the factory.
taxonomy (Taxonomy): Taxonomy for the classifier.
ai_api_key (str): API key for the classifier.
Methods:
abstract_classifier_factory(
self,
doi_abstract_dict: Dict[str, str],
extra_context: dict | None = None,
pre_classification_model: str | None = None,
classification_model: str | None = None,
theme_model: str | None = None,
) -> AbstractClassifier:
Creates an AbstractClassifier instance.
"""
def __init__(
self,
taxonomy: Taxonomy,
ai_api_key: str,
):
self.logger = configure_logging(
module_name=__name__,
log_file_name="abstract_classifier_factory",
log_level=DEBUG,
)
self.logger.info("Initializing ClassifierFactory")
self.taxonomy: Taxonomy = taxonomy
self.ai_api_key: str = ai_api_key
self.logger.info("ClassifierFactory initialized successfully")
[docs]
def abstract_classifier_factory(
self,
doi_abstract_dict: Dict[str, str],
extra_context: dict | None = None,
pre_classification_model: str | None = "gpt-4o-mini",
classification_model: str | None = "gpt-4o-mini",
theme_model: str | None = "gpt-4o-mini",
) -> AbstractClassifier:
"""Creates an AbstractClassifier instance.
Args:
doi_abstract_dict (Dict[str, str]): Dictionary of DOIs and abstracts.
extra_context (dict | None): Extra context for the classifier.
pre_classification_model (str | None): Pre-classification model for the classifier.
classification_model (str | None): Classification model for the classifier.
theme_model (str | None): Theme model for the classifier.
Returns:
classifier (AbstractClassifier): An AbstractClassifier instance.
"""
self.logger.info("Creating AbstractClassifier")
classifier: AbstractClassifier = AbstractClassifier(
taxonomy=self.taxonomy,
doi_to_abstract_dict=doi_abstract_dict,
api_key=self.ai_api_key,
extra_context=extra_context,
pre_classification_model=pre_classification_model,
classification_model=classification_model,
theme_model=theme_model,
)
self.logger.info("AbstractClassifier created successfully")
return classifier