MetaMap 2008 Release Notes

Introduction

This document outlines a number of substantial changes made to produce the 2008 version of MetaMap, the most important of which are
  1. changes in command-line options
  2. the ability to generate XML output, and
  3. changes in MetaMap Machine Output (MMO).
Other less visible changes, which will be mentioned but not described further, are numerous bug fixes, enhancements to the acronym-detection logic, and the removal of a great deal of dead code, which has resulted in a 40% reduction in the size of the MetaMap executable.

Command-Line Options

MetaMap command-line options can be invoked using either a short form, (-A), or a long form, (--strict_model).

New Command-Line Option Names

MetaMap command-line options have historically been the source of confusion, in particular because default options behaved counter-intuitively, in that turning on a default option actually turned off the behavior in question. In order to clarify the behavior of the default options, and to more mnemonically indicate that using them actually turns off the behavior, the default MetaMap command-line options have been renamed as follows:

 Old option name Flag  New option name
 an_derivational_variants -D  all_derivational_variants 
 best_mappings_only -b  compute_all_mappings
 candidates -c  hide_candidates
 mappings -m  hide_mappings
 no_acros_abbrs -a  allow_acros_abbrs
 plain_syntax -p  hide_plain_syntax
 semantic_types -s  hide_semantic_types
 stop_large_n -l  allow_large_n
 tag_text -t  no_tagging

It is important to note that only the names of these options have changed, and not their behavior. E.g., using -t in MetaMap08 turns off tagging, just as it did in previous versions of MetaMap. That option is now more mnemonically called no_tagging instead of tag_text, to indicate that invoking -t turns off tagging. Similarly, using -m in MetaMap08 turns off the display of mappings (but not their computation), just as it did in previous versions of MetaMap. That option is now more mnemonically called hide_mappings, instead of mappings, to indicate that -m turns off the display of mappings.
To repeat: Only the names of the options, and not their behavior, has changed.

Deleted Short Command-Line Options

The short forms -h for help and -w for warnings have been removed. In order to invoke help or warnings, the long forms --help and --warnings must now be used.

Finally, the short forms -0, -1, -2, -3, -4, -5, -6, -7, and -9, for debug0--debug9 have been removed. In order to invoke a debugging option, it is now necessary to call --debug N, where N is one of 0, 1, 2, 3, 4, 5, 6, 7, or 9. It is also possible to invoke debugging using a comma-separated list of the numerical debugging options, e.g., --debug 3,4,5 to turn on several debugging options at once.

XML Output

In order to provide MetaMap output in a well known format, MetaMap08 allows users to generate XML output, in addition to the existing MetaMap Machine Output (MMO).

XML output is generated using the short form -% or the long form --XML, both of which require providing either format or noformat as an argument. The high-level structure of MetaMap XML output corresponds to that of the MMO, and includes the changes to MMO outlined in
Changes in MMO below. The MMO to XML DTD for the XML is also available. Note that MetaMap XML output and MMO are two equivalent ways of representing MetaMap's analysis of text, even though the XML and MMO output of course look extremely different.

MetaMap XML output can be either formatted or unformatted. Formatted XML output is generated by the command-line argument -% format, and is pretty-printed with indentations, as shown in Formatted XML Output Example. Unformatted XML output is generated by the command-line argument -% noformat, and is not pretty-printed, as shown in Unformatted XML Output Example; almost all formatting whitespace and carriage returns are removed in order to conserve disk space.

Note that XML output (both formatted and unformatted) requires far more disk space than MMO. The tradeoff between formatted and unformatted XML output is that formatted XML is human-readable, but requires about 50% more space than unformatted XML output. Conversely, unformatted XML output is not readily human-readable, but requires only about two-thirds of the disk space of formatted XML output. Formatted and unformatted XML output require about six and four times as much space as MMO output, respectively.

Changes in MMO

MetaMap Machine Output (MMO) has undergone a number of enhancements, most notably the addition of positional information (PI). Over the years, we have received numerous requests for the ability to identify the exact location in the original text from which a MetaMap concept was identified. In order to provide this ability, MMO (and XML) now contain information identifying the exact character positions in the original text of for utterances, phrases, candidates, and mappings. MMO also contains several other additions described below.

The changes to MMO are the following:

  • Three new top-level MMO components
    1. args: the command-line arguments with which MetaMap was invoked
    2. aas: the acronyms and abbreviations identified in the input text
    3. negex: the negations identified in the input text
  • Two changes to the internal structure of existing MMO components.
    1. Positional Information (PI) showing character spans in the input text
    2. Source Information (SI) specifying the MetaMap source vocabulary/(ies) in which a concept was found.
    Note that all MMO structures displayed in this document are printed with indentation to make them readable; in actual MMO output, each structure is printed entirely on one line, because MMO output is not intended to be human-readable, but rather postprocessed by downstream programs.

    New Top-Level MMO Components

    As noted above, MMO now contains three new top-level components: args, aas, and negex, each of which will be described in turn.

    The args Term:

    The args term represents the command-line invocation of MetaMap and is of the form

    args(CommandLine, MetaMapOptions)

    For example, suppose MetaMap were invoked as

    metamap -qkC neop,gngm -Z 0708 myfile.txt myfile.out

    The command-line flags have the following significance:

    For this invocation of MetaMap, the args term would be

    
    args('/nfsvol/nls/bin/metamap -qkC neop,gngm -Z 0708 myfile.txt myfile.out',
         [machine_output-[],
          exclude_sts-[neop,gngm],
          relaxed_model-[],
          mm_data_year-'0708',
          infile-'myfile.txt',
          outfile-'myfile.out'])
    

    The CommandLine argument of the args/2 term is simply the command-line call, including the (site-specific) absolute pathname of the binary runtime executable.

    The MetaMapOptions argument is a comma-separated list of terms of the form

    OptionName-OptionValue

    OptionValue is simply [] if the option is a binary switch that requires no value to be specified, as is the case in the example above with machine_output and relaxed_model. The outfile argument need not be specified, because the output file name defaults to the entire input filename with .out appended. In such a case, the outfile argument will still appear in the args term. Had the user not specified myfile.out on the command-line as the output file, the final component of the MetaMapOptions argument of the args term would have been

    outfile-'myfile.txt.out'

    The aas Term:

    MetaMap attempts to identify acronyms and abbreviations (AAs) in the input text by matching a string S of text with a subsequent parenthesized string containing initial (or medial) letters of the words in S. Several examples of AAs discovered by MetaMap are the following:

  • Aachen aphasia test (AAT)
  • American Medical Association (A.M.A.)
  • antihepatocyte growth factor (antiHGF)

    The aas term represents all AAs discovered in the text by MetaMap and is of the form

    aas(AcronymsAndAbbreviations)

    where AcronymsAndAbbreviations is a comma-separated list of 4-tuples of the form

    Acronym * Expansion * CountList * CUIList

    The ``*'' character was chosen as a separator because of its extremely low chance of appearing in the acronym or the expansion. For example, the 4-tuple generated by the input text

    lung cancer (LC)

    is the following:

    ["LC" * "lung cancer" * [1,2,3,11] * ['C0242379','C0684249']

    The components of 4-tuple above are the following:

    Let us now consider a larger example. Suppose the following AAs were discovered in the text:

    The entire aas term would then be

    
    aas([ "LC" * "lung cancer" * [1,2,3,11] * ['C0242379','C0684249'],
          "D" * "density" * [1,1,1,7] * ['C0178587'],
          "P.T.A." * "plasma thromboplastin antecedent" * [6,6,5,32] * ['C0015522'],
          "PATH" * "pituitary adrenotropic hormone" * [1,4,5,30] * [] ]).
    
    

    In the aas term above, pituitary adrenotropic hormone is the only string not mapped to a Metathesaurus concept; its CUIList is therefore the empty list [].

    The negex Term:

    As of this release, the negex term is simply a placeholder of the form neg_list([]). Once Negex is fully incorporated into MetaMap, however, the negex term will be of the form

    neg_list(ListOfNegations)

    where ListOfNegations is a comma-separated list of terms of the form

    
    negation(<type of negation>,
             <negation trigger>,  <trigger positional info>,
             <negated concept>,   <concept positional info>)
    

    For example, the sentence

    The patient denied chest pain, and heart attack was ruled out.

    would generate the negex term

    
    neg_list([negation(nega,
                      'denied',         [13/6],  'chest pain',   [20/10]),
              negation(negb,
                       'was ruled out', [49/13], 'heart attack', [36/12])])
    

    The positional information (PI) is a comma-separated list of StartPos/Length terms representing the starting character position of the text string in question and its length in characters. There can be multiple StartPos/Length terms in a negation term because triggers and concepts can be represented in the text by two or more non-contiguous strings. This point will be explained more fully in the next section.

    Changes to Existing MMO Components

    We now explain the changes to the internal structure of existing MMO terms, which, as noted in the introduction, are of two kinds:

    1. Positional Information (PI) showing character spans in the input text, which appears in utterance, phrase, candidates, and mappings terms; and
    2. Source Information (SI) specifying the MetaMap source vocabulary/(ies) in which a concept was found, which appears only in candidates and mappings terms.
    The changes to the utterance and phrase terms are simpler (only PI was added to them), so we isolate them and present them first, and then explain the changes to candidates and mappings terms, which include both PI and SI.

    Addition of PI in Utterance and Phrase Terms:

    Utterance and phrase terms have undergone only one change: an additional argument at the end of the term representing the PI of the text contained in the utterance or phrase. For example, the previous form of the utterance term was

    
    utterance('11128092.ab.3',
              "All models are created using multiple linear regression (MLR).")
    

    but the new form of the utterance terms is

    
    utterance('11128092.ab.3',
              "All models are created using multiple linear regression (MLR).",
              936/69)
    

    In the new utterance form, 936/69 is the positional information, and indicates that this utterance begins at the 936th character position in the input text, and takes up 69 characters in the text. The alert reader will have noticed that the utterance as printed contains only 63 characters. So why does the PI specify 69 characters? The relevant section of the original input text looks like the following, where each ``·'' raised dot represents a blank space:

    
    ······chain length. All models are created using multiple linear regression
    ······(MLR). Conventional models are proposed for the remaining nine physical
    

    MetaMap automatically compresses all whitespace into one blank; therefore the printed representation of text in MMO shows only one blank, and not the six in the original text. The positional information, however, is faithful to the original text in order to allow users to identify the actual text in question.

    Phrase terms have a PI term of the same form and in the same place as do utterance terms. For example, the previous form of the phrase term was

    
    phrase(models,
          [verb([lexmatch([models]),inputmatch([models]),tag(verb),tokens([models])])])
    

    but the new form of the phrase terms is

    
    phrase(models,
          [verb([lexmatch([models]),inputmatch([models]),tag(verb),tokens([models])])],
          345/6)
    

    As was the case in the in the new form of the utterance term, 345/6 is the positional information, and indicates that the phrase models begins at the 345th character position in the document, and takes up 6 characters in the document.

    Addition of both PI and SI in Candidates and Mappings Terms:

    Candidates and mappings terms have undergone two changes, both in the ev subterms, which now include Positional Information (PI) and Source Information (SI) as their last two arguments.

    For example, the previous form of the candidates terms was

    
    candidates(
       [ev(-1000,'C0026336','Models','Study models',
           [models],[inpr,resd],[[[1,1],[1,1],0]],yes,no),
        ev(-1000,'C0026339','Models','Biological Models',
           [models],[inpr,resd],[[[1,1],[1,1],0]],yes,no),
        ev(-966,'C0870071','Modeling','Modeling',
           [modeling],[inpr,resa],[[[1,1],[1,1],1]],yes,no)])
    

    but the new form of the candidates term is

    
    candidates(
       [ev(-1000,'C0026336','Models','Study models',
           [models],[inpr,resd],[[[1,1],[1,1],0]],yes,no,
           ['MTH','NCI','CSP','LCH','PSY'], [0/6] ),
        ev(-1000,'C0026339','Models','Biological Models',
           [models],[inpr,resd],[[[1,1],[1,1],0]],yes,no,
           ['MSH','MTH','NCI','AOD','CSP','AOT'], [0/6] ),
        ev(-1000,'C0870071','Modeling','Modeling',
           [modeling],[inpr,resa],[[[1,1],[1,1],0]],yes,no,
           ['LCH','NCI','PSY'], [0/8] )])
    

    Similarly, the previous form of the mappings terms was

    
    mappings(
     [map(-1000,
          [ev(-1000,'C0026339','Models','Biological Models',
              [models],[inpr,resd],[[[1,1],[1,1],0]],yes,no)]),
      map(-1000,
          [ev(-1000,'C0026336','Models','Study models',
              [models],[inpr,resd],[[[1,1],[1,1],0]],yes,no)])])
    

    but the new form of the mappings term is

    
    mappings(
       map(-1000,
           [ev(-1000,'C0026339','Models','Biological Models',
               [models],[inpr,resd],[[[1,1],[1,1],0]],yes,no,
               ['MSH','MTH','NCI','AOD','CSP','AOT'],[0/6])]),
       map(-1000,
           [ev(-1000,'C0026336','Models','Study models',
                [models],[inpr,resd],[[[1,1],[1,1],0]],yes,no,
                ['MTH','NCI','CSP','LCH','PSY'],[0/6])])]).
    

    The SI terms (in bold in the two boxes above containing the new candidates and mappings terms) appear in the ev subterms, and consist of comma-separated lists of atoms identifying the Metathesaurus vocabulary/(ies) in which the concept identified in the ev subterm was found.

    The PI terms (in bold italics in the same two boxes above) also appear in the ev subterms immediately after the SI terms, and are comma-separated lists of StartPos/Length terms (just as in the negex term), rather than a single StartPos/Length term (as in utterance and phrase terms) because a concept in be represented in the text by two or more non-contiguous strings. For example, in the utterance

    Molecular electronegative distance vector related to properties of alkanes.

    MetaMap discovers the concept molecular vector. The ev term for this concept would be

    
    ev(-902,'C0872221','molecular vector','molecular vector',
       [molecular,vector],[genf], [[[1,1],[1,1],0],[[4,4],[2,2],0]],yes,no,
       ['CSP'],[173/9,208/6])
    

    because molecular begins at the 173rd character in the citation and spans 9 characters, and vector begins at the 208th character in the citation, and spans 6 characters.

    Formatted XML Output Example

    The XML DTD: MMO to XML DTD (HTML: 8kb).
    The formatted XML output for the input text heart (generated by metamap08 -% format) is the following:

    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE MMOlist PUBLIC
         "-//NLM//DTD MetaMap Machine Output//EN"
         "http://ii-public.nlm.nih.gov/DTD/MMOtoXML.dtd">
    <MMOlist>
    <MMO>
     <Args>
      <Command>MetaMap -Z 08 -% format h</Command>
      <Options Count="4">
       <Option>
        <OptName>mm_data_year</OptName>
        <OptValue>08</OptValue>
       </Option>
       <Option>
        <OptName>XML</OptName>
        <OptValue>format</OptValue>
       </Option>
       <Option>
        <OptName>infile</OptName>
        <OptValue>h</OptValue>
       </Option>
       <Option>
        <OptName>outfile</OptName>
        <OptValue>h.out</OptValue>
       </Option>
      </Options>
     </Args>
     <AAs Count="0" />
     <Negations Count="0" />
     <Utterances Count="1">
      <Utterance>
       <PMID>00000000</PMID>
       <Location>tx</Location>
       <SeqNo>1</SeqNo>
       <UText>heart.</UText>
       <UStartPos>0</UStartPos>
       <USpanLen>7</USpanLen>
       <Phrases Count="1">
        <Phrase>
         <PText>heart.</PText>
         <Tags Count="2">
          <Tag>
           <Type>head</Type>
           <LexMatch>heart</LexMatch>
           <InputMatch>heart</InputMatch>
           <POS>noun</POS>
           <Tokens Count="1">
            <Token>heart</Token>
           </Tokens>
          </Tag>
          <Tag>
           <Type>punc</Type>
           <InputMatch>.</InputMatch>
           <Tokens Count="0" />
          </Tag>
         </Tags>
         <PStartPos>0</PStartPos>
         <PSpanLen>6</PSpanLen>
         <Candidates Count="2">
          <Candidate>
           <NegScore>-1000</NegScore>
           <UMLSCUI>C0018787</UMLSCUI>
           <UMLSConcept>Heart</UMLSConcept>
           <UMLSPreferred>Heart</UMLSPreferred>
           <MatchedWords Count="1">
            <MatchedWord>heart</MatchedWord>
           </MatchedWords>
           <STs Count="1">
            <ST>bpoc</ST>
           </STs>
           <MatchMaps Count="1">
            <MatchMap>
             <TWMatchPosS>1</TWMatchPosS>
             <TWMatchPosE>1</TWMatchPosE>
             <CWMatchPosS>1</CWMatchPosS>
             <CWMatchPosE>1</CWMatchPosE>
             <Variation>0</Variation>
            </MatchMap>
           </MatchMaps>
           <IsHead>yes</IsHead>
           <IsOverMatch>no</IsOverMatch>
           <Sources Count="20">
            <Source>AIR</Source>
            <Source>HL7V2.5</Source>
            <Source>ICNP</Source>
            <Source>LCH</Source>
            <Source>LNC</Source>
            <Source>MSH</Source>
            <Source>MTH</Source>
            <Source>NCI</Source>
            <Source>OMIM</Source>
            <Source>PSY</Source>
            <Source>RCD</Source>
            <Source>SNM</Source>
            <Source>SNOMEDCT</Source>
            <Source>UWDA</Source>
            <Source>CCPSS</Source>
            <Source>SNMI</Source>
            <Source>AOD</Source>
            <Source>CSP</Source>
            <Source>BI</Source>
            <Source>PNDS</Source>
           </Sources>
           <Spans Count="1">
            <Span>
             <StartPos>0</StartPos>
             <SpanLen>5</SpanLen>
            </Span>
           </Spans>
          </Candidate>
          <Candidate>
           <NegScore>-1000</NegScore>
           <UMLSCUI>C1281570</UMLSCUI>
           <UMLSConcept>Heart</UMLSConcept>
           <UMLSPreferred>Entire heart</UMLSPreferred>
           <MatchedWords Count="1">
            <MatchedWord>heart</MatchedWord>
           </MatchedWords>
           <STs Count="1">
            <ST>bpoc</ST>
           </STs>
           <MatchMaps Count="1">
            <MatchMap>
             <TWMatchPosS>1</TWMatchPosS>
             <TWMatchPosE>1</TWMatchPosE>
             <CWMatchPosS>1</CWMatchPosS>
             <CWMatchPosE>1</CWMatchPosE>
             <Variation>0</Variation>
            </MatchMap>
           </MatchMaps>
           <IsHead>yes</IsHead>
           <IsOverMatch>no</IsOverMatch>
           <Sources Count="2">
            <Source>MTH</Source>
            <Source>SNOMEDCT</Source>
           </Sources>
           <Spans Count="1">
            <Span>
             <StartPos>0</StartPos>
             <SpanLen>5</SpanLen>
            </Span>
           </Spans>
          </Candidate>
         </Candidates>
         <Mappings Count="2">
          <Mapping>
           <MapNegScore>-1000</MapNegScore>
           <Candidates Count="1">
            <Candidate>
             <NegScore>-1000</NegScore>
             <UMLSCUI>C1281570</UMLSCUI>
             <UMLSConcept>Heart</UMLSConcept>
             <UMLSPreferred>Entire heart</UMLSPreferred>
             <MatchedWords Count="1">
              <MatchedWord>heart</MatchedWord>
             </MatchedWords>
             <STs Count="1">
              <ST>bpoc</ST>
             </STs>
             <MatchMaps Count="1">
              <MatchMap>
               <TWMatchPosS>1</TWMatchPosS>
               <TWMatchPosE>1</TWMatchPosE>
               <CWMatchPosS>1</CWMatchPosS>
               <CWMatchPosE>1</CWMatchPosE>
               <Variation>0</Variation>
              </MatchMap>
             </MatchMaps>
             <IsHead>yes</IsHead>
             <IsOverMatch>no</IsOverMatch>
             <Sources Count="2">
              <Source>MTH</Source>
              <Source>SNOMEDCT</Source>
             </Sources>
             <Spans Count="1">
              <Span>
               <StartPos>0</StartPos>
               <SpanLen>5</SpanLen>
              </Span>
             </Spans>
            </Candidate>
           </Candidates>
          </Mapping>
          <Mapping>
           <MapNegScore>-1000</MapNegScore>
           <Candidates Count="1">
            <Candidate>
             <NegScore>-1000</NegScore>
             <UMLSCUI>C0018787</UMLSCUI>
             <UMLSConcept>Heart</UMLSConcept>
             <UMLSPreferred>Heart</UMLSPreferred>
             <MatchedWords Count="1">
              <MatchedWord>heart</MatchedWord>
             </MatchedWords>
             <STs Count="1">
              <ST>bpoc</ST>
             </STs>
             <MatchMaps Count="1">
              <MatchMap>
               <TWMatchPosS>1</TWMatchPosS>
               <TWMatchPosE>1</TWMatchPosE>
               <CWMatchPosS>1</CWMatchPosS>
               <CWMatchPosE>1</CWMatchPosE>
               <Variation>0</Variation>
              </MatchMap>
             </MatchMaps>
             <IsHead>yes</IsHead>
             <IsOverMatch>no</IsOverMatch>
             <Sources Count="20">
              <Source>AIR</Source>
              <Source>HL7V2.5</Source>
              <Source>ICNP</Source>
              <Source>LCH</Source>
              <Source>LNC</Source>
              <Source>MSH</Source>
              <Source>MTH</Source>
              <Source>NCI</Source>
              <Source>OMIM</Source>
              <Source>PSY</Source>
              <Source>RCD</Source>
              <Source>SNM</Source>
              <Source>SNOMEDCT</Source>
              <Source>UWDA</Source>
              <Source>CCPSS</Source>
              <Source>SNMI</Source>
              <Source>AOD</Source>
              <Source>CSP</Source>
              <Source>BI</Source>
              <Source>PNDS</Source>
             </Sources>
             <Spans Count="1">
              <Span>
               <StartPos>0</StartPos>
               <SpanLen>5</SpanLen>
              </Span>
             </Spans>
            </Candidate>
           </Candidates>
          </Mapping>
         </Mappings>
        </Phrase>
       </Phrases>
      </Utterance>
     </Utterances>
    </MMO>
    </MMOlist>
    

    Unformatted XML Output Example

    The XML DTD: MMO to XML DTD (HTML: 8kb).
    The unformatted XML output for the input text heart (generated by metamap08 -% noformat) is shown below. The output below attempts to represent the unformatted XML as would appear in an 80-character-wide window, even though the vast bulk of the text is physically all on one line.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE MMOlist PUBLIC "-//NLM//DTD MetaMap Machine Output//EN" "http://ii-pub
    lic.nlm.nih.gov/DTD/MMOtoXML.dtd">
    <MMOlist><MMO><Args><Command>MetaMap -Z 08 -% noformat h</Command><Options Count
    ="4"><Option><OptName>mm_data_year</OptName><OptValue>08</OptValue></Option><Opt
    ion><OptName>XML</OptName><OptValue>noformat</OptValue></Option><Option><OptName
    >infile</OptName><OptValue>h</OptValue></Option><Option><OptName>outfile</OptNam
    e><OptValue>h.out</OptValue></Option></Options></Args><AAs Count="0" /><Negation
    s Count="0" /><Utterances Count="1"><Utterance><PMID>00000000</PMID><Location>tx
    </Location><SeqNo>1</SeqNo><UText>heart.</UText><UStartPos>0</UStartPos><USpanLe
    n>7</USpanLen><Phrases Count="1"><Phrase><PText>heart.</PText><Tags Count="2"><T
    ag><Type>head</Type><LexMatch>heart</LexMatch><InputMatch>heart</InputMatch><POS
    >noun</POS><Tokens Count="1"><Token>heart</Token></Tokens></Tag><Tag><Type>punc<
    /Type><InputMatch>.</InputMatch><Tokens Count="0" /></Tag></Tags><PStartPos>0</P
    StartPos><PSpanLen>6</PSpanLen><Candidates Count="2"><Candidate><NegScore>-1000<
    /NegScore><UMLSCUI>C0018787</UMLSCUI><UMLSConcept>Heart</UMLSConcept><UMLSPrefer
    red>Heart</UMLSPreferred><MatchedWords Count="1"><MatchedWord>heart</MatchedWord
    ></MatchedWords><STs Count="1"><ST>bpoc</ST></STs><MatchMaps Count="1"><MatchMap
    ><TWMatchPosS>1</TWMatchPosS><TWMatchPosE>1</TWMatchPosE><CWMatchPosS>1</CWMatch
    PosS><CWMatchPosE>1</CWMatchPosE><Variation>0</Variation></MatchMap></MatchMaps>
    <IsHead>yes</IsHead><IsOverMatch>no</IsOverMatch><Sources Count="20"><Source>AIR
    </Source><Source>HL7V2.5</Source><Source>ICNP</Source><Source>LCH</Source><Sourc
    e>LNC</Source><Source>MSH</Source><Source>MTH</Source><Source>NCI</Source><Sourc
    e>OMIM</Source><Source>PSY</Source><Source>RCD</Source><Source>SNM</Source><Sour
    ce>SNOMEDCT</Source><Source>UWDA</Source><Source>CCPSS</Source><Source>SNMI</Sou
    rce><Source>AOD</Source><Source>CSP</Source><Source>BI</Source><Source>PNDS</Sou
    rce></Sources><Spans Count="1"><Span><StartPos>0</StartPos><SpanLen>5</SpanLen><
    /Span></Spans></Candidate><Candidate><NegScore>-1000</NegScore><UMLSCUI>C1281570
    </UMLSCUI><UMLSConcept>Heart</UMLSConcept><UMLSPreferred>Entire heart</UMLSPrefe
    rred><MatchedWords Count="1"><MatchedWord>heart</MatchedWord></MatchedWords><STs
     Count="1"><ST>bpoc</ST></STs><MatchMaps Count="1"><MatchMap><TWMatchPosS>1</TWM
    atchPosS><TWMatchPosE>1</TWMatchPosE><CWMatchPosS>1</CWMatchPosS><CWMatchPosE>1<
    /CWMatchPosE><Variation>0</Variation></MatchMap></MatchMaps><IsHead>yes</IsHead>
    <IsOverMatch>no</IsOverMatch><Sources Count="2"><Source>MTH</Source><Source>SNOM
    EDCT</Source></Sources><Spans Count="1"><Span><StartPos>0</StartPos><SpanLen>5</
    SpanLen></Span></Spans></Candidate></Candidates><Mappings Count="2"><Mapping><Ma
    pNegScore>-1000</MapNegScore><Candidates Count="1"><Candidate><NegScore>-1000</N
    egScore><UMLSCUI>C1281570</UMLSCUI><UMLSConcept>Heart</UMLSConcept><UMLSPreferre
    d>Entire heart</UMLSPreferred><MatchedWords Count="1"><MatchedWord>heart</Matche
    dWord></MatchedWords><STs Count="1"><ST>bpoc</ST></STs><MatchMaps Count="1"><Mat
    chMap><TWMatchPosS>1</TWMatchPosS><TWMatchPosE>1</TWMatchPosE><CWMatchPosS>1</CW
    MatchPosS><CWMatchPosE>1</CWMatchPosE><Variation>0</Variation></MatchMap></Match
    Maps><IsHead>yes</IsHead><IsOverMatch>no</IsOverMatch><Sources Count="2"><Source
    >MTH</Source><Source>SNOMEDCT</Source></Sources><Spans Count="1"><Span><StartPos
    >0</StartPos><SpanLen>5</SpanLen></Span></Spans></Candidate></Candidates></Mappi
    ng><Mapping><MapNegScore>-1000</MapNegScore><Candidates Count="1"><Candidate><Ne
    gScore>-1000</NegScore><UMLSCUI>C0018787</UMLSCUI><UMLSConcept>Heart</UMLSConcep
    t><UMLSPreferred>Heart</UMLSPreferred><MatchedWords Count="1"><MatchedWord>heart
    </MatchedWord></MatchedWords><STs Count="1"><ST>bpoc</ST></STs><MatchMaps Count=
    "1"><MatchMap><TWMatchPosS>1</TWMatchPosS><TWMatchPosE>1</TWMatchPosE><CWMatchPo
    sS>1</CWMatchPosS><CWMatchPosE>1</CWMatchPosE><Variation>0</Variation></MatchMap
    ></MatchMaps><IsHead>yes</IsHead><IsOverMatch>no</IsOverMatch><Sources Count="20
    "><Source>AIR</Source><Source>HL7V2.5</Source><Source>ICNP</Source><Source>LCH</
    Source><Source>LNC</Source><Source>MSH</Source><Source>MTH</Source><Source>NCI</
    Source><Source>OMIM</Source><Source>PSY</Source><Source>RCD</Source><Source>SNM<
    /Source><Source>SNOMEDCT</Source><Source>UWDA</Source><Source>CCPSS</Source><Sou
    rce>SNMI</Source><Source>AOD</Source><Source>CSP</Source><Source>BI</Source><Sou
    rce>PNDS</Source></Sources><Spans Count="1"><Span><StartPos>0</StartPos><SpanLen
    >5</SpanLen></Span></Spans></Candidate></Candidates></Mapping></Mappings></Phras
    e></Phrases></Utterance></Utterances></MMO>
    </MMOlist>