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:
- 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.
- The Linguistic Analysis module
is the controller class that calls the subordinate worker modules.
- The Word Separation module
breaks up the sentence into words on whitespace.
- The Language Determination module
attempts to guess at what language the user is using..
- 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:
- 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.
- If the word is not a member of any class, the word is looked up
in the Dictionary.
- 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.
- 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.
- Sentence Components takes the linkages
from the Grammar module and puts them into an internal Java class structure.
- 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:
- Proper Noun Resolver resolves proper
nouns, names of people or places, to objects in the hierarchy.
- Pronoun Resolver finds the antecedent
of the pronoun
- Noun Resolver resolves noun phrases to
to an object in the hierarchy.
- FragmentResolver takes a fragment
of a sentence and makes a complete sentence out of it.
- Ellipsis
takes missing parts of the current sentence and fill in parts from the
previous sentence.
- QuestionResolver takes the users answer
to a question posed by the system, and makes an informational statement
out of it.
- Sentence Resolver calls the subordinate
modules to resolve the nouns in the sentence, then the verb.
- Noun Frame Slot will take the Nouns
from the previous two steps and put them into the proper slot of the
Frame structure.
- Verb Prepositional Resolver
will take the prepositional object nouns and place them into the frame.
- 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.
- 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.
- 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.
- The Internal Commands module maps
Fido instructions to internal operations on the database.
- 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.
|