@kunstundtechnik/

FAST_LEERE_ELIZA

Python

Eine ELIZA, die nur eine Regel kennt.

fork
loading
Files
  • main.py
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# Hier werden zwei Programmbibliotheken geladen
# random dient der zufälligen Auswahl.
# re ("regular expression") dient der Mustererkennung in den Eingaben.
import random, re

# In dieser Liste speichert das Programm die bereits gegebenen Antworten.
# Sie wird verwendet, um die Wiederholung identischer Antworten zu verhindern.
gegebene_antworten = []

# Diese Liste enthält eine Auswahl von Antworten, die ELIZA gibt, 
# wenn sie kein Muster in der letzten Eingabe gefunden hat.
standard_antworten = [
  "Erzähl weiter.",
  "Ich höre zu.",
  "Bitte fahre fort.",
  "Bitte sprich weiter.",
  "Und weiter?",
  "Magst Du mir mehr darüber erzählen?",
  "Aha.",
  "Ok.",
  "Donnerwetter.",
  "Verstehe."
]

# Diese Liste enthält die Regeln, die das Verhalten von ELIZA steuern.
# Eine besteht immer aus:
# – Einem Muster oder mehreren Muster, die ELIZA in der letzten Eingabe sucht
# – Einer Antwort oder mehreren Antworten, die ELIZA gibt, wenn ein Muster gefunden wurde.
# Eine Regel ist immer so aufgebaut:
#
# [
#   [muster1, muster2, muster3 ...],
#   [antwort1, 
#   antwort2,
#   antwort3 ...]
# ],
# 
#  Muster und Antworten sind Zeichenketten, die man so schreibt:
#   "ich habe angst"
#   "Woher kommt diese Angst?"
#  Die Muster sind immer klein geschrieben!
#  Wenn einem Muster ein r vorangestellt ist, dann ist es ein regulärer Ausdruck.
#  r"ich (mag|liebe)" beschreibt "ich mag" und "ich liebe"
#
#  Die Regeln werden immer von oben nach unten durchsucht.
#  Regeln, die weiter oben stehen, haben also eine höhere Priorität!

alle_regeln = [
  
  [
    ["äpfel", "birnen", "orangen"],
    ["Obst ist gesund!",
    "Ich mag auch gern Obst essen.",
    "Ok, lass uns über Früchte sprechen.",
    "Zitronen sind auch nicht schlecht.",
    "Birnen mag ich am liebsten."]
  ]

]

# Hier geht das Programm los.
print("Hallo, mein Name ist ELIZA. Worüber möchtest Du sprechen?")

# Hier beginnt eine Endlosschleife.
# Eine Eingabe wird abgefragt und verarbeitet...
while True:
  antwort = ""
  eingabe = input("> ")
  eingabe = eingabe.lower()
  eingabe = re.sub("ß", "ss", eingabe)
  
  for eine_regel in alle_regeln:

    muster = eine_regel[0]
    antworten = eine_regel[1]

    for ein_muster in muster:
      if re.search(ein_muster, eingabe):
        antwort = random.choice(antworten)
        if antwort in gegebene_antworten:
          antwort = ""
        #break
    if antwort is not "":
      break
  
  if antwort is "":
    antwort = random.choice(standard_antworten)
    
  print(antwort)
  gegebene_antworten.append(antwort)