© frankie’s/Shutterstock.com
Functional Patterns: Textanalyse mit Monoid

Wer hat keine Angst vor Algebra?


Die funktionale Programmierung birgt eine Vielzahl neuer Konzepte, mit denen sich bekannte Probleme auf neue Art lösen lassen. Häufig wird dabei auf Strukturen aus der abstrakten Algebra zurückgegriffen, sehr bekannt sind mittlerweile die Monaden. Schauen wir uns eine andere Struktur an, die viel einfacher als Monaden ist und uns trotzdem sehr mächtige Abstraktionen bauen lässt: das Monoid.

Die initialen Gedanken vieler Leser dürften in etwa folgende sein: Abstrakte Algebra? Warum weiterlesen? Wie soll mir das denn im Alltag helfen? Leider hat die funktionale Programmierung (immer noch) allzu oft den Ruf, zu akademisch und fernab der Realität des normalen Tagesgeschäfts zu sein. Überwindet man erst einmal diese Vorurteile und schaut etwas tiefer, stellt sich aber recht schnell heraus, dass wir beim Programmieren auf Wissen und Techniken zurückgreifen können, die schon seit Jahrhunderten bekannt und erforscht sind. Ein großer Teil der „neuen“ Konzepte in der funktionalen Programmierung basiert auf Konzepten der Mathematik und wendet diese auf Probleme in der Softwareentwicklung an.

Damit aber genug der Theorie, wenden wir uns nun der praktischen Anwendung zu. Dazu werfen wir einen Blick auf das Konzept des Monoids, erläutern und implementieren, zeigen Beispiele und wenden am Schluss unser neues Wissen auf ein Problem aus der Praxis an: Textanalyse mit Apache Spark. Der gesamte Code steht online zur Verfügung [1].

Das Monoid

Der grundsätzliche Zweck eines Monoids ist es, zwei Elemente miteinander zu kombinieren. Dabei dient das Monoid als Abstraktionsschicht über diese Operation. Stark vereinfacht ist unser alltäglicher Job als Programmierer, gute Abstraktionen für Probleme zu finden und diese möglichst kombinier- und verschachtelbar zu definieren. Dazu müssen wir Muster im Code erkennen und dann darüber abstrahieren, in einer Weise, die bestenfalls auch noch möglichst leicht mit anderen Abstraktionen kombinierbar ist:

scala> 41 + 1 scala> 2 * 21 scala> true || false scala> "Hello, " + "World!" scala> List('a', 'b') ++ List('c', 'd')

Um das zu veranschaulichen, sehen wir uns das Listing einmal im „Mustererkennungsmodus“ an. Wir addieren und subtrahieren Zahlen, kombinieren Boolesche Werte, konkatenieren Strings und Listen. Das übergreifende Muster in allen Berechnungen lässt sich beschreiben als: „gegeben zwei Werte, kombiniere diese mithilfe eines Operators in einen neuen Wert“. Es ist exakt dieses Muster, das mit „Monoid“ einen Namen bekommt und für uns ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang