===========
PyJoke
===========

PyJoke is a package for fetching the perfect joke in a database.
You give a sentence, you get a joke. Isn't that great? Common usage is::

    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    from pyjoke.PyJoke import *

    s = "Sentence with keywords"

    p = PyJoke()

    p.changeParams()
    p.changeDatabase("SoftJokes.db","jokesfr",True)
    p.changeDatabase("HardJokes.db","jokes_fr_cat",False)

    if p.params.conv==0:
        print p.getTheJoke(s)
    else:
        for i in range(p.params.conv):
            s = p.getTheJoke(s)
            print "Personne "+str((i%2)+1)+" dit : "+s

PyJoke has been developed for as a NAO module (in French), but can also work as a standalone.
It should be possible to make it work in English.

How does it work?
----------------------------

* Give a sentence to PyJoke (see script above)
* PyJoke will analyse the sentence
* First, create a keywords list (by removing stopwords)
* If POSTAG is active, it will add a score to each kword
* Then, create a query, connect to database and send query
* The query (above) is meant to filter the jokes
  It will get the jokes with at least 1 keyword
* Then, score each joke
* And return the best one

What can the user change?
----------------------------

* Config a MySQL or a SQLite database
* Use of Postag (and the scores)
* NAO mode
* Language (French by default)
* Maximum joke length
* Conversation mode (experimental)

Database format
----------------------------

The joke database needs to have two fields at least:

* text
* score

Text being the joke itself, and score being an arbitrary score that's not going to be used, really (should do that...)

Useful libs and dependencies
----------------------------

PyJoke has dependencies, some are optional

* NTLK
* SQLite (or MySQL)
* YAML
* TreeTagger (opt)
* /usr/lib/sqlite3/pcre.so (opt)
