< Back

Lab 32: Loebner Competition

As usual, create a directory to hold today's files. All programs that you write today should be stored in this directory.

$ cd ~/cs120/labs
$ mkdir lab32
$ cd lab32


Loebner Competition

Modify Chat Bot Output Format

All chat bot programs must have the same output format so that it is not possible to distinguish between bot and human based on format.

  1. Modify your chat bot python program's output so that it conforms to the following standard:
    1. The bot should prompt for user input first
    2. The program should not print anything before the first prompt
    3. The bot should use the prompt text "> " (without the quotes)
    4. The bot should not prefix bot output with anything

    For example, the output of the program should look like:

    > hello bot
    hello human
    > can you pass a Turing test?
    no, do you want to play chess?
    
  2. Download the python program verify_bot.py and put it in the same directory as your chat bot python file.
  3. From the directory containing your bot program, run the verify bot program by typing python3 verify_bot.py YOUR_BOT_FILE_NAME.py. Note, YOUR_BOT_FILE_NAME.py is the name of your chat bot python file.
  4. Wait until everybody's bot file is successfully verified before proceeding.

Run Bot Server

The bot server will run in the background and allow other people to chat with your chat bot program.

  1. Download the python program bot_server.py and put it in the same directory as your chat bot python file.
  2. From the directory containing your bot program, run the bot server by typing python3 bot_server.py YOUR_BOT_FILE_NAME.py. Note, YOUR_BOT_FILE_NAME.py is the name of your chat bot python file.
  3. Wait until everybody's bot server is running before proceeding.

Run Client

The client program will communicate with the server to determine who you will chat with and will connect you to the bot or person you will chat with.

  1. Download the python program loebner_client.py and put it in the same directory as your chat bot python file.
  2. From the directory containing your bot program, run the client by typing python3 loebner_client.py.
  3. Wait until everybody's has connected to the server.
  4. Chat.
  5. When the chat is over, evaluate who or what you were chatting with.

Challenge

Spell Checking

You are probably as reliant on spell checking as I am. It is a process that has evolved tremendously over the past couple of decades. Real spell checkers us a data structure known as a Tree to make retreiving of mispelled words incredibly efficient. However, if you ignore the efficiency, generating some close suggestions for mispelled words is not terribly complicated

Details

Create a file called spell_check_word.py That will allow a user to type in a word to get spell checked. Your program will read in a dictionary of words that it knows are correctly spelled. If the word the user typed in is in the dictionary file, then output that the word is spelled correctly. If it is not in the dictionary file, output all of the words that have the smallest hamming distance with the word the user typed in.

The hamming distance between the two words are the number of characters that need to be flipped in order to make the words the same. Note that the hamming distance between two words is only defined when the strings are of the same length.

Word 1 Word 1 Hamming Distance
hello hello 0
hello helol 2
hello world 4

Example

$ python3 spell_checker.py 
What do you want to spell check? helol
Suggestions:
helot

$ python3 spell_checker.py 
What do you want to spell check? hello
hello is spelled correctly

Hint

  • Create a function called compute_hamming_distance(word1, word2). This function takes two strings of the same length as a parameter. It should return the hamming distance between the two words, as an integer.
  • Create a function called read_dictionary_file(file_name). The function should take a single parameter, a string which is the name of a text file representing the correctly spelled words. It should return a list of the strings from the file. Make sure you strip the whitespace off of the words from the file, otherwise your length comparisons will be incorrect.
  • You need to iterate over the entirety of the word list to find the list of suggestions. You will keep track of the smallest known hamming distance so far, as well as the list of words that have that hamming distance. If you ever find a word with a smaller hamming distance, clear out the old list and update the current known smallest hamming distance.
  • After you have tested the above functions, write a function that performs all of the steps of the program. It should use the input function to get a word from the user, and it should print out the list words with the minimum hamming distance.