<commit_before>---
title: MediaCategorizer
subtitle: Systemarchitektur
author: <NAME>
creator:
- role: Autor
  name: <NAME>
  affiliation: Fachhochschule Brandenburg
  email: <EMAIL>
version: 0.3.0
date: 30.01.2014
lang: de
...

Dieses Dokument beschreibt die Architektur und Implementierung von *MediaCategorizer*. Es soll Softwareentwicklern helfen die Software zu verstehen und somit eine Anpassung und Erweiterung unterstützen.

# Übersicht
Das Projekt setzt sich aus den folgenden Komponenten zusammen (siehe [#img:architecture]).

* [Hauptprojekt](#mc) *MediaCategorizer*
* [Benutzeroberfläche](#ui) *MediaCategorizer - UI*
* [Spracherkennung](#transcripter) *MediaCategorizer - Transcripter*
* [Analyse und Visualisierung](#distillery) *MediaCategorizer - Distillery*
* [Wortwolkengenerierung](#cloud) *Mastersign Cloud*
* [Medieninspektion](#ffprobe) *FFprobe* (extern)
* [Tonspurextraktion](#ffmpeg) *FFmpeg* (extern)
* [Wellenformvisualisierung](#waveviz) *WaveViz* (extern)

![#img:architecture Übersicht über die Architektur von *MediaCategorizer*][architecture]

Das Hauptprojekt dient als Startpunkt. Es enthält die Dokumentation und eine Anzahl von Scripts zur Automatisierung des Projektes. Durch die Automatisierung werden die folgenden Aktionen unterstützt:

* Download der externen Komponenten *FFmpeg*, *FFprobe* und *WaveViz*
* Erzeugen der Dokumentation im HTML- und DOCX-Format aus den Markdown-Quelldateien
* Klonen der Komponenten-Repositories *UI*, *Transcripter* und *Distillery*
* Kompilieren der Komponenten
* Zusammenstellen eines lauffähigen Programmpakets

Die Benutzeroberfläche ermöglicht das benutzerfreundliche Verwalten von Projekten (Videos, Kategorien, Parameter). Sie ist für die Koordination der Prozessausführung verantwortlich und nutzt die übrigen Komponenten über deren Befehlszeilenschnittstelle.

Die Tonspurextraktion löst aus den Videos die Tonspur heraus und konvertiert sie in ein Format, das von der Komponente zur Wellenformvisualisierung und der Komponente zur Spracherkennung unterstützt wird.

Die Wellenformvisualisierung erzeugt aus der extrahierten Tonspur eine bildliche Darstellung des Tonsignals. Dieses wird in der HTML5-Ausgabe eingebunden und dient der Veranschaulichung der Dynamik des Tonsignals.

Die Spracherkennung steuert die Microsoft Speech API an und speichert die Spracherkennungsergebnisse als Zwischenergebnis in einer EDN-Datei, welche von der Komponente für Analyse und Visualisierung gelesen werden kann.

Die Komponente für Analyse und Visualisierung filtert zunächst die erkannten Worte und bildet anschließend für Videos und Kategorien Worthäufigkeitslisten. Diese werden in Form von Wortwolken visualisiert. Aus den Worthäufigkeitslisten von Videos und Kategorien werden die Übereinstimmungen zwischen Videos und Kategorien berechnet. Aus den Übereinstimmungen werden dann Zuordnungen zwischen Videos und Kategorien abgeleitet. Die Ergebnisse (einschließlich der erkannten Worte mit ihren Erkennungssicherheiten) werden in Form einer XML-Datei gespeichert.  Zusätzlich werden die Volltexte der einzelnen Videos als Reintext gespeichert. Abschließend wird eine statische HTML5-Webseite generiert welche alle Ergebnisse visuell aufbereitet darstellt, die Original-Videodateien einbindet und eine interaktive Navigation zwischen den Analyseergebnissen erlaubt. Diese Webseite kann sowohl lokal gespeichert und direkt mit einem Browser betrachtet werden, sie kann aber auch mit Hilfe eines Webservers gehostet und so über das Internet verfügbar gemacht werden. 

# Entwicklungsumgebung
MediaCategorizer wurde mit C# in Visual Studio 2013 und Clojure in LightTable 0.5 implementiert. Deshalb benötigt das Projekt sowohl die Microsoft .NET Laufzeitumgebung als auch die Java Laufzeitumgebung. C# wurden gewählt, weil es mit der WPF-Bibliothek eine schnelle Entwicklung der Benutzeroberfläche und durch die .NET-Schnittstelle eine einfache Anbindung an die Microsoft Speech API ermöglicht. Clojure wurde gewählt, weil das funktionale Programmierparadigma, die komfortablen Bibliotheken für Webseitenerzeugung und die interaktive Entwicklungsumgebung (REPL) eine schnelle Umsetzung der Analyse und Visualisierung ermöglichen. Für die Projektautomatisierung wird die Microsoft PowerShell eingesetzt.

## Voraussetzungen

* Microsoft Windows 7 Professional/Enterprise mit Service Pack 1 oder höher
* [Git][git]
* [Microsoft PowerShell 3][ps3] oder höher (in Windows 8 bereits enthalten)
* [pandoc 1.12][pandoc] oder höher  
  _(für das Generieren der Dokumentation aus den Markdown-Quellen erforderlich)_
* [Microsoft .NET Framework 4.5][clr] oder höher (in Windows 8 bereits enthalten)
* [Microsoft Visual Studio 2012][vs] oder höher  
  _(für die Anpassung oder Weiterentwicklung von MediaCategorizer oder Transcripter erforderlich)_
* [Java Development Kit 7][jdk] oder höher

# Komponenten
In den folgenden Abschnitten werden die einzelnen Komponenten detailliert beschrieben.

## Hauptprojekt {#mc}
**Projektname:** MediaCategorizer  
**Repository:** <https://github.com/mastersign/mediacategorizer/>  
**Verzeichnis:** `/`  

### Merkmale

* Einstiegspunkt
* Dokumentation
* Skripte für das Bauen des Projektes

### Setup

1. Installieren der [Voraussetzungen](#voraussetzungen)

	Für das Kompilieren der Komponenten müssen mindestens .NET 4.5, JDK 7 und PowerShell 3 installiert sein. Für das Erzeugen der Projektdokumentation in HTML und DOCX müssen mindestens PowerShell 3 und pandoc installiert sein.

2. Klonen des Hauptprojektes in ein lokales Repository

	Befehlszeile mit git in `PATH` öffnen und `> git clone https://github.com/mastersign/mediacategorizer.git D:\MediaCategorizer` ausführen.
	Der Pfad `D:\MediaCategorizer` kann bei Bedarf angepasst werden.
 
4. Erzeugen der Projektdokumentation in HTML und DOCX

	In das Verzeichnis `auto` wechseln und die Windows-Batch-Datei `transform-all-documents.bat` ausführen.
	Der Vorgang wird in der Datei `transform-all-documents.log` protokolliert.

	War die Ausführung des Skripts erfolgreich, wurden für jede Markdown-Datei aus dem Verzeichnis `docs` je eine HTML-Datei und eine DOCX-Datei im Verzeichnis `docs\out` erzeugt. Für die HTML-Dateien wurde zusätzlich das Verzeichnis `docs\images` nach `docs\out\images` kopiert.

3. Herunterladen der externen Programme, klonen der Komponenten-Repositories, bauen der Komponenten

	In das Verzeichnis `auto` wechseln und die Windows-Batch-Datei `update-build-release.bat` ausführen.
	Der Vorgang wird in der Datei `update-build-release.log` protokolliert.

	Die einzelnen Schritte `Update-Tools.ps1`, `Update-Components.ps1`, `Build-Project.ps1` und `Create-Release.sp1` können auch einzeln ausgeführt werden. Es muss aber berücksichtigt werden, dass die Ausführungsrichtlinie der PowerShell von `Restricted` auf `RemoteSigned` oder `Unrestricted` gesetzt werden muss. Dazu muss die PowerShell mit Administrationsrechten gestartet werden und der Befehl `> Set-ExecutionPolicy RemoteSigned -Force` ausgeführt werden.

	War die Ausführung des Skripts erfolgreich, wurde im Verzeichnis `release` ein vollständiges Paket mit MediaCategorizer und allen erforderlichen Abhängigkeiten zusammengestellt.

	Um MediaCategorizer in Betrieb zu nehmen sind die Anweisungen im [Benutzerhandbuch][handbook] Abschnitt *Installation* zu beachten.

## Benutzeroberfläche {#ui}
**Projektname:** MediaCategorizer - UI  
**Repository:** <https://github.com/mastersign/mediacategorizer-ui/>  
**Verzeichnis:** `/components/MediaCategorizer`  
**Projekt-Typ:** Microsoft Visual Studio  
**Programmiersprache:** C# 5.0  
**Plattform, Bibliotheken:** .NET 4.5, WPF, Xceed WPF-Toolkit, Windows API CodePack  

### Merkmale

* Einfache Bedienung
* Verwaltung eines Projektes (Videos, Kategorien, Parameter)
* Ansteuerung von FFmpeg, WaveViz, Transcripter und Distillery über die Befehlszeile
* Überwachung der Prozessausführung

### Architektur

Der Quellcode der Benutzeroberfläche teilt sich in die folgenden Namensräume auf (siehe [#img:ui-ns]).

![#img:ui-ns Namesräume der Benutzeroberfläche][ui-ns]

#### `de.fhb.oll.mediacategorizer`

Dieser Namensraum enthält die `App`-Klasse welche den Programmstart initiiert, das Hauptfenster `MainWindow` und die verschiedenen Seiten `Page*` (siehe [#img:ui-ui]). 

![#img:ui-ui Die Klassen des Hauptfensters und der Seiten][ui-ui]

#### `de.fhb.oll.mediacategorizer.edn`

Dieser Namensraum enthält die Schnittstelle `IEdnWritable` und einige Hilfsklassen für das Erzeugen von EDN-Dateien.  

#### `de.fhb.oll.mediacategorizer.model`

Dieser Namensraum enthält die Domain-Modell-Klassen `Project`, `Category`, `Media`, `Configuration` und alle Klassen die für deren Definition benötigt werden (siehe [#img:project] und [#img:configuration]).

![#img:project Das Domain-Modell für ein Projekt][ui-project]

![#img:configuration Das Domain-Modell für die Projektparameter][ui-configuration]

Die Klassen in diesem Namensraum wird in der Datei `Model.xml` definiert und durch den Codegenerator *Scaleton* in der Datei `Model.Designer.cs` implementiert. Einige der generierten Klassen werden in eigenen Dateien um zusätzliche Funktionalität ergänzt. Die Schnittstelle `IEdnWritable` wird für alle Modell-Klassen in der Datei `EDN.cs` implementiert.

#### `de.fhb.oll.mediacategorizer.processing`

Dieser Namensraum enthält die Klassen für die verschiedenen Prozessschritte. Jeder Prozessschritt wird durch eine Klasse realisiert, welche die Schnittstelle `IProcess` implementiert (siehe [#img:ui-iprocess]). Zur Vereinfachung der Implementierung wurden gemeinsame Aspekte der Prozessschritte in den Basisklassen `ProcessBase` und `MultiTaskProcessBase` zusammengefasst (siehe [#img:process]). 

![#img:iprocess Die Schnittstelle für Prozessschritte][ui-iprocess]

![#img:process Die Basisklassen der Prozessschritte][ui-process]

Die Klasse `ProcessChain` verwaltet den gesamten Prozess und übernimmt das Starten der Prozessschritte, wenn deren Vorgänger im Prozess erfolgreich abgeschlossen wurden (siehe [#img:ui-process-chain]). 

![#img:process-chain Die zentrale Steuerung für den Prozess][ui-process-chain]

#### `de.fhb.oll.mediacategorizer.tools`

Dieser Namensraum enthält die Steuerklassen für die Komponenten, die über eine Befehlszeilenschnittstelle angesteuert werden. Die Steuerklassen sind von der gemeinsamen Basisklasse `ToolBase` abgeleitet (siehe [#img:ui-tool-base]).

* `ToolFfprobe` (siehe [#img:ui-tool-ffprobe])
* `ToolFfmpeg` (siehe [#img:ui-tool-ffmpeg])
* `ToolWaveViz` (siehe [#img:ui-tool-waveviz])
* `ToolTranscripter` (siehe [#img:ui-tool-transcripter])
* `ToolDistillery` (siehe [#img:ui-tool-distillery])

Die Steuerklassen sind für das asynchrone Verarbeiten der Komponentenausgaben verantwortlich. Die Ausgaben enthalten dabei sowohl Fortschrittsinformationen als auch Ergebnisdaten.

![#img:tool-base Die Basisklasse der Steuerklassen für Komponenten][ui-tool-base]

![#img:tool-ffprobe Die Steuerklasse für FFprobe][ui-tool-ffprobe]

![#img:tool-ffmpeg Die Steuerklasse für FFmpeg][ui-tool-ffmpeg]

![#img:tool-waveviz Die Steuerklasse für WaveViz][ui-tool-waveviz]

![#img:tool-transcripter Die Steuerklasse für Transcripter][ui-tool-transcripter]

![#img:tool-distillery Die Steuerklasse für Distillery][ui-tool-distillery]

#### `de.fhb.oll.mediacategorizer.settings`
<commit_msg>Bildverweise korrigiert<commit_after>---
title: MediaCategorizer
subtitle: Systemarchitektur
author: <NAME>
creator:
- role: Autor
  name: <NAME>
  affiliation: Fachhochschule Brandenburg
  email: <EMAIL>
version: 0.3.0
date: 30.01.2014
lang: de
...

Dieses Dokument beschreibt die Architektur und Implementierung von *MediaCategorizer*. Es soll Softwareentwicklern helfen die Software zu verstehen und somit eine Anpassung und Erweiterung unterstützen.

# Übersicht
Das Projekt setzt sich aus den folgenden Komponenten zusammen (siehe [#img:architecture]).

* [Hauptprojekt](#mc) *MediaCategorizer*
* [Benutzeroberfläche](#ui) *MediaCategorizer - UI*
* [Spracherkennung](#transcripter) *MediaCategorizer - Transcripter*
* [Analyse und Visualisierung](#distillery) *MediaCategorizer - Distillery*
* [Wortwolkengenerierung](#cloud) *Mastersign Cloud*
* [Medieninspektion](#ffprobe) *FFprobe* (extern)
* [Tonspurextraktion](#ffmpeg) *FFmpeg* (extern)
* [Wellenformvisualisierung](#waveviz) *WaveViz* (extern)

![#img:architecture Übersicht über die Architektur von *MediaCategorizer*][architecture]

Das Hauptprojekt dient als Startpunkt. Es enthält die Dokumentation und eine Anzahl von Scripts zur Automatisierung des Projektes. Durch die Automatisierung werden die folgenden Aktionen unterstützt:

* Download der externen Komponenten *FFmpeg*, *FFprobe* und *WaveViz*
* Erzeugen der Dokumentation im HTML- und DOCX-Format aus den Markdown-Quelldateien
* Klonen der Komponenten-Repositories *UI*, *Transcripter* und *Distillery*
* Kompilieren der Komponenten
* Zusammenstellen eines lauffähigen Programmpakets

Die Benutzeroberfläche ermöglicht das benutzerfreundliche Verwalten von Projekten (Videos, Kategorien, Parameter). Sie ist für die Koordination der Prozessausführung verantwortlich und nutzt die übrigen Komponenten über deren Befehlszeilenschnittstelle.

Die Tonspurextraktion löst aus den Videos die Tonspur heraus und konvertiert sie in ein Format, das von der Komponente zur Wellenformvisualisierung und der Komponente zur Spracherkennung unterstützt wird.

Die Wellenformvisualisierung erzeugt aus der extrahierten Tonspur eine bildliche Darstellung des Tonsignals. Dieses wird in der HTML5-Ausgabe eingebunden und dient der Veranschaulichung der Dynamik des Tonsignals.

Die Spracherkennung steuert die Microsoft Speech API an und speichert die Spracherkennungsergebnisse als Zwischenergebnis in einer EDN-Datei, welche von der Komponente für Analyse und Visualisierung gelesen werden kann.

Die Komponente für Analyse und Visualisierung filtert zunächst die erkannten Worte und bildet anschließend für Videos und Kategorien Worthäufigkeitslisten. Diese werden in Form von Wortwolken visualisiert. Aus den Worthäufigkeitslisten von Videos und Kategorien werden die Übereinstimmungen zwischen Videos und Kategorien berechnet. Aus den Übereinstimmungen werden dann Zuordnungen zwischen Videos und Kategorien abgeleitet. Die Ergebnisse (einschließlich der erkannten Worte mit ihren Erkennungssicherheiten) werden in Form einer XML-Datei gespeichert.  Zusätzlich werden die Volltexte der einzelnen Videos als Reintext gespeichert. Abschließend wird eine statische HTML5-Webseite generiert welche alle Ergebnisse visuell aufbereitet darstellt, die Original-Videodateien einbindet und eine interaktive Navigation zwischen den Analyseergebnissen erlaubt. Diese Webseite kann sowohl lokal gespeichert und direkt mit einem Browser betrachtet werden, sie kann aber auch mit Hilfe eines Webservers gehostet und so über das Internet verfügbar gemacht werden. 

# Entwicklungsumgebung
MediaCategorizer wurde mit C# in Visual Studio 2013 und Clojure in LightTable 0.5 implementiert. Deshalb benötigt das Projekt sowohl die Microsoft .NET Laufzeitumgebung als auch die Java Laufzeitumgebung. C# wurden gewählt, weil es mit der WPF-Bibliothek eine schnelle Entwicklung der Benutzeroberfläche und durch die .NET-Schnittstelle eine einfache Anbindung an die Microsoft Speech API ermöglicht. Clojure wurde gewählt, weil das funktionale Programmierparadigma, die komfortablen Bibliotheken für Webseitenerzeugung und die interaktive Entwicklungsumgebung (REPL) eine schnelle Umsetzung der Analyse und Visualisierung ermöglichen. Für die Projektautomatisierung wird die Microsoft PowerShell eingesetzt.

## Voraussetzungen

* Microsoft Windows 7 Professional/Enterprise mit Service Pack 1 oder höher
* [Git][git]
* [Microsoft PowerShell 3][ps3] oder höher (in Windows 8 bereits enthalten)
* [pandoc 1.12][pandoc] oder höher  
  _(für das Generieren der Dokumentation aus den Markdown-Quellen erforderlich)_
* [Microsoft .NET Framework 4.5][clr] oder höher (in Windows 8 bereits enthalten)
* [Microsoft Visual Studio 2012][vs] oder höher  
  _(für die Anpassung oder Weiterentwicklung von MediaCategorizer oder Transcripter erforderlich)_
* [Java Development Kit 7][jdk] oder höher

# Komponenten
In den folgenden Abschnitten werden die einzelnen Komponenten detailliert beschrieben.

## Hauptprojekt {#mc}
**Projektname:** MediaCategorizer  
**Repository:** <https://github.com/mastersign/mediacategorizer/>  
**Verzeichnis:** `/`  

### Merkmale

* Einstiegspunkt
* Dokumentation
* Skripte für das Bauen des Projektes

### Setup

1. Installieren der [Voraussetzungen](#voraussetzungen)

	Für das Kompilieren der Komponenten müssen mindestens .NET 4.5, JDK 7 und PowerShell 3 installiert sein. Für das Erzeugen der Projektdokumentation in HTML und DOCX müssen mindestens PowerShell 3 und pandoc installiert sein.

2. Klonen des Hauptprojektes in ein lokales Repository

	Befehlszeile mit git in `PATH` öffnen und `> git clone https://github.com/mastersign/mediacategorizer.git D:\MediaCategorizer` ausführen.
	Der Pfad `D:\MediaCategorizer` kann bei Bedarf angepasst werden.
 
4. Erzeugen der Projektdokumentation in HTML und DOCX

	In das Verzeichnis `auto` wechseln und die Windows-Batch-Datei `transform-all-documents.bat` ausführen.
	Der Vorgang wird in der Datei `transform-all-documents.log` protokolliert.

	War die Ausführung des Skripts erfolgreich, wurden für jede Markdown-Datei aus dem Verzeichnis `docs` je eine HTML-Datei und eine DOCX-Datei im Verzeichnis `docs\out` erzeugt. Für die HTML-Dateien wurde zusätzlich das Verzeichnis `docs\images` nach `docs\out\images` kopiert.

3. Herunterladen der externen Programme, klonen der Komponenten-Repositories, bauen der Komponenten

	In das Verzeichnis `auto` wechseln und die Windows-Batch-Datei `update-build-release.bat` ausführen.
	Der Vorgang wird in der Datei `update-build-release.log` protokolliert.

	Die einzelnen Schritte `Update-Tools.ps1`, `Update-Components.ps1`, `Build-Project.ps1` und `Create-Release.sp1` können auch einzeln ausgeführt werden. Es muss aber berücksichtigt werden, dass die Ausführungsrichtlinie der PowerShell von `Restricted` auf `RemoteSigned` oder `Unrestricted` gesetzt werden muss. Dazu muss die PowerShell mit Administrationsrechten gestartet werden und der Befehl `> Set-ExecutionPolicy RemoteSigned -Force` ausgeführt werden.

	War die Ausführung des Skripts erfolgreich, wurde im Verzeichnis `release` ein vollständiges Paket mit MediaCategorizer und allen erforderlichen Abhängigkeiten zusammengestellt.

	Um MediaCategorizer in Betrieb zu nehmen sind die Anweisungen im [Benutzerhandbuch][handbook] Abschnitt *Installation* zu beachten.

## Benutzeroberfläche {#ui}
**Projektname:** MediaCategorizer - UI  
**Repository:** <https://github.com/mastersign/mediacategorizer-ui/>  
**Verzeichnis:** `/components/MediaCategorizer`  
**Projekt-Typ:** Microsoft Visual Studio  
**Programmiersprache:** C# 5.0  
**Plattform, Bibliotheken:** .NET 4.5, WPF, Xceed WPF-Toolkit, Windows API CodePack  

### Merkmale

* Einfache Bedienung
* Verwaltung eines Projektes (Videos, Kategorien, Parameter)
* Ansteuerung von FFmpeg, WaveViz, Transcripter und Distillery über die Befehlszeile
* Überwachung der Prozessausführung

### Architektur

Der Quellcode der Benutzeroberfläche teilt sich in die folgenden Namensräume auf (siehe [#img:ui-ns]).

![#img:ui-ns Namesräume der Benutzeroberfläche][ui-ns]

#### `de.fhb.oll.mediacategorizer`

Dieser Namensraum enthält die `App`-Klasse welche den Programmstart initiiert, das Hauptfenster `MainWindow` und die verschiedenen Seiten `Page*` (siehe [#img:ui-ui]). 

![#img:ui-ui Die Klassen des Hauptfensters und der Seiten][ui-ui]

#### `de.fhb.oll.mediacategorizer.edn`

Dieser Namensraum enthält die Schnittstelle `IEdnWritable` und einige Hilfsklassen für das Erzeugen von EDN-Dateien.  

#### `de.fhb.oll.mediacategorizer.model`

Dieser Namensraum enthält die Domain-Modell-Klassen `Project`, `Category`, `Media`, `Configuration` und alle Klassen die für deren Definition benötigt werden (siehe [#img:ui-project] und [#img:ui-configuration]).

![#img:ui-project Das Domain-Modell für ein Projekt][ui-project]

![#img:ui-configuration Das Domain-Modell für die Projektparameter][ui-configuration]

Die Klassen in diesem Namensraum wird in der Datei `Model.xml` definiert und durch den Codegenerator *Scaleton* in der Datei `Model.Designer.cs` implementiert. Einige der generierten Klassen werden in eigenen Dateien um zusätzliche Funktionalität ergänzt. Die Schnittstelle `IEdnWritable` wird für alle Modell-Klassen in der Datei `EDN.cs` implementiert.

#### `de.fhb.oll.mediacategorizer.processing`

Dieser Namensraum enthält die Klassen für die verschiedenen Prozessschritte. Jeder Prozessschritt wird durch eine Klasse realisiert, welche die Schnittstelle `IProcess` implementiert (siehe [#img:ui-iprocess]). Zur Vereinfachung der Implementierung wurden gemeinsame Aspekte der Prozessschritte in den Basisklassen `ProcessBase` und `MultiTaskProcessBase` zusammengefasst (siehe [#img:ui-process]). 

![#img:ui-iprocess Die Schnittstelle für Prozessschritte][ui-iprocess]

![#img:ui-process Die Basisklassen der Prozessschritte][ui-process]

Die Klasse `ProcessChain` verwaltet den gesamten Prozess und übernimmt das Starten der Prozessschritte, wenn deren Vorgänger im Prozess erfolgreich abgeschlossen wurden (siehe [#img:ui-process-chain]). 

![#img:ui-process-chain Die zentrale Steuerung für den Prozess][ui-process-chain]

#### `de.fhb.oll.mediacategorizer.tools`

Dieser Namensraum enthält die Steuerklassen für die Komponenten, die über eine Befehlszeilenschnittstelle angesteuert werden. Die Steuerklassen sind von der gemeinsamen Basisklasse `ToolBase` abgeleitet (siehe [#img:ui-tool-base]).

* `ToolFfprobe` (siehe [#img:ui-tool-ffprobe])
* `ToolFfmpeg` (siehe [#img:ui-tool-ffmpeg])
* `ToolWaveViz` (siehe [#img:ui-tool-waveviz])
* `ToolTranscripter` (siehe [#img:ui-tool-transcripter])
* `ToolDistillery` (siehe [#img:ui-tool-distillery])

Die Steuerklassen sind für das asynchrone Verarbeiten der Komponentenausgaben verantwortlich. Die Ausgaben enthalten dabei sowohl Fortschrittsinformationen als auch Ergebnisdaten.

![#img:ui-tool-base Die Basisklasse der Steuerklassen für Komponenten][ui-tool-base]

![#img:ui-tool-ffprobe Die Steuerklasse für FFprobe][ui-tool-ffprobe]

![#img:ui-tool-ffmpeg Die Steuerklasse für FFmpeg][ui-tool-ffmpeg]

![#img:ui-tool-waveviz Die Steuerklasse für WaveViz][ui-tool-waveviz]

![#img:ui-tool-transcripter Die Steuerklasse für Transcripter][ui-tool-transcripter]

![#img:ui-tool-distillery Die Steuerklasse für Distillery][ui-tool-distillery]

#### `de.fhb.oll.mediacategorizer.settings`

{'fraction_non_alphanumeric': 0.075716174526223, 'fraction_numerical': 0.004583516967827237, 'mean_word_length': 6.122096672944131, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 17, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4520934', 'n_tokens_mistral': 7649, 'n_tokens_neox': 7773, 'n_words': 2349}