Changeset 299

Show
Ignore:
Timestamp:
06/22/08 20:18:27 (7 months ago)
Author:
chris
Message:

Factor Hebrew glossing morpheme handler out of clause.jsp into its own class.

Change CLM-PERF to CLM-SER2 as requested by Nicolai.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lex/trunk/jsp/clause.jsp

    r268 r299  
    152152                String predicate_text = ""; 
    153153                StringBuffer hebrewText = new StringBuffer(); 
    154                 List morphEdges = new ArrayList(); 
     154                List<MorphEdge> morphEdges = new ArrayList<MorphEdge>(); 
    155155                HebrewMorphemeGenerator generator = new HebrewMorphemeGenerator(); 
    156156                BookData swordVerse = null; 
     
    182182                                        ); 
    183183                                                 
    184                                         class HebrewFeatureConverter implements MorphemeHandler 
    185                                         { 
    186                                                 private List<String[]> m_Columns; 
    187                                                 private MatchedObject m_word; 
    188                                                 private StringBuffer m_hebrew; 
    189                                                 private List m_morphs; 
    190                                                 boolean m_IsFirstWord, m_IsLastWord; 
    191                                                 boolean m_IsMorpheme; 
    192                                                  
    193                                                 public HebrewFeatureConverter(List<String[]> columns, 
    194                                                         MatchedObject word, StringBuffer hebrew, 
    195                                                         List morphs, boolean isFirstWord, 
    196                                                         boolean isLastWord) 
    197                                                 { 
    198                                                         m_Columns = columns; 
    199                                                         m_word   = word; 
    200                                                         m_hebrew = hebrew; 
    201                                                         m_morphs = morphs; 
    202                                                         m_IsFirstWord = isFirstWord; 
    203                                                         m_IsLastWord  = isLastWord; 
    204                                                 } 
    205                                                  
    206                                                 public boolean isMorpheme() 
    207                                                 { 
    208                                                         return m_IsMorpheme; 
    209                                                 } 
    210                                                  
    211                                                 public void convert(String surface,  
    212                                                         boolean lastMorpheme, String desc, 
    213                                                         String morphNode) 
    214                                                 { 
    215                                                         String raw = m_word.getEMdFValue(surface).getString(); 
    216  
    217                                                         String hebrew = HebrewConverter.toHebrew(raw); 
    218                                                         m_hebrew.append(hebrew); 
    219  
    220                                                         String translit = HebrewConverter.toTranslit(raw); 
    221                                                         translit = HebrewConverter.toHtml(translit); 
    222                                                         if (translit.equals("")) translit = "&Oslash;"; 
    223                                                          
    224                                                         if (desc != null && desc.equals("CONJ")) 
    225                                                         { 
    226                                                                 if (m_IsFirstWord) { desc = "CLM"; } 
    227                                                                 else               { desc = "CR"; } 
    228                                                         } 
    229                                                          
    230                                                         // desc += ":" + lastMorpheme + ":" + m_IsLastWord; 
    231                                                          
    232                                                         if (!lastMorpheme) 
    233                                                         { 
    234                                                                 translit += "-"; 
    235                                                                 desc += "-"; 
    236                                                                 m_IsMorpheme = true; 
    237                                                         } 
    238                                                         else if (translit.endsWith("-")) 
    239                                                         { 
    240                                                                 desc += "-"; 
    241                                                                 lastMorpheme = false; 
    242                                                                 m_IsMorpheme = true; 
    243                                                         } 
    244                                                         else 
    245                                                         { 
    246                                                                 m_IsMorpheme = false; 
    247                                                         } 
    248  
    249                                                         if (desc == null) desc = ""; 
    250  
    251                                                         m_Columns.add(new String[]{translit, desc}); 
    252                                                          
    253                                                         if (lastMorpheme && !m_IsLastWord) 
    254                                                         { 
    255                                                                 // blank cell between words 
    256                                                                 m_Columns.add(new String[]{"",""}); 
    257                                                         } 
    258                                                          
    259                                                         m_morphs.add(new MorphEdge(morphNode,  
    260                                                                 translit, m_morphs.size())); 
    261                                                 } 
    262                                         } 
    263  
    264                                         HebrewFeatureConverter hfc =  
    265                                                 new HebrewFeatureConverter(columns, word, hebrewText, 
     184                                        HebrewGlossTableGeneratingMorphemeHandler hmh =  
     185                                                new HebrewGlossTableGeneratingMorphemeHandler( 
     186                                                        columns, word, hebrewText, 
    266187                                                        morphEdges, isFirstWord, 
    267188                                                        !phrases.hasNext() && !words.hasNext()); 
    268189                                                 
    269                                         generator.parse(word, hfc, true, sql); 
     190                                        generator.parse(word, hmh, true, sql); 
    270191                                        isFirstWord = false; 
    271192                                         
    272                                         if (!hfc.isMorpheme()) 
     193                                        if (!hmh.isMorpheme()) 
    273194                                        {                                
    274195                                                hebrewText.append(" "); 
  • lex/trunk/test/com/qwirx/lex/HebrewConverterTest.java

    r252 r299  
    11package com.qwirx.lex; 
    22 
     3import java.util.ArrayList; 
     4import java.util.List; 
     5 
     6import jemdros.MatchedObject; 
     7import jemdros.Sheaf; 
     8import jemdros.SheafConstIterator; 
     9import jemdros.Straw; 
     10import jemdros.StrawConstIterator; 
     11import junit.framework.TestCase; 
     12 
     13import com.qwirx.db.sql.SqlDatabase; 
     14import com.qwirx.lex.emdros.EmdrosDatabase; 
    315import com.qwirx.lex.hebrew.HebrewConverter; 
    4  
    5 import junit.framework.TestCase; 
     16import com.qwirx.lex.morph.HebrewGlossTableGeneratingMorphemeHandler; 
     17import com.qwirx.lex.morph.HebrewMorphemeGenerator; 
     18import com.qwirx.lex.parser.MorphEdge; 
    619 
    720public class HebrewConverterTest extends TestCase 
     
    1427        assertEquals("îm", HebrewConverter.toTranslit("I92Jm")); 
    1528    } 
     29     
     30    SqlDatabase m_SQL; 
     31    EmdrosDatabase m_Emdros; 
    1632 
     33    public void setUp() throws Exception 
     34    { 
     35        m_SQL = Lex.getSqlDatabase("test"); 
     36        m_Emdros = Lex.getEmdrosDatabase("test", "test", m_SQL); 
     37    } 
     38 
     39    private List<String[]> getGlossColumns(int clauseId) 
     40    throws Exception 
     41    { 
     42        StringBuffer hebrewText = new StringBuffer(); 
     43        List<String[]> columns = new ArrayList<String[]>(); 
     44         
     45        Sheaf sheaf = m_Emdros.getSheaf 
     46        ( 
     47            "SELECT ALL OBJECTS IN " + 
     48            "{" + m_Emdros.getMinM() + "-" + m_Emdros.getMaxM() + "} " + 
     49            "WHERE [clause self = " + clauseId + " " + 
     50            "       GET logical_struct_id, logical_structure "+ 
     51            "        [phrase GET phrase_type, phrase_function, argument_name, "+ 
     52            "                    type_id, macrorole_number "+ 
     53            "          [word GET lexeme, phrase_dependent_part_of_speech, " + 
     54            "                    tense, stem, wordnet_gloss, wordnet_synset, " + 
     55            "                    graphical_preformative, " + 
     56            "                    graphical_locative, " + 
     57            "                    graphical_lexeme, " + 
     58            "                    graphical_pron_suffix, " + 
     59            "                    graphical_verbal_ending, " + 
     60            "                    graphical_root_formation, " + 
     61            "                    graphical_nominal_ending, " + 
     62            "                    person, number, gender, state, " + 
     63            "                    surface_consonants, " + 
     64            "                    suffix_person, suffix_number, suffix_gender " + 
     65            "          ]"+ 
     66            "        ]"+ 
     67            "      ]" 
     68        ); 
     69 
     70        MatchedObject clause = null; 
     71        SheafConstIterator sci = sheaf.const_iterator(); 
     72        if (sci.hasNext())  
     73        { 
     74            Straw straw = sci.next(); 
     75            StrawConstIterator swci = straw.const_iterator(); 
     76            if (swci.hasNext())  
     77            { 
     78                clause = swci.next(); 
     79            } 
     80        } 
     81 
     82        SheafConstIterator phrases = clause.getSheaf().const_iterator(); 
     83        List<MorphEdge> morphEdges = new ArrayList<MorphEdge>(); 
     84        boolean isFirstWord = true; 
     85        HebrewMorphemeGenerator generator = new HebrewMorphemeGenerator(); 
     86 
     87        while (phrases.hasNext())  
     88        { 
     89            MatchedObject phrase = 
     90                phrases.next().const_iterator().next(); 
     91 
     92            SheafConstIterator words = phrase.getSheaf().const_iterator(); 
     93             
     94            while (words.hasNext())  
     95            { 
     96                MatchedObject word = words.next().const_iterator().next(); 
     97 
     98                HebrewGlossTableGeneratingMorphemeHandler hmh =  
     99                    new HebrewGlossTableGeneratingMorphemeHandler( 
     100                        columns, word, hebrewText, 
     101                        morphEdges, isFirstWord, 
     102                        !phrases.hasNext() && !words.hasNext()); 
     103                     
     104                generator.parse(word, hmh, true, m_SQL); 
     105            } 
     106        } 
     107         
     108        return columns; 
     109    } 
     110     
     111    public void testGloss() throws Exception 
     112    { 
     113        List<String[]> columns = getGlossColumns(28951); // Gen 2,24(b) 
     114        assertEquals("CLM-",  columns.get(0)[1]); 
     115        assertEquals("SER2-", columns.get(1)[1]); 
     116 
     117        columns = getGlossColumns(590946); // IKON11,2(f) 
     118        assertEquals("P-",    columns.get(0)[1]); 
     119        assertEquals("3Mpl",  columns.get(1)[1]); 
     120        assertEquals("",      columns.get(2)[1]); 
     121        assertEquals("PERF-", columns.get(3)[1]); 
     122    } 
     123     
    17124    public static void main(String[] args) 
    18125    { 
    19126        junit.textui.TestRunner.run(HebrewConverterTest.class); 
    20127    } 
    21  
    22128}