\subsection{Postprocessing}
\label{algorithmen_postprocessing}

Da die verarbeiteten Bilddaten \bzw deren extrahierte Textdaten später durch eine Schlagwort-basierte Suchfunktion durch den Nutzer auffindbar sein müssen, müssen die Ergebnisdaten im Rahmen des Postprocessings weiterverarbeitet werden. Ziel ist es, die Redundanz innerhalb des Datensets zu reduzieren. Ebenso sollen falsch erkannte Ergebnisdaten identifiziert und aus der Schlagwortmenge entfernt werden.


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

Tesseract stellt im Rahmen der Texterkennung auch immer Metadaten zu den erkannten Texten zur Verfügung. Bei erkannten Wörtern wird beispielsweise immer eine Genauigkeit (\engl{Confidence}) 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. 

Der Confidence-Filter prüft die jeweiligen Wörter auf ihre Metadaten und verwirft Wörter, 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 werer 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.

\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. Dies verringert ebenfalls die Redundanz der Textdaten und steigert die Effizienz der nachfolgenden Filterverfahren.

\begin{figure}[ht]
  \centering
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/normalize.json}
  \end{minipage}
  \hfill
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{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 relativ kurze Symbolkombinationen erkannt. Um diese Kombinationen aus den Ergebnisdaten zu entfernen, können Zeichenketten mithilfe des Wortlängenfilters ungeachtet ihres Inhaltes verworfen werden.

Zusätzlich kann dieser Filter an die Anforderung des Zielsystems angepasst werden. So sind beispielsweise Wörter, die weniger als zwei Zeichen beinhalten, für die Schlagwortsuche grundsätzlich nicht relevant.

\begin{figure}[ht]
  \centering
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/normalize.json}
  \end{minipage}
  \hfill
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/duplicates.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 weitestgehend vorverarbeitet wurden, werden die Ergebnisdaten ein letztes Mal mithilfe von regulären Ausdrücken (\engl{Regular Expressions}) durchsucht. Aufgrund der guten Erweiterbarkeit der Regular Expressions ist es einfach, für jede Sprache einen individuellen Filter anzulegen, 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.

\begin{figure}[ht]
  \centering
  \begin{minipage}{0.49\textwidth}
    \lstinputlisting[firstnumber=2,linerange={2-14}]{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}