# Die NLP Pipeline

## Die NLP-Pipeline

### Der Aufbau der Pipeline

Das Laden eines Modells für eine bestimmte Sprache über `spacy.load()` resultiert in einem Objekt vom Typ `Language`. Inhaltlich ist dieses Objekt eine sogenannte *Pipeline*, in der hintereinander unterschiedliche Schritte zur Verarbeitung von Textdaten ausgeführt werden. Das Ergebnis einer Pipeline ist ein Objekt vom Typ `Doc`, was die Ergebnisse des NLP-Prozesses beinhaltet. Die Abbildung unten zeigt eine Beispiel-Pipeline:

![Eine Pipeline in spaCy mit verschiedenen Schritten (Quelle: https://spacy.io/usage/spacy-101)](/files/-Ma-mYBiM-Twoh2OOuA2)

Der folgende Code erstellt eine solche Pipeline und speichert sie auf der Variable `nlp`:

```python
import spacy

# Laden des englischen Modells; gibt eine Pipeline zurück
nlp = spacy.load("en_core_web_sm")
```

Im ersten Schritt importieren wir die spaCy-Bibliothek, damit sie uns überhaupt zur Verfügung steht. Mithilfe des `nlp`-Objekts können wir nun einen Text mithilfe der Pipeline verarbeiten lassen. Der Text durchläuft dabei die unterschiedlichen Schritte, die in der Pipeline definiert sind. Die Pipeline für das kleine englische Modell von oben beinhaltet standardmäßig u. a. die folgenden Komponenten:

| Komponente | Funktion                                                                                                                                     | Modell benötigt? |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| tokenizer  | Zerlegt den Text in Token. Z. B. einzelne Wörter, Satzzeichen oder Sonderzeichen. Immer vorhanden und daher nicht Teil der Pipeline an sich. | Nein             |
| tagger     | Rolle von Wörtern ermitteln (*Part-of-Speech Tagger*)                                                                                        | Ja               |
| parser     | Abhängigkeiten zwischen Wörtern ermitteln (*Dependency Parser*)                                                                              | Ja               |
| ner        | Bennante Entitäten identifizieren (*Named Entity Recognition*)                                                                               | Ja               |
| lemmatizer | Ermitteln der Grundform                                                                                                                      | Ja               |

### Pipeline-Komponenten anzeigen

Wir können jederzeit fragen, welche Komponenten für unsere Pipeline definiert sind:

```python
print(nlp.pipe_names)
# Output: ['tok2vec', 'tagger', 'parser', 'ner', 'attribute_ruler', 'lemmatizer']
```

### Pipeline auf einen Text anwenden

Um die NLP-Pipeline auf einen Text anzuwenden, führen wir das `nlp`-Objekt als Funktion aus:

```python
import spacy

# Load English model
nlp = spacy.load("en_core_web_sm")

# Define the text and store it on a variable
text = "I am looking forward to learning about NLP with spaCy!"

# Run the NLP pipeline and save result on variable 'doc'
doc = nlp(text)
```

Die Variable `doc` beinhaltet nun die Ergebnisse jeder Pipeline-Komponente. In den nächsten Abschnitten schauen wir, wie wir auf die einzelnen Ergebnisse zugreifen können.

### Pipeline-Komponenten deaktivieren

Um kürzere Laufzeiten für unsere NLP-Prozesse zu erreichen, können wir nicht benötige NLP-Komponenten ausschalten, sodass diese nicht ausgeführt werden. Dazu übergeben wir der `nlp()` Funktion eine Liste an Komponenten über das Attribut `disable`:

```python
nlp(text, disable=["ner", "parser"]
```

Alternativ kann auch der folgende Befehl verwendet werden:

```python
nlp.disable_pipe("ner")
```

Um die Komponenten später wieder verwenden zu können, müssen wir sie erneut aktivieren:

```python
nlp.enable_pipe("ner")
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://analytics.datalit.de/sql/text-with-sql/nlp-mit-spacy/die-nlp-pipeline.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
