Skip to main content

Minimal Python implementation of the ELIZA chatbot

Project description

Our Eliza (oureliza)

Python 3.8+ PyPI version PyPI Downloads License: MIT Zero Dependencies Code Size

A minimal Python implementation of the classic ELIZA chatbot with zero dependencies.

Try the Demo

Chat with ELIZA in your browser: Interactive Demo

Installation

pip install oureliza

Or with Poetry:

poetry add oureliza

Usage

from oureliza import Eliza

eliza = Eliza()

# Get initial greeting
print(eliza.initial())

# Have a conversation
print(eliza.respond("I feel sad today"))
print(eliza.respond("My mother never understood me"))
print(eliza.respond("I dream about flying"))

# Get final message
print(eliza.final())

Script Format

ELIZA uses a script-based pattern matching system designed by Joseph Weizenbaum in 1966. See SCRIPT_FORMAT.md for full history and specification.

The built-in DOCTOR_SCRIPT follows this format:

Tags

Tag Description Example
initial Greeting messages shown at start initial: How do you do. Please tell me your problem.
final Goodbye messages shown at end final: Goodbye. Thank you for talking to me.
quit Words that end the conversation quit: bye
pre Pre-substitution (before matching) pre: dont don't
post Post-substitution (in responses) post: i you
synon Synonym groups synon: sad unhappy depressed
key Keyword with optional weight key: mother 10
decomp Decomposition pattern decomp: * i feel *
reasmb Reassembly response reasmb: Why do you feel (2)?

Pattern Matching

  • * matches zero or more words
  • @word matches any synonym in the group
  • (1), (2), etc. reference captured groups from decomposition

Example Script Block

key: mother 10
  decomp: * my mother *
    reasmb: Tell me more about your mother.
    reasmb: What else comes to mind when you think of your mother?
  decomp: * mother *
    reasmb: Who else in your family (2)?

Special Features

  • goto: Redirect to another keyword's patterns

    reasmb: goto family
    
  • save ($): Save response to memory for later use

    decomp: $ * i want *
    
  • xnone: Fallback responses when no pattern matches

    key: xnone
      decomp: *
        reasmb: Please go on.
        reasmb: Tell me more about that.
    

Custom Scripts

You can provide your own script:

from oureliza import Eliza

my_script = """
initial: Hello! How can I help you today?
final: Goodbye!
quit: bye
quit: exit

key: xnone
  decomp: *
    reasmb: I see. Tell me more.
    reasmb: Please continue.

key: hello 10
  decomp: *
    reasmb: Hi there! What's on your mind?
"""

eliza = Eliza(script=my_script)
print(eliza.respond("hello"))

Development

# Install dependencies
make install

# Run tests
make test

# Build package
make build

# Do everything
make all

References

Based on wadetb/eliza with significant script expansion.

License

MIT License - see LICENSE for details.

Author

Craig Trim - craigtrim@gmail.com

More NLP articles and demos at craigtrim.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oureliza-1.2.1.tar.gz (23.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oureliza-1.2.1-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file oureliza-1.2.1.tar.gz.

File metadata

  • Download URL: oureliza-1.2.1.tar.gz
  • Upload date:
  • Size: 23.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.9 Darwin/24.6.0

File hashes

Hashes for oureliza-1.2.1.tar.gz
Algorithm Hash digest
SHA256 80a9fc287974edfb019b16c0e3a0156655b7607a8df390d291a454d270c40028
MD5 4d68daace4f7ee5a369611ce9d3dac2d
BLAKE2b-256 828a3550f3b38f487253a5667823054a69038981df241e34c6eff78c7f53c597

See more details on using hashes here.

File details

Details for the file oureliza-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: oureliza-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.9 Darwin/24.6.0

File hashes

Hashes for oureliza-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 209afb0bfb68c207c980fdebe28d5edf1a7b87815eea7a9c1b2e79c7f246aedc
MD5 7010e38fb90b891e7a045a75e93a6888
BLAKE2b-256 a78ac937d387cc41455e30686ea9f756f5829e05520286abca10c0db15dd4202

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page