@kunstundtechnik/

FAST_LEERE_ELIZA

Python

Eine ELIZA, die nur eine Regel kennt.

fork
loading
Files
  • main.py

This Plugin Crashed!

Error: Error: must not create an existing file {"type":"CREATE_FILE","wid":"0.5336058872304454","path":"main.py","file":{"path":"main.py","content":{"asEncoding":{"base64":"IyBIaWVyIHdlcmRlbiB6d2VpIFByb2dyYW1tYmlibGlvdGhla2VuIGdlbGFkZW4KIyByYW5kb20gZGllbnQgZGVyIHp1ZsOkbGxpZ2VuIEF1c3dhaGwuCiMgcmUgKCJyZWd1bGFyIGV4cHJlc3Npb24iKSBkaWVudCBkZXIgTXVzdGVyZXJrZW5udW5nIGluIGRlbiBFaW5nYWJlbi4KaW1wb3J0IHJhbmRvbSwgcmUKCiMgSW4gZGllc2VyIExpc3RlIHNwZWljaGVydCBkYXMgUHJvZ3JhbW0gZGllIGJlcmVpdHMgZ2VnZWJlbmVuIEFudHdvcnRlbi4KIyBTaWUgd2lyZCB2ZXJ3ZW5kZXQsIHVtIGRpZSBXaWVkZXJob2x1bmcgaWRlbnRpc2NoZXIgQW50d29ydGVuIHp1IHZlcmhpbmRlcm4uCmdlZ2ViZW5lX2FudHdvcnRlbiA9IFtdCgojIERpZXNlIExpc3RlIGVudGjDpGx0IGVpbmUgQXVzd2FobCB2b24gQW50d29ydGVuLCBkaWUgRUxJWkEgZ2lidCwgCiMgd2VubiBzaWUga2VpbiBNdXN0ZXIgaW4gZGVyIGxldHp0ZW4gRWluZ2FiZSBnZWZ1bmRlbiBoYXQuCnN0YW5kYXJkX2FudHdvcnRlbiA9IFsKICAiRXJ6w6RobCB3ZWl0ZXIuIiwKICAiSWNoIGjDtnJlIHp1LiIsCiAgIkJpdHRlIGZhaHJlIGZvcnQuIiwKICAiQml0dGUgc3ByaWNoIHdlaXRlci4iLAogICJVbmQgd2VpdGVyPyIsCiAgIk1hZ3N0IER1IG1pciBtZWhyIGRhcsO8YmVyIGVyesOkaGxlbj8iLAogICJBaGEuIiwKICAiT2suIiwKICAiRG9ubmVyd2V0dGVyLiIsCiAgIlZlcnN0ZWhlLiIKXQoKIyBEaWVzZSBMaXN0ZSBlbnRow6RsdCBkaWUgUmVnZWxuLCBkaWUgZGFzIFZlcmhhbHRlbiB2b24gRUxJWkEgc3RldWVybi4KIyBFaW5lIGJlc3RlaHQgaW1tZXIgYXVzOgojIOKAkyBFaW5lbSBNdXN0ZXIgb2RlciBtZWhyZXJlbiBNdXN0ZXIsIGRpZSBFTElaQSBpbiBkZXIgbGV0enRlbiBFaW5nYWJlIHN1Y2h0CiMg4oCTIEVpbmVyIEFudHdvcnQgb2RlciBtZWhyZXJlbiBBbnR3b3J0ZW4sIGRpZSBFTElaQSBnaWJ0LCB3ZW5uIGVpbiBNdXN0ZXIgZ2VmdW5kZW4gd3VyZGUuCiMgRWluZSBSZWdlbCBpc3QgaW1tZXIgc28gYXVmZ2ViYXV0OgojCiMgWwojICAgW211c3RlcjEsIG11c3RlcjIsIG11c3RlcjMgLi4uXSwKIyAgIFthbnR3b3J0MSwgCiMgICBhbnR3b3J0MiwKIyAgIGFudHdvcnQzIC4uLl0KIyBdLAojIAojICBNdXN0ZXIgdW5kIEFudHdvcnRlbiBzaW5kIFplaWNoZW5rZXR0ZW4sIGRpZSBtYW4gc28gc2NocmVpYnQ6CiMgICAiaWNoIGhhYmUgYW5nc3QiCiMgICAiV29oZXIga29tbXQgZGllc2UgQW5nc3Q/IgojICBEaWUgTXVzdGVyIHNpbmQgaW1tZXIga2xlaW4gZ2VzY2hyaWViZW4hCiMgIFdlbm4gZWluZW0gTXVzdGVyIGVpbiByIHZvcmFuZ2VzdGVsbHQgaXN0LCBkYW5uIGlzdCBlcyBlaW4gcmVndWzDpHJlciBBdXNkcnVjay4KIyAgciJpY2ggKG1hZ3xsaWViZSkiIGJlc2NocmVpYnQgImljaCBtYWciIHVuZCAiaWNoIGxpZWJlIgojCiMgIERpZSBSZWdlbG4gd2VyZGVuIGltbWVyIHZvbiBvYmVuIG5hY2ggdW50ZW4gZHVyY2hzdWNodC4KIyAgUmVnZWxuLCBkaWUgd2VpdGVyIG9iZW4gc3RlaGVuLCBoYWJlbiBhbHNvIGVpbmUgaMO2aGVyZSBQcmlvcml0w6R0IQoKYWxsZV9yZWdlbG4gPSBbCiAgCiAgWwogICAgWyLDpHBmZWwiLCAiYmlybmVuIiwgIm9yYW5nZW4iXSwKICAgIFsiT2JzdCBpc3QgZ2VzdW5kISIsCiAgICAiSWNoIG1hZyBhdWNoIGdlcm4gT2JzdCBlc3Nlbi4iLAogICAgIk9rLCBsYXNzIHVucyDDvGJlciBGcsO8Y2h0ZSBzcHJlY2hlbi4iLAogICAgIlppdHJvbmVuIHNpbmQgYXVjaCBuaWNodCBzY2hsZWNodC4iLAogICAgIkJpcm5lbiBtYWcgaWNoIGFtIGxpZWJzdGVuLiJdCiAgXQoKXQoKIyBIaWVyIGdlaHQgZGFzIFByb2dyYW1tIGxvcy4KcHJpbnQoIkhhbGxvLCBtZWluIE5hbWUgaXN0IEVMSVpBLiBXb3LDvGJlciBtw7ZjaHRlc3QgRHUgc3ByZWNoZW4/IikKCiMgSGllciBiZWdpbm50IGVpbmUgRW5kbG9zc2NobGVpZmUuCiMgRWluZSBFaW5nYWJlIHdpcmQgYWJnZWZyYWd0IHVuZCB2ZXJhcmJlaXRldC4uLgp3aGlsZSBUcnVlOgogIGFudHdvcnQgPSAiIgogIGVpbmdhYmUgPSBpbnB1dCgiPiAiKQogIGVpbmdhYmUgPSBlaW5nYWJlLmxvd2VyKCkKICBlaW5nYWJlID0gcmUuc3ViKCLDnyIsICJzcyIsIGVpbmdhYmUpCiAgCiAgZm9yIGVpbmVfcmVnZWwgaW4gYWxsZV9yZWdlbG46CgogICAgbXVzdGVyID0gZWluZV9yZWdlbFswXQogICAgYW50d29ydGVuID0gZWluZV9yZWdlbFsxXQoKICAgIGZvciBlaW5fbXVzdGVyIGluIG11c3RlcjoKICAgICAgaWYgcmUuc2VhcmNoKGVpbl9tdXN0ZXIsIGVpbmdhYmUpOgogICAgICAgIGFudHdvcnQgPSByYW5kb20uY2hvaWNlKGFudHdvcnRlbikKICAgICAgICBpZiBhbnR3b3J0IGluIGdlZ2ViZW5lX2FudHdvcnRlbjoKICAgICAgICAgIGFudHdvcnQgPSAiIgogICAgICAgICNicmVhawogICAgaWYgYW50d29ydCBpcyBub3QgIiI6CiAgICAgIGJyZWFrCiAgCiAgaWYgYW50d29ydCBpcyAiIjoKICAgIGFudHdvcnQgPSByYW5kb20uY2hvaWNlKHN0YW5kYXJkX2FudHdvcnRlbikKICAgIAogIHByaW50KGFudHdvcnQpCiAgZ2VnZWJlbmVfYW50d29ydGVuLmFwcGVuZChhbnR3b3J0KQ=="},"asBuffer":null},"loaded":true}}
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)