Skip to content
Snippets Groups Projects
detection.py 4.55 KiB
Newer Older
Michał Pogoda's avatar
Michał Pogoda committed
"""Module containg definions of simple detection types."""

from dataclasses import dataclass
from typing import Optional
@dataclass
Michał Pogoda's avatar
Michał Pogoda committed
    """Interface for detections.

    Should be used as base class for all detections.
    It should not be used directly. For other detections see: OtherDetection class
    """

    TYPE_NAME = "detection"
Michał Pogoda's avatar
Michał Pogoda committed
    def __hash__(self) -> int:
Michał Pogoda's avatar
Michał Pogoda committed
        """Hash function for detection."""
Michał Pogoda's avatar
Michał Pogoda committed
        return (type(self), *(self.__dict__.values())).__hash__()
Michał Pogoda's avatar
Michał Pogoda committed
class MorphosyntacticInfoMixin:
Michał Pogoda's avatar
Michał Pogoda committed
    """Mixin for detections with morphosyntactic information.

    Eg. detection of "Rolexes" can be thought of as "Rolex"
        with morphosyntactic tag "NNS" (noun, plural).
    """

    def __init__(
        self,
        morpho_tag: Optional[str] = None,
        lemma: Optional[str] = None,
        *args,
        **kwargs
    ) -> None:
Michał Pogoda's avatar
Michał Pogoda committed
        """Initialization of MorphosyntacticInfoMixin.

        Args:
            morpho_tag (str): Morphosyntactic tag of detection, eg. "NNS",
                "sg:nom:m1" etc.
            lemma (str): Lemma of detection, eg. "Rolex", "Warszawa" etc.
Michał Pogoda's avatar
Michał Pogoda committed

        """
Michał Pogoda's avatar
Michał Pogoda committed
        super().__init__(*args, **kwargs)
        self._morpho_tag = morpho_tag
Michał Pogoda's avatar
Michał Pogoda committed
    @property
    def morpho_tag(self) -> str:
Michał Pogoda's avatar
Michał Pogoda committed
        """Morphosyntactic tag of detection."""
Michał Pogoda's avatar
Michał Pogoda committed
        return self._morpho_tag
    @property
    def lemma(self) -> str:
        """Lemma of detection."""
        return self._lemma

class NameDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing name detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "John", "Mark"
    """

    TYPE_NAME = "name"
class SurnameDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing surname detection.

    Eg.: "Smith", "Johnson"
    """
Michał Pogoda's avatar
Michał Pogoda committed
    TYPE_NAME = "surname"
class LocationDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing location detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "Park Narodowy Białowieski", "Tatry"
    """

    TYPE_NAME = "location"
class OrganizationNameDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class for organization name detection.

    Eg.: "Apple", "Microsoft"
    """
Michał Pogoda's avatar
Michał Pogoda committed
    TYPE_NAME = "organization_name"
class ProperNameDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing proper name detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "Rolex"
    """

    TYPE_NAME = "proper_name"
class TitleDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing title detection.

    Eg.: "Fast and Furious", "The Lord of the Rings"
    """
Michał Pogoda's avatar
Michał Pogoda committed
    TYPE_NAME = "title"
class HydronymDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing hydronym detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "Wisła", "Odra"
    """

    TYPE_NAME = "hydronym"
class StreetNameDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing street name detection.

    Eg.: "Marszałkowska", "Kościuszki"
    """
Michał Pogoda's avatar
Michał Pogoda committed
    TYPE_NAME = "street_name"
class CityDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing city detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "Warsaw", "Berlin"
    """

    TYPE_NAME = "city"
class CountryDetection(MorphosyntacticInfoMixin, Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing country detection.

    Eg.: "Poland", "Germany"
    """
Michał Pogoda's avatar
Michał Pogoda committed
    TYPE_NAME = "country"
Michał Pogoda's avatar
Michał Pogoda committed
    """Class for url detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "https://www.google.com", "www.google.com"
    """

    TYPE_NAME = "url"
Michał Pogoda's avatar
Michał Pogoda committed
    """Class for user detection.

    Eg.: "@bob25", "@angelica111"
    """
Michał Pogoda's avatar
Michał Pogoda committed
    TYPE_NAME = "user"
Michał Pogoda's avatar
Michał Pogoda committed
    """Class representing email detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: bob@gmail.com
    """

    TYPE_NAME = "email"
Michał Pogoda's avatar
Michał Pogoda committed
class NumberDetection(Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class for number detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "123", "123.456"
    """

    TYPE_NAME = "number"
Michał Pogoda's avatar
Michał Pogoda committed
class PhoneNumberDetection(NumberDetection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Class for phone number detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "123-456-789", "+49 123 456 789"
    """

    TYPE_NAME = "phone_number"
Michał Pogoda's avatar
Michał Pogoda committed


class TINDetection(Detection):  # Tax Identification Number
Michał Pogoda's avatar
Michał Pogoda committed
    """Class for NIP (Tax Identification Number) detection.

    Eg.: "123-456-32-18", "1234563218"
    """
Michał Pogoda's avatar
Michał Pogoda committed
    TYPE_NAME = "tin"
Michał Pogoda's avatar
Michał Pogoda committed


class KRSDetection(Detection):  # National Court Register
Michał Pogoda's avatar
Michał Pogoda committed
    """Class for KRS (National Court Register) number detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "0000000123"
    """

    TYPE_NAME = "krs"
class SerialNumberDetection(Detection):
Michał Pogoda's avatar
Michał Pogoda committed
    """Serial number detection.
Michał Pogoda's avatar
Michał Pogoda committed
    Eg.: "AB1234567890"
    """

    TYPE_NAME = "serial_number"
Michał Pogoda's avatar
Michał Pogoda committed
class OtherDetection(Detection):  # Non standard entity
Michał Pogoda's avatar
Michał Pogoda committed
    """Detection of an entity that does not fit into other categories."""
Michał Pogoda's avatar
Michał Pogoda committed
    TYPE_NAME = "other"