--- title: "Presidio" id: integrations-presidio description: "Presidio integration for Haystack" slug: "/integrations-presidio" --- ## haystack_integrations.components.extractors.presidio.presidio_entity_extractor ### PresidioEntityExtractor Detects PII entities in Haystack Documents using Microsoft Presidio Analyzer. See [Presidio Analyzer](https://microsoft.github.io/presidio/) for details. Accepts a list of Documents and returns new Documents with detected PII entities stored in each Document's metadata under the key `"entities"`. Each entry in the list contains the entity type, start/end character offsets, and the confidence score. Original Documents are not mutated. Documents without text content are passed through unchanged. The analyzer engine is loaded on the first call to `run()`, or by calling `warm_up()` explicitly beforehand. ### Usage example ```python from haystack import Document from haystack_integrations.components.extractors.presidio import PresidioEntityExtractor extractor = PresidioEntityExtractor() result = extractor.run(documents=[Document(content="Contact Alice at alice@example.com")]) print(result["documents"][0].meta["entities"]) # [{"entity_type": "PERSON", "start": 8, "end": 13, "score": 0.85}, # {"entity_type": "EMAIL_ADDRESS", "start": 17, "end": 34, "score": 1.0}] ``` #### SPACY_DEFAULT_MODELS ```python SPACY_DEFAULT_MODELS: dict[str, str] = _SPACY_DEFAULT_MODELS ``` Mapping from ISO 639-1 language code to the largest available spaCy model for that language. Used to automatically select an NLP model when `models` is not specified. See [spaCy documentation](https://spacy.io/models) for the full list of available spaCy models. #### __init__ ```python __init__( *, language: str = "en", entities: list[str] | None = None, score_threshold: float = 0.35, models: list[dict[str, str]] | None = None ) -> None ``` Initializes the PresidioEntityExtractor. **Parameters:** - **language** (str) – ISO 639-1 language code for PII detection. Defaults to `"en"`. For languages in the built-in mapping (e.g. `"de"`, `"fr"`, `"es"`), the appropriate spaCy model is loaded automatically at warm-up time — no need to set `models`. For unsupported languages, use the `models` parameter to configure a custom model. See [Presidio supported languages](https://microsoft.github.io/presidio/analyzer/languages/). - **entities** (list\[str\] | None) – List of PII entity types to detect (e.g. `["PERSON", "EMAIL_ADDRESS"]`). If `None`, all supported entity types are detected. See [Presidio supported entities](https://microsoft.github.io/presidio/supported_entities/). - **score_threshold** (float) – Minimum confidence score (0-1) for a detected entity to be included. Defaults to `0.35`. See [Presidio analyzer documentation](https://microsoft.github.io/presidio/analyzer/). - **models** (list\[dict\[str, str\]\] | None) – Advanced override: list of spaCy model configurations. Each entry must contain `"lang_code"` and `"model_name"` keys, e.g. `[{"lang_code": "fr", "model_name": "fr_core_news_md"}]`. Use this only when you need a specific model variant or a language not covered by the built-in mapping. If `None`, the model is selected automatically from `SPACY_DEFAULT_MODELS` based on `language`. #### warm_up ```python warm_up() -> None ``` Initializes the Presidio analyzer engine. This method loads the underlying NLP models. In a Haystack Pipeline, this is called automatically before the first run. #### run ```python run(documents: list[Document]) -> dict[str, list[Document]] ``` Detects PII entities in the provided Documents. **Parameters:** - **documents** (list\[Document\]) – List of Documents to analyze for PII entities. **Returns:** - dict\[str, list\[Document\]\] – A dictionary with key `documents` containing Documents with detected entities stored in metadata under the key `"entities"`. ## haystack_integrations.components.preprocessors.presidio.presidio_document_cleaner ### PresidioDocumentCleaner Anonymizes PII in Haystack Documents using [Microsoft Presidio](https://microsoft.github.io/presidio/). Accepts a list of Documents, detects personally identifiable information (PII) in their text content, and returns new Documents with PII replaced by entity type placeholders (e.g. ``, ``). Original Documents are not mutated. Documents without text content are passed through unchanged. The analyzer and anonymizer engines are loaded on the first call to `run()`, or by calling `warm_up()` explicitly beforehand. ### Usage example ```python from haystack import Document from haystack_integrations.components.preprocessors.presidio import PresidioDocumentCleaner cleaner = PresidioDocumentCleaner() result = cleaner.run(documents=[Document(content="My name is John and my email is john@example.com")]) print(result["documents"][0].content) # My name is and my email is ``` #### SPACY_DEFAULT_MODELS ```python SPACY_DEFAULT_MODELS: dict[str, str] = _SPACY_DEFAULT_MODELS ``` Mapping from ISO 639-1 language code to the largest available spaCy model for that language. Used to automatically select an NLP model when `models` is not specified. See [spaCy documentation](https://spacy.io/models) for the full list of available spaCy models. #### __init__ ```python __init__( *, language: str = "en", entities: list[str] | None = None, score_threshold: float = 0.35, models: list[dict[str, str]] | None = None ) -> None ``` Initializes the PresidioDocumentCleaner. **Parameters:** - **language** (str) – ISO 639-1 language code for PII detection. Defaults to `"en"`. For languages in the built-in mapping (e.g. `"de"`, `"fr"`, `"es"`), the appropriate spaCy model is loaded automatically at warm-up time — no need to set `models`. For unsupported languages, use the `models` parameter to configure a custom model. See [Presidio supported languages](https://microsoft.github.io/presidio/analyzer/languages/). - **entities** (list\[str\] | None) – List of PII entity types to detect and anonymize (e.g. `["PERSON", "EMAIL_ADDRESS"]`). If `None`, all supported entity types are used. See [Presidio supported entities](https://microsoft.github.io/presidio/supported_entities/). - **score_threshold** (float) – Minimum confidence score (0-1) for a detected entity to be anonymized. Defaults to `0.35`. See [Presidio analyzer documentation](https://microsoft.github.io/presidio/analyzer/). - **models** (list\[dict\[str, str\]\] | None) – Advanced override: list of spaCy model configurations. Each entry must contain `"lang_code"` and `"model_name"` keys, e.g. `[{"lang_code": "fr", "model_name": "fr_core_news_md"}]`. Use this only when you need a specific model variant or a language not covered by the built-in mapping. If `None`, the model is selected automatically from `SPACY_DEFAULT_MODELS` based on `language`. #### warm_up ```python warm_up() -> None ``` Initializes the Presidio analyzer and anonymizer engines. This method loads the underlying NLP models. In a Haystack Pipeline, this is called automatically before the first run. #### run ```python run(documents: list[Document]) -> dict[str, list[Document]] ``` Anonymizes PII in the provided Documents. **Parameters:** - **documents** (list\[Document\]) – List of Documents whose text content will be anonymized. **Returns:** - dict\[str, list\[Document\]\] – A dictionary with key `documents` containing the cleaned Documents. ## haystack_integrations.components.preprocessors.presidio.presidio_text_cleaner ### PresidioTextCleaner Anonymizes PII in plain strings using [Microsoft Presidio](https://microsoft.github.io/presidio/). Accepts a list of strings, detects personally identifiable information (PII), and returns a new list of strings with PII replaced by entity type placeholders (e.g. ``). Useful for sanitizing user queries before they are sent to an LLM. The analyzer and anonymizer engines are loaded on the first call to `run()`, or by calling `warm_up()` explicitly beforehand. ### Usage example ```python from haystack_integrations.components.preprocessors.presidio import PresidioTextCleaner cleaner = PresidioTextCleaner() result = cleaner.run(texts=["Hi, I am John Smith, call me at 212-555-1234"]) print(result["texts"][0]) # Hi, I am , call me at ``` #### SPACY_DEFAULT_MODELS ```python SPACY_DEFAULT_MODELS: dict[str, str] = _SPACY_DEFAULT_MODELS ``` Mapping from ISO 639-1 language code to the largest available spaCy model for that language. Used to automatically select an NLP model when `models` is not specified. See [spaCy documentation](https://spacy.io/models) for the full list of available spaCy models. #### __init__ ```python __init__( *, language: str = "en", entities: list[str] | None = None, score_threshold: float = 0.35, models: list[dict[str, str]] | None = None ) -> None ``` Initializes the PresidioTextCleaner. **Parameters:** - **language** (str) – ISO 639-1 language code for PII detection. Defaults to `"en"`. For languages in the built-in mapping (e.g. `"de"`, `"fr"`, `"es"`), the appropriate spaCy model is loaded automatically at warm-up time — no need to set `models`. For unsupported languages, use the `models` parameter to configure a custom model. See [Presidio supported languages](https://microsoft.github.io/presidio/analyzer/languages/). - **entities** (list\[str\] | None) – List of PII entity types to detect and anonymize (e.g. `["PERSON", "PHONE_NUMBER"]`). If `None`, all supported entity types are used. See [Presidio supported entities](https://microsoft.github.io/presidio/supported_entities/). - **score_threshold** (float) – Minimum confidence score (0-1) for a detected entity to be anonymized. Defaults to `0.35`. See [Presidio analyzer documentation](https://microsoft.github.io/presidio/analyzer/). - **models** (list\[dict\[str, str\]\] | None) – Advanced override: list of spaCy model configurations. Each entry must contain `"lang_code"` and `"model_name"` keys, e.g. `[{"lang_code": "fr", "model_name": "fr_core_news_md"}]`. Use this only when you need a specific model variant or a language not covered by the built-in mapping. If `None`, the model is selected automatically from `SPACY_DEFAULT_MODELS` based on `language`. #### warm_up ```python warm_up() -> None ``` Initializes the Presidio analyzer and anonymizer engines. This method loads the underlying NLP models. In a Haystack Pipeline, this is called automatically before the first run. #### run ```python run(texts: list[str]) -> dict[str, list[str]] ``` Anonymizes PII in the provided strings. **Parameters:** - **texts** (list\[str\]) – List of strings to anonymize. **Returns:** - dict\[str, list\[str\]\] – A dictionary with key `texts` containing the cleaned strings.