What's New
About Fido
Web Services
Developer Info
Online Demo
 Other Links 
Source and project information at:

SourceForge Logo

For questions, email:
Chad Dionis

 Fido Database Design 

Design Document

Click on one of the boxes in the diagram to get a detailed design. --> The text following the diagram provides a brief introduction to the flow.

Brief (really brief) flow:

  1. The user enters a command into the client. This can be typed, or if voice recognition is used, the command can be spoken. When the command reaches the server, it is in a stream of characters.
  2. The Linguistic Analysis module is the controller class that calls the subordinate worker modules.
  3. The Word Separation module breaks up the sentence into words on whitespace.
  4. The Language Determination module attempts to guess at what language the user is using..
  5. The list of words is passed to the Word Lookup module to find all of the words in the dictionary. This module uses three methods to find the word in the dictionary:
    1. The word is passed to the Word Classification module to look for classes of words, such as numbers and dates. Instead of storing the numbers zero to infinity in the dictionary, only the class Numbers is stored.
    2. If the word is not a member of any class, the word is looked up in the Dictionary.
    3. If the word is not found in the Dictionary, it is sent to the Morphology module to have its affixes and suffixes removed to return the word to its base form. Instead of storing the plural of every word, this module strips the plural ending off so the word can be searched for in the Dictionary.
  6. Once all of the words have been found in the dictionary, the Grammar module uses the Grammar String from each dictionary entry to form a sentence.
  7. Sentence Components takes the linkages from the Grammar module and puts them into an internal Java class structure.
  8. Resolver identifies all of the noun phrases of the sentence and resolve them to one instance in the Noun Hierarchy. SentenceComponents will determine the type of word, either a Noun, Pronoun, or ProperNoun. Depending on the type, one of the following three modules will handle the request:
    1. Proper Noun Resolver resolves proper nouns, names of people or places, to objects in the hierarchy.
    2. Pronoun Resolver finds the antecedent of the pronoun
    3. Noun Resolver resolves noun phrases to to an object in the hierarchy.
  9. FragmentResolver takes a fragment of a sentence and makes a complete sentence out of it.
    1. Ellipsis takes missing parts of the current sentence and fill in parts from the previous sentence.
    2. QuestionResolver takes the users answer to a question posed by the system, and makes an informational statement out of it.
  10. Sentence Resolver calls the subordinate modules to resolve the nouns in the sentence, then the verb.
    1. Noun Frame Slot will take the Nouns from the previous two steps and put them into the proper slot of the Frame structure.
    2. Verb Prepositional Resolver will take the prepositional object nouns and place them into the frame.
    3. Verb Resolver will take all of the nouns in the frame, and the the verb and determine an action to take, if one makes sense for the grammar identified.
  11. The Discourse Resolver module will take the final meaning of the sentence and fill in the parts of the Discourse module for use by following sentences to resolve ellipsis.
  12. Processing Engine takes the verb resolved from the previous step and executes the transaction associated with it. A transaction has preconditions and postconditions, as well as a single instruction to execute. This module executes all of the above.
    1. The Internal Commands module maps Fido instructions to internal operations on the database.
  13. Response Generator module is constantly updated during the processing of a command. When the command is complete, or has an error, the Response class is called upon to generate the Natural Language that is passed back to the user to tell the result.
The Data Mining Thread module is a continuously running thread that looks for patterns in the database and atttempts to make generalizations.

Last modified: February 05 2003 00:03:11
© 2002 Fido Development Team