Because of a lapse in government funding, the information on this website may not be up to date, transactions submitted via the website may not be processed, and the agency may not be able to respond to inquiries until appropriations are enacted. The NIH Clinical Center (the research hospital of NIH) is open. For more details about its operating status, please visit cc.nih.gov. Updates regarding government operating status and resumption of normal operations can be found at OPM.gov.

Lexical Tools

SPT - Synonyms Mapping Design

I. Introduction
Synonyms mapping uses synonyms source as database mechanism:

  • Vector<SynonymObj> to keep all synonym information
  • Hashtable<String, Vector<Integer>> to keep the indexes of each word

II. Java Classes

  • MappedSynonym.java: a Java object for mapped synonym: synonym|history|depth
    • synonym: the mapped synonym
    • history: the complete (recursive) path of mapping
    • depth: the depth of recursive mapping
      • 0 is itself
      • 1 is non-recursive
  • SynonymsMapping.java: used to find synonyms by simple mapping and recursive mapping

II. Simple Synonyms Mapping

  • lowercase the input word to inWordLc
  • if synonymIndex_ contains inWordLc
    • Get all indexes of inWordLc from synonymIndex_
    • Get all mapped synonyms from synonymList_ by index
    • Instantiate mapped synonyms
      • synonym: mapped string from synonymList_ by index
      • history: inWordLc (the in word)
      • depth: 1
    • Add the mapped synonyms to results

III. Recursive Synonyms Mapping

    Init rSynonyms

  • lowercase the input word to inWordLc
  • Instantiate a mapped synonym for inWordLc
    • synonym: inWordLc
    • history: inWordLc
    • depth: 0 (itself)
  • Initialize results, Vector<MappedSynonym> rSynonyms
  • Add above mapped synonym to rSynonyms

    FindRecursiveSynonyms

  • update rHistory
  • update rDepth
  • Find simple mapped synonyms for the inWordLc
  • if maxDepth is no limit or >= depth, go through all simple mapped synonyms
    • if rSynonyms does not contain found simple mapped synonym
      • update rHistory & rDepth to found simple mapped synonym
      • add found simple mapped synonym to rSynonyms
      • recursively doing these step (call FindRecursiveSynonyms)

    Clean up rSynonyms

  • remove the first element (inWordLc) in rSynonyms

III. Examples

III.1 Synonyms:

Vector<SynonymObj> synonymList_

indexwordsynonym
0dogcanine
1caninedog
2catfeline
3felinecat
4caninemut
5mutcanine

Hashtable<String, Vector<Integer>> synonymIndex_

keyValues
dog[0]
canine[1, 4]
cat[2]
feline[3]
mut[5]

III.2 Simple synonym mapping for "Dog"

  • "Dog" is lowerCase to "dog"
  • Find the indexes from synonymIndex_: [0]
  • Find the mapped synonym from synonymList_:
    • {canine|1|dog}

III.3 Recursive synonym mapping for "Dog"

  • "Dog" is lowerCase to "dog"
  • Add {dog|0|} to rSynonyms
  • Find the mapped synonym of dog: {canine|1|dog}
    => Add into rSynonyms since "canine" does not exist in rSynonyms
    • Find the mapped synonym of canine: {dog|2|canine}
      => Do nonthing since "dog" exists in rSynonyms
    • Find the mapped synonym of canine: {mut|2|canine}
      => Add into rSynonyms since "mut" does not exist in rSynonyms
      • Find the mapped synonym of mut: {canine|3|canine -> mut}
        => Do nonthing since "canine" exists in rSynonyms
  • Remove the first element, {dog|0|}, from rSynonyms
  • The final results of rSynonyms for "Dog" are:
    • {canine|1|dog}
    • {mut|2|canine}