<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="COPYRIGHT" content="Copyright 2006-2007, International Business Machines Corporation and others. All Rights Reserved.">
<title>New Transliteration Test Files</title>
</head>

<body bgcolor="#FFFFFF">

<h2>New Transliteration Test Files</h2>
<p>The Test_*.html files show the transliteration of characters for given
languages. The sample for each language consists of &quot;What Is Unicode&quot;
in Thai, followed by other available text. The text is broken apart into
sentences for ease of viewing (note: we know of some problems with the sentence
rules for Japanese and Chinese). The left column is the original, and the right
is the romanization. The program also converts back to the original script. If
there is a discrepancy between the source and the reverse transformation, that
is indicated by making the background <font color="#FF0000"><b>red</b></font>
from that point on.</p>
<blockquote>
  <p><i><b>Note: </b>If you have some more text that you would like added to the
  sample, just let me know. I am particularly interested in name lists, since
  they are the typical source.</i></p>
</blockquote>
<h3>Standards</h3>
<p>The goal is to follow a given standard, such as ISO* or UNGEGN wherever
possible. We also need to round-trip, so in some cases, that means adding some
additional accent marks to disambiguate characters. And often the source
standards are missing some characters, such as characters with combining Hamzas
in Arabic. Remember that the goal for these is transliteration (unambiguously
representing all the letters in the original), not transcription (representing
the best pronunciation).</p>
<ul>
  <li><b><a href="Test_Thai-Latin.html">Thai</a>:</b> ISO 11940 &lt; <a href="http://homepage.mac.com/sirbinks/pdf/Thai.r2.pdf">http://homepage.mac.com/sirbinks/pdf/Thai.r2.pdf</a>
    &gt; plus a few items:
    <ul>
      <li>Accents may be added to the Latin for disambiguation.</li>
      <li>In the next release, we'd like to do the UNGEGN version &lt; <a href="http://www.eki.ee/wgrs/rom1_th.pdf">http://www.eki.ee/wgrs/rom1_th.pdf</a>
        &gt; which is probably more useful (and readable), and follows more
        closely the Thai standard.</li>
      <li>Spaces are provided at word-breaks, using the Thai BreakIterator.</li>
      <li>An inherent vowel (&#7885;) is added, as in UNGEGN. The dot is for
        disambiguation.
        <ul>
          <li><i>Note: if the inherent vowel positions cannot be algorithmically
            determined, let me know and I will remove them.</i></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><b><a href="Test_Arabic-Latin.html">Arabic</a>: </b>Generally follows
    UNGEGN &lt; <a href="http://www.eki.ee/wgrs/rom1_ar.pdf">http://www.eki.ee/wgrs/rom1_ar.pdf</a>
    &gt;
    <ul>
      <li>Accents may be added to the Latin for disambiguation.</li>
      <li>Occasionally deviates in the direction of ISO 233 &lt; <a href="http://homepage.mac.com/sirbinks/pdf/Arabic.pdf">http://homepage.mac.com/sirbinks/pdf/Arabic.pdf</a>
        &gt;
        <ul>
          <li>with underdot instead of cedilla for letter like SAD, since those
            are explicitly in Unicode for transliteration of Arabic</li>
          <li>adding extra non-Arabic-language letters, like PEH. Note: not all
            extended Arabic characters are handled yet.</li>
        </ul>
      </li>
      <li>Does <i>not</i> do assimilation of &quot;al&quot;, nor hyphenation of
        it.
        <ul>
          <li>While it could be done, we need to determine whether a prefix
            &quot;al&quot; could occur other than as the definite article (since
            no space is used).</li>
        </ul>
      </li>
      <li>This is transliteration. For <i>transcription</i> one would want an
        engine that added points appropriately to the Hebrew.</li>
    </ul>
  </li>
  <li><b><a href="Test_Hebrew-Latin.html">Hebrew</a></b><b>: </b>Generally
    follows UNGEGN &lt; <a href="http://www.eki.ee/wgrs/rom1_he.pdf">http://www.eki.ee/wgrs/rom1_he.pdf</a>
    &gt;, with some exceptions:
    <ul>
      <li>Accents may be added to the Latin for disambiguation.</li>
      <li>Combinations of dagesh, shin/sin dot that would produce different
        letters are not yet called out.</li>
      <li>Note that the final forms are not preserved. Thus, when going from
        Latin to Hebrew, a character is given final form depending on its
        position.
        <ul>
          <li>E.g. &#1502;&#1501;&#1502;&#1501; =&gt; mmmm =&gt;
            &#1502;&#1502;&#1502;&#1501;</li>
        </ul>
      </li>
      <li>This is transliteration. For <i>transcription</i> one would want an
        engine that added points appropriately to the Hebrew.</li>
      <li>See also &lt; <a href="http://homepage.mac.com/sirbinks/pdf/Hebrew.r1.pdf">http://homepage.mac.com/sirbinks/pdf/Hebrew.r1.pdf</a>
        &gt; for the ISO version. The Chicago Manual of Style has a clear table
        of mappings for the vowel marks.</li>
    </ul>
  </li>
  <li><b><a href="Test_Han-Latin.html">Han</a>:</b> Uses the <a href="http://www.mandarintools.com/cedict.html">CEDICT</a>
    data plus Unicode Unihan <i>kMandarin</i> values for pinyin. Doesn't
    roundtrip!
    <ul>
      <li><i>Note: </i>the Chinese pronunciation of Han characters varies by
        context and grammar, though nowhere near as much a Japanese.
        <ul>
          <li>Ideally we'd have an underlying engine for this. In 2.4 we will
            have a plug-in interface so that people could add one, such as the
            IBM engine.</li>
          <li>The data from CEDICT and Unihan don't list the most frequent
            choice first, so we will be updating that.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="Test_Greek-Latin_UNGEGN.html"><b>Greek/UNGEGN</b></a>: Uses a
    modern Greek transliteration, based on the UNGEGN rules at &lt; <a href="http://www.eki.ee/wgrs/rom1_el.pdf">http://www.eki.ee/wgrs/rom1_el.pdf</a>
    &gt;. This version will not roundtrip ancient Greek.</li>
  <li><a href="Test_Greek-Latin.html"><b>Greek</b></a>: Uses a classic Greek
    transliteration. This version will not roundtrip modern Greek.</li>
</ul>
<h3><b>Notes</b></h3>
<ol>
  <li>For readability, the files have a few other things besides just the
    transliteration:
    <ul>
      <li>The first word of the sentences are titlecased, as are names (where we
        have a name-list, such as in Thai).</li>
      <li>The Latin in the original is mapped to the private-use zone before
        conversion, and then again after conversion. This does have the downside
        that any rules (such as in Han) that need to know the context (e.g. for
        inserting spaces or capitalization) will gum up a little bit. This is
        just an artifact of the test display.</li>
    </ul>
  </li>
  <li>I don't think that ISO 11940 is a particularly good way to romanize, but
    it is at least complete and a standard. So what I am interested in just for
    now is whether the samples in the file follow it (with the above
    exceptions).</li>
  <li>Some of the files also have a set of characters at the end, one character
    per row, with a following row listing the hex and name.</li>
  <li>The source rules for all of these is in the following URL. So if you want
    to know the details of how the characters are handled, that is the place to
    look.
    <ul>
      <li><a href="http://source.icu-project.org/repos/icu/icu/trunk/source/data/translit/">http://source.icu-project.org/repos/icu/icu/trunk/source/data/translit/</a></li>
    </ul>
  </li>
</ol>

</body>

</html>
