forked from andelf/PyAIML
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 70d4038
Showing
17 changed files
with
3,134 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
version 0.8.6 | ||
- Fixed WorbSub module to work with words that consist entirely of punctuation :-). | ||
- Fixed PatternMgr module to replace non-alphanumerics with whitespace instead of simply | ||
consuming them (thanks to Hugh Sasse for the patch). | ||
- Added workaround to avoid a rare IOError exception when processing <system> tags | ||
(thanks to Duncan Gough for the patch). | ||
- PyAIML is now released under the FreeBSD license. | ||
|
||
version 0.8.5 | ||
- Fixed a couple lingering Unicode bugs, one of which was breaking things | ||
pretty thoroughly under Python 2.2.3. | ||
- Improved whitespace handling, to the point where it should be compliant | ||
with the AIML 1.0.1 standard. Basically, whitespace will be stripped | ||
down to readable levels, unless the xml:space attribute is used to | ||
indicate otherwise. | ||
- Fixed bug in PatternMgr where the character '1' was mistaken identified | ||
as punctuation to be stripped, instead of the intended '!'. | ||
|
||
version 0.8.4: | ||
- Fixed bug in AimlParser creation, if the aiml module was not in the same | ||
directory as the script that imported it. | ||
- Improved Unicode support (again) (thanks to Daniel Kottow for his help). | ||
- 2nd pass at documentation. All functions now have useful, properly-formatted | ||
docstrings. | ||
|
||
version 0.8.3: | ||
- Reworked the way AimlParser objects are created, to allow support for | ||
XML namespaces in a future version. | ||
- First pass at Unicode-proofing the whole system, so that multi-lingual | ||
AIML files can be processed. | ||
- Added support for "index" attribute in "star", "thatstar" and "topicstar" | ||
elements (thanks to Robert D. Cotey for the patch!). Also added type-check | ||
to ensure that the value of the "index" attribute is an integer. | ||
|
||
version 0.8.2: | ||
- Added protection against infinite AIML recursion. | ||
- Removed the deprecated Kernel.getBotName and Kernel.setBotName functions. | ||
- Added workaround for Unicode input crash. Feeding the Kernel Unicode | ||
input no longer crashes the interpreter, but some internal input-formatting | ||
operations must be skipped, which could cause some nonsensical replies | ||
(like you're not already used to nonsensical replies, though...) | ||
|
||
version 0.8.1: | ||
- "system" elements now attempt to intelligently convert between UNIX-style | ||
and Windows-style pathnames as appropriate. For cross-platform compatibility, | ||
all AIML files should use UNIX-style paths inside their "system" elements. | ||
- Fixed crashes under Windows9X when a "system" element is executed when | ||
w9xpopen.exe is unavailable. | ||
- Re-piped most errors and warnings to go to stderr instead of stdout. | ||
- Fixed bug that would cause the the bot to stop responding to any input in a session | ||
if the "that" or "topic" strings were 100% whitespace (but still not empty). | ||
- Fixed bug that would cause multi-line "that" strings to become corrupted. For | ||
example, "Hello there.\nNice to meet you" would become "HELLO THERENICE TO MEET | ||
YOU" when queried for that-matching. | ||
|
||
version 0.8: | ||
- Removed support for non-standard "mode" attribute in "system" elements. | ||
It just wasn't worth breaking the AIML standard for. | ||
- Reworked persistent session support (I warned you!). The old method involving | ||
Kernel.persistentSessions() has been removed. Instead, there is a new | ||
Kernel.getSessionData() method which gives the bot author access to the session | ||
data. You can store this data however you wish. Session data can be restored | ||
later by repeated calls to Kernel.setPredicate(). | ||
- Improved AIML parser error handling; instead of aborting the entire file, a | ||
parse error now only ignores the current category and forges ahead. To check for | ||
parse errors, check the return value of AimlParser.getNumErrors() after parsing. | ||
|
||
version 0.7: | ||
- Further improved AIML parsing; missing or invalid XML attributes are now | ||
detected at parse-time. There's also a first stab at support for Forward | ||
Compatibility Mode: if the "version" attribute of an AIML tag is not 1.0.1, | ||
the parser is much more forgiving of unknown or missing XML tags and attributes. | ||
- Added "support" for the 'gossip' tag. The specific behavior of this tag is | ||
totally undefined; currently, the PyAIML implementation treats it as a big | ||
no-op. Its contents are ignored, and it returns the empty string (but at least | ||
it isn't flagged as a syntax error!) | ||
- Oops; I've implemented 'person' as 'person2' and vice versa this whole time! | ||
Swapped them back; they should each behave correctly now. | ||
- A bit of code cleanup, with an emphasis on using proper XML/AIML terminology | ||
whenever possible. | ||
- Fixed some exception-masking in the 'condition' element processor, which could | ||
prevent AIML parse errors from being reported. | ||
- Added full support for the "bot" tag (previously only the 'bot name="name"' | ||
form was supported). Bot predicates are set using the Kernel.setBotPredicate() | ||
function. Note that Kernel.getBotName() and Kernel.setBotName() have been | ||
deprecated, and will disappear in a future release. | ||
|
||
version 0.6.1: | ||
- Fixed undefined variable exception that was thrown whenever there was no | ||
match for the user's input. | ||
- Fixed an infinite recursion bug caused by processing two or more nested | ||
'srai' or 'sr' elements. | ||
|
||
version 0.6 | ||
- Completely rewrote the LearnHandler class (which handles all AIML parsing) | ||
to be much less forgiving of incorrect AIML. Currently, any AIML errors | ||
outside of "template" elements should be caught and reported at load-time. | ||
AIML errors inside templates are still not detected until run-time. | ||
- Added support for atomic 'person' and 'person2' tags (they implicitly use | ||
'star' as their contents if none are provided). | ||
- Oops; Kernel.respond() was DEFINITELY not thread-safe. Now it is, provided | ||
you're using Python's standard 'threading' module. If not, you'll have to | ||
provide your own mutual-exclusion system to ensure that only one thread | ||
is calling Kernel.respond() at a time. | ||
- Recursive tags ('srai' and 'sr') no longer add their intermediate results | ||
to the input and output history. | ||
- EXPERIMENTAL FEATURE: persistent sessions. If enabled using | ||
Kernel.persistentSessions(True), session data will be written to disk | ||
after every response. This lets session data be preserved when the | ||
Kernel is destroyed, at the expense of a small performance hit (all | ||
that extra disk I/O). The semantics of this feature may change in future | ||
releases! | ||
- Added support for the "id" tag (it returns the session ID). | ||
- Added support for the "topic", "topicstar" and "thatstar" tags. | ||
- Commented up the test.py file. | ||
- Added a summary to the end of the Kernel.py self-test (since there are now | ||
too many tests to fit on screen). | ||
- Added support for multi-sentence input. The user's input is split into | ||
individual sentences, each of which is treated as a completely separate | ||
piece of input. I'm *pretty* sure this is the Right Way(tm). | ||
|
||
version 0.5 | ||
- The filename inside Learn tags can now contain wildcards. Besides | ||
simplifying the loading of multiple files, this allows the possibility | ||
of loading AIML files that may not exist without crashing the | ||
interpreter. | ||
- Attempting to set the value of a predicate in a nonexistent session | ||
now automatically creates the session, instead of silently doing nothing. | ||
- "set" tags now output the new value of the variable, as well as assigning | ||
it. | ||
|
||
version 0.4.1 | ||
- Unknown AIML tags are handled in a more forgiving fashion. If an | ||
unknown tag is encountered, instead of ignoring its contents entirely, | ||
the contents are processed and returned unaltered. | ||
- Added support for "bot name='name'" tags, both in patterns and in | ||
templates. This also fixes a nasty infinite loop crash when a user | ||
says Hello to a bot. | ||
|
||
version 0.4 | ||
- Added support for "star" and "sr" tags. | ||
- Considered adding support for the "secure" tag, but decided against it. | ||
see SUPPORTED_TAGS.txt for more information. | ||
|
||
version 0.3 | ||
- Cleaned up AIML processing code to remove some unnecessary | ||
special-cases in the interpretation algorithm. | ||
- Added support for "input" and "that" tags. | ||
|
||
version 0.2 | ||
- 50% speedup in Kernel.loadBrain() and Kernel.saveBrain(). | ||
- The optional 'learnFiles' and 'commands' arguments to | ||
Kernel.bootstrap() can now be either strings or lists. This | ||
allows multiple files/commands to be loaded during | ||
initialization. | ||
- Added support for "person" and "person2" tags. | ||
- Added general word-substitution functionality. This opens up | ||
the potential for localizing PyAIML into non-English languages. | ||
See DefaultSubs.py for more info. | ||
|
||
version 0.1: | ||
- Initial release. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
Copyright 2003-2010 Cort Stratton. All rights reserved. | ||
|
||
Redistribution and use in source and binary forms, with or without | ||
modification, are permitted provided that the following conditions are | ||
met: | ||
1. Redistributions of source code must retain the above copyright | ||
notice, this list of conditions and the following disclaimer. | ||
2. Redistributions in binary form must reproduce the above copyright | ||
notice, this list of conditions and the following disclaimer in the | ||
documentation and/or other materials provided with the | ||
distribution. | ||
|
||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY | ||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD PROJECT OR | ||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
Metadata-Version: 1.0 | ||
Name: PyAIML | ||
Version: 0.8.6 | ||
Summary: An interpreter package for AIML, the Artificial Intelligence Markup Language | ||
Home-page: http://pyaiml.sourceforge.net/ | ||
Author: Cort Stratton | ||
Author-email: [email protected] | ||
License: UNKNOWN | ||
Description: PyAIML implements an interpreter for AIML, the Artificial Intelligence | ||
Markup Language developed by Dr. Richard Wallace of the A.L.I.C.E. Foundation. | ||
It can be used to implement a conversational AI program. | ||
Platform: any | ||
Classifier: Development Status :: 3 - Alpha | ||
Classifier: Environment :: Console | ||
Classifier: Intended Audience :: Developers | ||
Classifier: Programming Language :: Python | ||
Classifier: Operating System :: OS Independent | ||
Classifier: Topic :: Communications :: Chat | ||
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
PyAIML -- The Python AIML Interpreter | ||
author: Cort Stratton ([email protected]) | ||
web: http://pyaiml.sourceforge.net/ | ||
|
||
PyAIML is an interpreter for AIML (the Artificial Intelligence Markup | ||
Language), implemented entirely in standard Python. It strives for | ||
simple, austere, 100% compliance with the AIML 1.0.1 standard, no less | ||
and no more. | ||
|
||
This is currently pre-alpha software. Use at your | ||
own risk! | ||
|
||
For information on what's new in this version, see the | ||
CHANGES.txt file. | ||
|
||
For information on the state of development, including | ||
the current level of AIML 1.0.1 compliance, see the | ||
SUPPORTED_TAGS.txt file. | ||
|
||
Quick & dirty example (assuming you've downloaded the | ||
"standard" AIML set): | ||
|
||
import aiml | ||
|
||
# The Kernel object is the public interface to | ||
# the AIML interpreter. | ||
k = aiml.Kernel() | ||
|
||
# Use the 'learn' method to load the contents | ||
# of an AIML file into the Kernel. | ||
k.learn("std-startup.xml") | ||
|
||
# Use the 'respond' method to compute the response | ||
# to a user's input string. respond() returns | ||
# the interpreter's response, which in this case | ||
# we ignore. | ||
k.respond("load aiml b") | ||
|
||
# Loop forever, reading user input from the command | ||
# line and printing responses. | ||
while True: print k.respond(raw_input("> ")) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
This document describes the current state of PyAIML's compliance | ||
to the AIML 1.0.1 standard. The full AIML reference manual can be | ||
found online at http://alicebot.org/TR/2001/WD-aiml. | ||
|
||
The following tags are currently supported: | ||
|
||
<bot name="name"> (see notes) | ||
<condition> | ||
<date> | ||
<formal> | ||
<gender> | ||
<get> | ||
<id> | ||
<input> | ||
<learn> | ||
<li> | ||
<lowercase> | ||
<person> | ||
<person2> | ||
<random> | ||
<sentence> | ||
<set> | ||
<size> | ||
<sr> | ||
<srai> | ||
<star> | ||
<system> | ||
<that> | ||
<thatstar> | ||
<think> | ||
<topic> | ||
<topicstar> | ||
<uppercase> | ||
<version> | ||
|
||
Support for the following tags should be implemented in the next version: | ||
|
||
None | ||
|
||
The following tags are not supported: | ||
|
||
<gossip> (see notes) | ||
<if> / <else> (see notes) | ||
<javascript> (see notes) | ||
<secure> (see notes) | ||
|
||
------------------------------------------------------------------ | ||
|
||
NOTES ON SPECIFIC TAGS: | ||
|
||
<bot name="name"> | ||
To set the bot's name, use Kernel.setBotName("NewName"). Note that the | ||
name *MUST* be a single word! Use Kernel.getBotName() to query the bot's | ||
name in your code. | ||
|
||
<gossip> | ||
The AIML 1.0.1 specification lets engine authors implement the the behavior | ||
of the <gossip> tag however they wish. I haven't yet decided what I'd like | ||
to do with it, so right now it doesn't do anything at all. | ||
|
||
<if> / <else> | ||
These elements appear to have been dropped between AIML 1.0 and AIML 1.0.1. | ||
They may someday be added as a part of an AIML 1.0 backwards-compatibility | ||
mode, but in the meantime, use <condition> instead. | ||
|
||
<javascript> | ||
Support for the JavaScript tag is not anticipated; one of the design | ||
goals of PyAIML is to remain 100% pure standard Python. So until | ||
somebody writes a JavaScript interpreter in Python, PyAIML won't | ||
support the <javascript> tag. On the bright side, it is possible | ||
to simulate the effects of the <javascript> tag (i.e. dynamically- | ||
generated tag contents) using the <system mode="sync"> tag. This | ||
solution has the added advantage of allowing *any* programming | ||
language to be used, not just JavaScript. | ||
UPDATE: The python-spidermonkey project provides a bridge between Python | ||
and the open-source SpiderMonkey JavaScript library. I am currently | ||
investigating the possibility of adding support for the <javascript> | ||
tag ON A PURELY OPTIONAL BASIS. | ||
|
||
<secure> | ||
Some AIML implementations support a non-standard <secure> tag, intended to | ||
wrap parts of a template which should only be processed if the user is | ||
"secure", or trusted. After implementing support for this tag, I realized | ||
that it wasn't doing anything that you can't do with the <condition> tag. | ||
Therefore, I've decided to drop support for the <secure> tag. You can | ||
easily duplicate its effects; simply replace this: | ||
<secure error="you're not allowed">you are allowed</secure> | ||
with this: | ||
<condition name="secure"> | ||
<li value="yes">you are allowed</li> | ||
<li>you are not allowed</li> | ||
</condition> | ||
Then, use the Kernel.setPredicate() call to set the "secure" predicate to | ||
"yes" for any session that you wish to be secure. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
Laundry list of future tasks, in no particular order: | ||
|
||
- AIML 1.0.1 compliance (highest priority): | ||
- Unknown yet well-defined elements (e.g. HTML) inside templates | ||
(see sections 3.2, 3.6). | ||
- AimlParser._validateElemStart() needs to test the well-formedness of | ||
attribute values (for example, making sure that the "index" attribute | ||
has an integer value, and not a string). UPDATE: this works for <star>, | ||
<thatstar> and <topicstar>. Still needs to be written for <input> and <that>, | ||
which take either an integer or an integer pair. | ||
- Support the Program D startup file syntax, or something similar? It | ||
seems to be a good way to initialize bot settings and substitutions. | ||
- Documentation/tutorials. |
Oops, something went wrong.