""" Dr. Franz - Psychoanalytische Antwort-Datenbank Umfassende, kontextuelle und charakterbasierte Antworten """ import random import re class FranzResponseEngine: def __init__(self): self.conversation_memory = {} self.user_patterns = [] self.session_topics = set() def analyze_input(self, text): """Analysiert User-Input auf verschiedenen Ebenen""" analysis = { 'length': len(text), 'sentiment': self._detect_sentiment(text), 'topic': self._detect_topic(text), 'emotional_state': self._detect_emotional_state(text), 'defense_mechanism': self._detect_defense_mechanism(text), 'relationship_context': self._detect_relationship_context(text), 'keywords': self._extract_keywords(text) } return analysis def _detect_sentiment(self, text): text_lower = text.lower() if any(word in text_lower for word in ['schlecht', 'traurig', 'deprimiert', 'schmerz', 'leiden', 'verzweifelt', 'hoffnungslos']): return 'very_negative' elif any(word in text_lower for word in ['wütend', 'frustriert', 'nervt', 'hasse', 'ärgerlich']): return 'angry' elif any(word in text_lower for word in ['müde', 'erschöpft', 'leer', 'emotionslos']): return 'numb' elif any(word in text_lower for word in ['gut', 'okay', 'alles klar', 'fine', 'super']): return 'false_positive' elif any(word in text_lower for word in ['vielleicht', 'weiß nicht', 'unsicher']): return 'uncertain' return 'neutral' def _detect_topic(self, text): text_lower = text.lower() if any(word in text_lower for word in ['freund', 'partner', 'beziehung', 'ex', 'dating', 'liebe', 'heirat']): return 'relationship' elif any(word in text_lower for word in ['arbeit', 'job', 'chef', 'kollegen', 'büro', 'karriere', 'stress']): return 'work' elif any(word in text_lower for word in ['familie', 'mutter', 'vater', 'eltern', 'geschwister', 'kind']): return 'family' elif any(word in text_lower for word in ['angst', 'panik', 'furcht', 'sorge', 'befürchtung']): return 'anxiety' elif any(word in text_lower for word in ['schuld', 'schuldgefühl', 'bereuen', 'fehler', 'versagen']): return 'guilt' elif any(word in text_lower for word in ['einsamkeit', 'allein', 'isoliert', 'niemand versteht']): return 'loneliness' elif any(word in text_lower for word in ['geld', 'finanzen', 'schulden', 'armut', 'reich']): return 'money' elif any(word in text_lower for word in ['tod', 'sterben', 'suizid', 'selbstmord', 'leben beenden']): return 'death_thoughts' return 'general' def _detect_emotional_state(self, text): text_lower = text.lower() if any(word in text_lower for word in ['nicht mehr', 'aufgeben', 'sinnlos', 'hoffnungslos']): return 'despair' elif any(word in text_lower for word in ['warum ich', 'was stimmt nicht', 'verstehe nicht']): return 'confusion' elif any(word in text_lower for word in ['immer wieder', 'ständig', 'jedes mal']): return 'repetitive_pattern' elif '?' in text: return 'questioning' return 'stating' def _detect_defense_mechanism(self, text): text_lower = text.lower() if any(word in text_lower for word in ['eigentlich okay', 'nicht so schlimm', 'wird schon']): return 'minimization' elif any(word in text_lower for word in ['aber', 'jedoch', 'trotzdem']): return 'rationalization' elif any(word in text_lower for word in ['alle anderen', 'nicht meine schuld', 'liegt an']): return 'projection' elif len(text) < 10: return 'avoidance' return 'none' def _detect_relationship_context(self, text): text_lower = text.lower() names = re.findall(r'\b[A-Z][a-z]+\b', text) # Eigennamen if names: return {'type': 'specific_person', 'names': names} elif any(word in text_lower for word in ['er', 'sie', 'mein freund', 'meine freundin']): return {'type': 'romantic_partner', 'names': []} elif any(word in text_lower for word in ['freunde', 'menschen', 'leute']): return {'type': 'social_circle', 'names': []} return {'type': 'none', 'names': []} def _extract_keywords(self, text): # Emotionale Keywords extrahieren emotional_words = [] text_lower = text.lower() emotion_patterns = { 'disappointment': ['enttäuscht', 'enttäuschung', 'letdown'], 'betrayal': ['betrogen', 'verrat', 'hintergangen'], 'abandonment': ['verlassen', 'allein gelassen', 'im stich'], 'rejection': ['abgelehnt', 'zurückgewiesen', 'nicht gewollt'], 'inadequacy': ['nicht gut genug', 'versagt', 'unfähig'], 'control': ['kontrolle', 'macht', 'bestimmen'] } for emotion, patterns in emotion_patterns.items(): if any(pattern in text_lower for pattern in patterns): emotional_words.append(emotion) return emotional_words def generate_response(self, user_input, conversation_history): """Generiert eine kontextuelle Dr. Franz Antwort""" analysis = self.analyze_input(user_input) # Speichere Patterns für zukünftige Referenz self.user_patterns.append(analysis) self.session_topics.update(analysis['keywords']) # Erstelle personalisierte Antwort basierend auf Analyse response = self._craft_response(user_input, analysis, conversation_history) return response def _craft_response(self, user_input, analysis, history): """Erstellt die spezifische Antwort basierend auf allen Faktoren""" # Basis-Templates nach Thema und Emotion if analysis['topic'] == 'relationship' and 'disappointment' in analysis['keywords']: templates = [ f"Ah, '{user_input[:40]}...' - Sie sprechen von Enttäuschung in Beziehungen. Interessant, wie Sie immer wieder Menschen wählen, die Sie enttäuschen werden. Haben Sie sich schon mal gefragt, warum Sie sich selbst für diese Rolle aussuchen?", f"Enttäuschung... Natürlich. Sie projizieren Ihre eigenen Unzulänglichkeiten auf andere. Wenn {analysis['relationship_context']['names'][0] if analysis['relationship_context']['names'] else 'diese Person'} Sie enttäuscht, was sagt das über Ihre Erwartungen aus?", f"Diese wiederholten Enttäuschungen sind kein Zufall. Sie sind ein Muster. Was in Ihrer Kindheit hat Sie dazu programmiert, immer wieder die Rolle des Opfers zu wählen?" ] elif analysis['topic'] == 'guilt' and analysis['emotional_state'] == 'despair': templates = [ f"Schuldgefühle und Verzweiflung - eine toxische Kombination. Ihre Selbstkasteiung ist beinahe... poetisch pathologisch. Erzählen Sie mir, wann Sie gelernt haben, dass Selbsthass Ihre Standardeinstellung ist.", f"Interessant, dass Sie sich in Schuldgefühlen suhlen wie in einem warmen Bad. Diese masochistische Tendenz - wo kommt sie her? Welcher Elternteil hat Ihnen beigebracht, dass Sie Strafe verdienen?", f"Ihre Schuld ist eine Maske. Dahinter verbirgt sich Wut - Wut darüber, dass Sie nicht bekommen haben, was Sie brauchten. Warum fällt es Ihnen leichter, sich selbst zu hassen, als anderen die Schuld zu geben?" ] elif analysis['sentiment'] == 'angry' and analysis['topic'] == 'work': templates = [ f"Wut am Arbeitsplatz... Klassisch. Sie projizieren Ihre Autoritätsprobleme auf Ihren Chef. Erzählen Sie mir von Ihrem Vater - war er auch so 'unfair' wie Ihr Vorgesetzter?", f"Diese Arbeitswut ist nur die Spitze des Eisbergs. Was Sie wirklich wütend macht, ist Ihre eigene Mittelmäßigkeit. Schwer zu akzeptieren, dass Sie nicht so besonders sind, wie Sie dachten, nicht wahr?", f"Ihr Ärger über die Arbeit ist ein Ablenkungsmanöver. Was macht Sie wirklich fertig? Die Tatsache, dass Sie in einem Job gefangen sind, der unter Ihrem Niveau ist, oder die Erkenntnis, dass das Ihr Niveau IST?" ] elif analysis['defense_mechanism'] == 'minimization': templates = [ f"'Ist nicht so schlimm'? Diese Verharmlosung ist geradezu komisch. Ihre Tendenz, Probleme kleinzureden, ist ein Überlebensmechanismus aus der Kindheit. Wer hat Ihnen beigebracht, dass Ihre Gefühle nicht wichtig sind?", f"Minimierung - ein klassischer Abwehrmechanismus. Sie reden sich Ihr Leiden klein, weil Sie glauben, Sie verdienen es nicht anders. Wer hat Ihnen diese Selbstverachtung eingeimpft?", f"Diese 'ist-nicht-so-schlimm'-Mentalität ist toxisch. Sie leugnen Ihre eigene Realität. Was passiert, wenn Sie ehrlich zugeben, dass es DOCH so schlimm ist?" ] elif analysis['emotional_state'] == 'repetitive_pattern': templates = [ f"'Immer wieder'... Ah, Sie beginnen das Muster zu erkennen. Aber erkennen und verstehen sind zwei verschiedene Dinge. Warum wiederholen Sie dieselben selbstzerstörerischen Verhaltensweisen?", f"Diese Wiederholungsschleifen sind kein Zufall. Sie sind Ihr Unterbewusstsein, das versucht, ein ungelöstes Trauma zu verarbeiten. Was versuchen Sie verzweifelt zu heilen?", f"Immer wieder dieselben Probleme? Das ist Ihr inneres Kind, das nach Aufmerksamkeit schreit. Diese Selbstsabotage - wem wollen Sie damit beweisen, dass Sie es nicht verdient haben, glücklich zu sein?" ] elif len(user_input) < 15: # Kurze Antworten short_responses = [ f"'{user_input}' - Ihre Einsilbigkeit spricht Bände. Diese emotionale Verschlossenheit ist ein Schutzmechanismus. Was fürchten Sie, wenn Sie sich öffnen?", f"So wenige Worte, so viel Bedeutung. Ihre Kommunikationsverweigerung ist ein Akt der passiven Aggression. Gegen wen richtet sich diese Wut wirklich?", f"Diese karge Antwort verrät Ihre Angst vor Intimität. Vollständige Sätze würden zu viel von Ihrer Verletzlichkeit preisgeben, nicht wahr?", f"'{user_input}' - interessant. Ihre Wortkargheit ist ein Fenster zu Ihrer emotionalen Armut. Wann haben Sie verlernt, sich auszudrücken?" ] templates = short_responses else: # Default erweiterte Antworten context_hint = "" if self.session_topics: context_hint = f" Ihre wiederkehrenden Themen heute - {', '.join(list(self.session_topics)[:2])} - zeigen ein klares Muster." templates = [ f"'{user_input[:50]}...' - Diese Aussage ist ein perfektes Beispiel für Ihre psychischen Abwehrmechanismen.{context_hint} Was versuchen Sie wirklich zu verbergen?", f"Interessant, wie Sie das formulieren. Ihre Wortwahl verrät mehr über Ihre Psyche, als Sie ahnen. Jeder Satz ein kleiner Einblick in Ihre Neurosen.{context_hint}", f"Ihre Art, sich auszudrücken, ist ein Spiegel Ihrer inneren Konflikte. Diese Sprache der Verdrängung kenne ich gut.{context_hint} Wann werden Sie ehrlich zu sich selbst?", f"Das, was Sie NICHT sagen, ist interessanter als das, was Sie sagen. Ihre emotionale Zensur ist bemerkenswert.{context_hint} Was verheimlichen Sie vor sich selbst?" ] # Personalisierung mit Namen falls vorhanden response = random.choice(templates) if analysis['relationship_context']['names']: name = analysis['relationship_context']['names'][0] if name not in response: response += f" Übrigens - {name}... ein interessanter Name für jemanden, der Sie so beeinflusst." return response # Globale Instanz franz_engine = FranzResponseEngine()