Changeset 31509 for other-projects

Show
Ignore:
Timestamp:
13.03.2017 20:50:06 (2 years ago)
Author:
davidb
Message:

LangPos? determination changed to lock into first match, rather than trying to populate all model-predicted languages with the determined POS (which gets mixed up when l=en,de and POS=NE for example -- de goes wrong, has no match)

Location:
other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures/SolrDocJSON.java

    r31505 r31509  
    1919import org.json.JSONArray; 
    2020import org.json.JSONObject; 
     21 
     22import scala.Tuple2; 
     23 
    2124import org.apache.lucene.analysis.TokenStream; 
    2225import org.apache.lucene.analysis.Tokenizer; 
     
    388391            int text_len = text_al.size(); 
    389392             
     393            /* 
    390394            for (int li=0; li<lang_len; li++) { 
    391395                String lang_key = lang_list[li]; 
     
    393397                if (universal_langmap.containsLanguage(lang_key)) 
    394398                { 
     399                */ 
    395400                    HashMap<String,JSONArray> pos_lang_text_field_map = new HashMap<String,JSONArray>(); 
    396401                     
     
    405410                            String opennlp_pos_key = pos_tags[pti]; 
    406411                             
    407                             String upos = universal_langmap.getUniversalLanguagePOS(lang_key, opennlp_pos_key); 
    408                             String pos_lang_text_field = lang_key + "_" + upos + "_htrctoken"; 
     412                            Tuple2<String,String> lang_pos_pair = universal_langmap.getUniversalLanguagePOSPair(lang_list, opennlp_pos_key); 
     413                            String selected_lang = lang_pos_pair._1; 
     414                            String upos = lang_pos_pair._2; 
     415                             
     416                            String pos_lang_text_field = selected_lang; 
     417                            if (upos != null) { 
     418                                pos_lang_text_field += "_" + upos;  
     419                            } 
     420                            pos_lang_text_field += "_htrctoken"; 
    409421                             
    410422                            if (!pos_lang_text_field_map.containsKey(pos_lang_text_field)) { 
     
    424436                        solr_doc_json.put(lang_text_field, json_values);  
    425437                    } 
     438                    /* 
    426439                } 
    427440                else { 
     
    440453                 
    441454            } 
    442              
     455            */ 
    443456        } 
    444457    } 
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures/UniversalPOSLangMap.java

    r31506 r31509  
    1111import java.util.stream.Collectors; 
    1212import java.util.stream.Stream; 
     13 
     14import scala.Tuple2; 
    1315 
    1416public class UniversalPOSLangMap  
     
    8385    } 
    8486 
    85     public String getUniversalLanguagePOS(String lang_key,String opennlp_pos_key) 
     87    public String getUniversalLanguagePOSUnchecked(String lang_key,String opennlp_pos_key) 
    8688    { 
    8789        String universal_pos = null; 
     
    9092        if (langmap != null) { 
    9193            universal_pos = langmap.get(opennlp_pos_key); 
    92             if (universal_pos == null) { 
    93                 String missing_lang_pos = lang_key + ":" + opennlp_pos_key; 
    94                  
    95                 Integer mpos_freq = 0; 
    96                 if (_missing_pos.containsKey(missing_lang_pos)) { 
    97                     mpos_freq = _missing_pos.get(missing_lang_pos); 
    98                 } 
    99                 else { 
    100                     System.err.println("Warning: for language key '"+lang_key 
    101                             +"' failed to find POS '" + opennlp_pos_key + "'"); 
    102                     System.err.println("Defaulting to POS 'X' (i.e., 'other')"); 
    103                 } 
    104                 mpos_freq++; 
    105                 _missing_pos.put(lang_key,mpos_freq); 
    106                  
    107                 universal_pos = "X"; 
    108             } 
    10994        } 
    11095         
     
    11297    }  
    11398     
     99    public String getUniversalLanguagePOSChecked(String lang_key,String opennlp_pos_key) 
     100    { 
     101        if (!_all_langmaps.containsKey(lang_key)) { 
     102            // Not a language with a POS map 
     103            return ""; 
     104        } 
     105         
     106        String universal_pos = null; 
     107         
     108        HashMap<String,String> langmap = _all_langmaps.get(lang_key); 
     109        universal_pos = langmap.get(opennlp_pos_key); 
     110         
     111        if (universal_pos == null) { 
     112            String missing_lang_pos = lang_key + ":" + opennlp_pos_key; 
     113 
     114            Integer mpos_freq = 0; 
     115            if (_missing_pos.containsKey(missing_lang_pos)) { 
     116                mpos_freq = _missing_pos.get(missing_lang_pos); 
     117            } 
     118            else { 
     119                System.err.println("Warning: for language key '"+lang_key 
     120                        +"' failed to find POS '" + opennlp_pos_key + "'"); 
     121                System.err.println("Defaulting to POS 'X' (i.e., 'other')"); 
     122            } 
     123            mpos_freq++; 
     124            _missing_pos.put(missing_lang_pos,mpos_freq); 
     125 
     126            universal_pos = "X"; 
     127        } 
     128         
     129        return universal_pos; 
     130    }  
     131     
     132    public Tuple2<String,String> getUniversalLanguagePOSPair(String[] lang_keys,String opennlp_pos_key) 
     133    { 
     134        String universal_pos = null; 
     135        String selected_lang = null; 
     136         
     137        for (int li=0; li<lang_keys.length; li++) { 
     138            String lang_key = lang_keys[li]; 
     139             
     140            universal_pos = getUniversalLanguagePOSUnchecked(lang_key,opennlp_pos_key); 
     141            if (universal_pos != null) { 
     142                selected_lang = lang_key; 
     143                break; 
     144            } 
     145        } 
     146     
     147        if (universal_pos == null) { 
     148            // Failed to any match in any of the given languages 
     149            // => Lock onto the first language (highest probability when modeled) 
     150            selected_lang = lang_keys[0]; 
     151             
     152            if (!_all_langmaps.containsKey(selected_lang)) { 
     153                // Not a language with a POS map 
     154                return new Tuple2<String,String>(selected_lang,null); 
     155            } 
     156             
     157            // If here, then is a POS language => default to "X"  
     158             
     159            String missing_lang_pos = selected_lang + ":" + opennlp_pos_key; 
     160 
     161            Integer mpos_freq = 0; 
     162            if (_missing_pos.containsKey(missing_lang_pos)) { 
     163                mpos_freq = _missing_pos.get(missing_lang_pos); 
     164            } 
     165            else { 
     166                System.err.println("Warning: for language key '"+selected_lang 
     167                        +"' failed to find POS '" + opennlp_pos_key + "'"); 
     168                System.err.println("Defaulting to POS 'X' (i.e., 'other')"); 
     169            } 
     170            mpos_freq++; 
     171            _missing_pos.put(missing_lang_pos,mpos_freq); 
     172 
     173            universal_pos = "X"; 
     174        } 
     175 
     176        return new Tuple2<String,String>(selected_lang,universal_pos); 
     177    }  
    114178}