\subsection{Postprocessing}
\label{algorithmen_postprocessing}

Die extrahierten Textdaten aus den verarbeiteten Bilddaten werden später in einer schlagwortbasierten Suchfunktion verwendet. Um Redundanz innerhalb des Datensets zu reduzieren und falsch erkannte Ergebnisdaten zu verhindern, müssen die Ergebnisdaten der Texterkennung im Rahmen des Postprocessings weiterverarbeitet werden.

\subsubsection{Filterung anhand der Genauigkeit}
\label{algorithmen_confidence}

Tesseract stellt im Rahmen der Texterkennung neben den erkannten Texten auch die jeweiligen Metadaten zur Verfügung. Auch die geschätzte Genauigkeit (\engl{Confidence}) wird für jedes erkannte Wort mit angegeben. Sie bestimmt, mit welcher Sicherheit ein Texterkennungssystem das jeweilige Wort erkannt hat, wobei Wörter mit hoher Confidence eher richtig, mit niedriger Confidence eher falsch erkannt wurden. 

Wie in \autoref{fig:screenshot_postprocessing_confidence} gezeigt, prüft der Confidence-Filter die jeweiligen Wörter auf ihre Metadaten und verwirft jene, deren Confidence unter einem fixen Schwellenwert liegt. Je nach Einstellung \bzw "Härte" des Filters wird die Anzahl der falsch erkannten Inhalte innerhalb der Schlagwortmenge drastisch reduziert. Ist der Filter zu streng eingestellt, werden jedoch insgesamt weniger Worte in die Ergebnisse mit aufgenommen und es kann vorkommen, dass auch ursprünglich korrekt erkannte Wörter aufgrund eines niedrigen Confidence-Wertes verworfen werden.

\begin{figure}[ht]
  \centering
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/source.detailed.json}
  \end{minipage}
  \hfill
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/confidence.detailed.json}
  \end{minipage}
  \caption{Auszug aus den Ergebnisdaten der Texterkennung aus \ref{fig:screenshot_postprocessing} nach der Confidence-Filterung. Alle Wörter unter dem Schwellenwert werden entfernt.}
  \label{fig:screenshot_postprocessing_confidence}
\end{figure}

\subsubsection{Normalisierung}
\label{algorithmen_normalisierung}

Um die aus der Texterkennung gewonnenen Daten zunächst für die weitere Filterung vorzubereiten, ist es sinnvoll, die Redundanz der Daten möglichst zu reduzieren und die einzelnen Wörter zu normalisieren \bzw zu standardisieren. Beispielsweise kann durch das Umwandeln aller Textdaten in Kleinbuchstaben die Variation der Daten eingeschränkt werden, ohne jedoch für die Suche relevante Information zu verlieren. Diese Methode wurd auch in \autoref{fig:screenshot_postprocessing_normalisierung} angewandt.

\begin{figure}[ht]
  \centering
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/confidence.json}
  \end{minipage}
  \hfill
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/normalize.json}
  \end{minipage}
  \caption{Auszug aus den Ergebnisdaten der Texterkennung aus \ref{fig:screenshot_postprocessing} nach der Normalisierung. Alle Wörter beinhalten nun ausschließlich Kleinbuchstaben.}
  \label{fig:screenshot_postprocessing_normalisierung}
\end{figure}

\subsubsection{Vermeidung von Duplikaten}
\label{algorithmen_duplikate}

Nach der Normalisierung werden Duplikate innerhalb der erkannten Textdaten entfernt, um die Effizienz der nachfolgenden Filterverfahren zu erhöhen. In den Daten aus \autoref{fig:screenshot_postprocessing_duplikate} wird die Liste an erkannten Wörtern stark gekürzt und die Redundanz damit verringert. Es treten keine Duplikate mehr auf.

\begin{figure}[ht]
  \centering
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=33,linerange={33-41}]{include/postprocessing/normalize.json}
  \end{minipage}
  \hfill
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=14,linerange={14-22}]{include/postprocessing/duplicates.json}
  \end{minipage}
  \caption{Auszug aus den Ergebnisdaten der Texterkennung aus \ref{fig:screenshot_postprocessing} nach der Duplikatentfernung.}
  \label{fig:screenshot_postprocessing_duplikate}
\end{figure}

\subsubsection{Filterung anhand der Wortlänge}
\label{algorithmen_wortlänge}

Verarbeitet das Texterkennungssystem Texte mit unregelmäßigen Abständen oder grafischen Artefakten in der Schrift, werden statt des eigentlichen Wortes fälschlicherweise oft kurze Symbolkombinationen erkannt. Um diese Kombinationen aus den Ergebnisdaten zu entfernen, können Zeichenketten, wie in \autoref{fig:screenshot_postprocessing_wortlänge} gezeigt, mithilfe des Wortlängenfilters ungeachtet ihres Inhaltes verworfen werden.

Zusätzlich kann dieser Filter an die Anforderung des Zielsystems angepasst werden. So haben beispielsweise Wörter, die weniger als zwei Zeichen beinhalten, einen für die Schlagwortsuche zu geringen Informationsgehalt und werden daher entfernt.

\begin{figure}[ht]
  \centering
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=14,linerange={14-22}]{include/postprocessing/duplicates.json}
  \end{minipage}
  \hfill
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=11,linerange={11-19}]{include/postprocessing/wordlength.json}
  \end{minipage}
  \caption{Auszug aus den Ergebnisdaten der Texterkennung aus \ref{fig:screenshot_postprocessing} nach der Wortlängenfilterung. Alle Wörter, die kürzer sind als der Schwellenwert, werden aus den Ergebnisdaten entfernt.}
  \label{fig:screenshot_postprocessing_wortlänge}
\end{figure}

\subsubsection{Sprachabhängige Filterung mittels Regular Expressions}
\label{algorithmen_regex}

Nachdem die zu filternden Textdaten durch vorherige Schritte vorverarbeitet wurden, werden die Ergebnisdaten ein letztes Mal mithilfe von regulären Ausdrücken (\engl{Regular Expressions}) durchsucht. Aufgrund der dynamischen Erweiterbarkeit der Regular Expressions kann für jede Sprache ein individueller Filter angelegt werden, der den jeweiligen Zeichensatz beschriftet und unbekannte Sonderzeichen oder Symbole entfernt. So sind beispielsweise im Deutschen Umlaute erlaubt, während häufig auftretende, jedoch unerwünschte Symbole wie das phonetische Zeichen "æ" oder mehrere hintereinandergereihte Leerzeichen explizit entfernt werden können. Die Anwendung des deutschen Sprachfilters wird in \autoref{fig:screenshot_postprocessing_regex} gezeigt.

\begin{figure}[ht]
  \centering
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=7,linerange={7-19}]{include/postprocessing/duplicates.json}
  \end{minipage}
  \hfill
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/regex.json}
  \end{minipage}
  \caption{Auszug aus den Ergebnisdaten der Texterkennung aus \ref{fig:screenshot_postprocessing} nach der Filterung mit Regular Expressions. Findet der sprachabhängige Filter keine Treffer, wird das Wort aus den Ergebnisdaten entfernt.}
  \label{fig:screenshot_postprocessing_regex}
\end{figure}