top of page

Sprache als selbstverstärkender Algorithmus:
Ein interaktives Analysetool zur Untersuchung von Narrativen und kollektiven Dynamiken

Zutaten Narrativ_Zeichenfläche 1_edited.

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.*;

public class SprachProphezeiungAnalyser {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new AnalyseMaske().createUI());
    }
}

class AnalyseMaske {
    private JTextArea eingabeFeld;
    private JTextArea ausgabeFeld;
    private JSlider jargonSlider;
    private JSlider rhythmusSlider;
    private JSlider narrativSlider;

    public void createUI() {
        JFrame frame = new JFrame("Sprachprophezeiungs-Maske");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);

        // Eingabe
        eingabeFeld = new JTextArea(10, 60);
        JScrollPane eingabeScroll = new JScrollPane(eingabeFeld);
        eingabeScroll.setBorder(BorderFactory.createTitledBorder("Texteingabe"));

        // Ausgabe
        ausgabeFeld = new JTextArea(10, 60);
        ausgabeFeld.setEditable(false);
        JScrollPane ausgabeScroll = new JScrollPane(ausgabeFeld);
        ausgabeScroll.setBorder(BorderFactory.createTitledBorder("Analyseausgabe"));

        // Stellschrauben (Slider)
        jargonSlider = createSlider("Jargon-Erkennung");
        rhythmusSlider = createSlider("Sprachrhythmus");
        narrativSlider = createSlider("Narrativ-Fokus");

        // Button
        JButton analysierenButton = new JButton("Analysieren");
        analysierenButton.addActionListener(this::analysieren);

        // Layout
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.add(eingabeScroll);
        panel.add(jargonSlider);
        panel.add(rhythmusSlider);
        panel.add(narrativSlider);
        panel.add(analysierenButton);
        panel.add(ausgabeScroll);

        frame.add(panel);
        frame.setVisible(true);
    }

    private JSlider createSlider(String title) {
        JSlider slider = new JSlider(0, 100, 50);
        slider.setBorder(BorderFactory.createTitledBorder(title));
        slider.setMajorTickSpacing(25);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);
        return slider;
    }

    private void analysieren(ActionEvent e) {
        String text = eingabeFeld.getText();
        int jargon = jargonSlider.getValue();
        int rhythmus = rhythmusSlider.getValue();
        int narrativ = narrativSlider.getValue();

        String analyse = SprachAnalyse.analysiere(text, jargon, rhythmus, narrativ);
        ausgabeFeld.setText(analyse);
    }
}

class SprachAnalyse {
    public static String analysiere(String text, int jargon, int rhythmus, int narrativ) {
        StringBuilder sb = new StringBuilder();

        sb.append(">> Analyseergebnis:\n");

        // Einfaches Jargon-Scoring
        int jargonScore = (int) Arrays.stream(text.split("\\W+"))
                .filter(w -> w.length() > 10 || w.matches(".*ismus|.*ität|.*theorie"))
                .count();
        sb.append("- Jargon-Level: ").append(jargonScore * jargon / 100).append("\n");

        // Rhythmusanalyse (hier: Satzlängenvariation)
        String[] saetze = text.split("[.!?]");
        int varianz = saetze.length > 1 ? saetze[0].length() - saetze[1].length() : 0;
        sb.append("- Rhythmus-Abweichung: ").append(Math.abs(varianz) * rhythmus / 100).append("\n");

        // Narrativanalyse (Fake-News-Erkennung, sehr rudimentär)
        if (text.toLowerCase().contains("wahrheit") || text.toLowerCase().contains("lüge")) {
            sb.append("- Narrativ-Trigger erkannt\n");
        } else {
            sb.append("- Keine starken Narrative erkannt\n");
        }

        // Prophezeiungs-Ausblick
        if (jargon > 70 && narrativ > 70) {
            sb.append(">> Mögliche selbstverstärkende Narrativbildung erkannt \n");
        }

        return sb.toString();
    }
}

Zutaten Narrativ_Zeichenfläche 1.png
Zutaten Narrativ_Zeichenfläche 1.png

CREATE TABLE analysen (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  eingabetext TEXT,
  jargon_level INTEGER,
  rhythmus_level INTEGER,
  narrativ_level INTEGER,
  analysedatum DATETIME DEFAULT CURRENT_TIMESTAMP
);

import java.sql.*;

String userInput = "";
String analyseOutput = "";
Connection conn;

void setup() {
  size(800, 600);
  textFont(createFont("Arial", 14));
  connectDB();
}

void draw() {
  background(240);
  fill(0);
  text("Gib deinen Text ein (Return = Analysieren):", 20, 30);
  text(userInput, 20, 60, width - 40, 200);
  fill(50, 80, 120);
  text("Ausgabe:", 20, 280);
  fill(0);
  text(analyseOutput, 20, 310, width - 40, height - 350);
}

void keyPressed() {
  if (key == ENTER || key == RETURN) {
    analyseOutput = analysiereText(userInput);
    saveAnalyse(userInput, analyseOutput);
    userInput = "";
  } else if (key == BACKSPACE) {
    if (userInput.length() > 0) {
      userInput = userInput.substring(0, userInput.length()-1);
    }
  } else {
    userInput += key;
  }
}

String analysiereText(String text) {
  int jargonLevel = countJargon(text);
  int rhythmusLevel = measureRhythmus(text);
  int narrativLevel = detectNarrativ(text);

  return "Jargon-Level: " + jargonLevel +
         "\nRhythmus-Level: " + rhythmusLevel +
         "\nNarrativ-Level: " + narrativLevel;
}

int countJargon(String text) {
  String[] words = splitTokens(text, " ,.?!-");
  int count = 0;
  for (String w : words) {
    if (w.length() > 10 || w.endsWith("ismus") || w.endsWith("theorie")) {
      count++;
    }
  }
  return count;
}

int measureRhythmus(String text) {
  String[] saetze = splitTokens(text, ".!?");
  if (saetze.length < 2) return 0;
  return abs(saetze[0].length() - saetze[1].length());
}

int detectNarrativ(String text) {
  String lower = text.toLowerCase();
  if (lower.contains("wahrheit") || lower.contains("lüge") || lower.contains("system")) {
    return 80;
  } else if (lower.contains("glaube") || lower.contains("meinung")) {
    return 60;
  }
  return 20;
}

Zutaten Narrativ_Zeichenfläche 1_edited.

void connectDB() {
  try {
    Class.forName("org.sqlite.JDBC");
    conn = DriverManager.getConnection("jdbc:sqlite:sprachprophezeiung.db");
    Statement stmt = conn.createStatement();
    stmt.executeUpdate("CREATE TABLE IF NOT EXISTS analysen (" +
                       "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                       "eingabetext TEXT, " +
                       "jargon_level INTEGER, " +
                       "rhythmus_level INTEGER, " +
                       "narrativ_level INTEGER, " +
                       "analysedatum DATETIME DEFAULT CURRENT_TIMESTAMP)");
  } catch (Exception e) {
    e.printStackTrace();
  }
}

void saveAnalyse(String text, String analyseText) {
  int j = countJargon(text);
  int r = measureRhythmus(text);
  int n = detectNarrativ(text);
  try {
    PreparedStatement pstmt = conn.prepareStatement(
      "INSERT INTO analysen (eingabetext, jargon_level, rhythmus_level, narrativ_level) VALUES (?, ?, ?, ?)");
    pstmt.setString(1, text);
    pstmt.setInt(2, j);
    pstmt.setInt(3, r);
    pstmt.setInt(4, n);
    pstmt.executeUpdate();
  } catch (Exception e) {
    e.printStackTrace();
  }
}

Sprache als selbstverstärkender Algorithmus:
Ein interaktives Analysetool zur Untersuchung von Narrativen und kollektiven Dynamiken

ENDE

bottom of page