Changeset 31252


Ignore:
Timestamp:
12/20/16 14:15:05 (4 years ago)
Author:
davidb
Message:

Support for icu-tokenize property added, plus relevant refactoring.

Location:
other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/ef-solr.properties

    r31100 r31252  
    66wcsa-ef-ingest.solr-cloud-nodes = gc0:8983,gc1:8983,gc2:8983,gc3:8983,gc4:8983,gc5:8983,gc6:8983,gc7:8983,gc8:8983,gc9:8983
    77wcsa-ef-ingest.strict-file-io = false
     8wcsa-ef-ingest.icu-tokenize = flase
    89
    910# For guide on number of partitions to use, see "Parallelized collections" section of:
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures/PerPageJSONFlatmap.java

    r31226 r31252  
    3838    protected double            _progress_step;
    3939   
     40    boolean _icu_tokenize;
    4041    boolean _strict_file_io;
    4142   
     
    4344                              String solr_url, String output_dir, int verbosity,
    4445                              DoubleAccumulator progress_accum, double progress_step,
    45                               boolean strict_file_io)
     46                              boolean icu_tokenize, boolean strict_file_io)
    4647    {
    4748        _input_dir  = input_dir;
     
    5556        _progress_step  = progress_step;
    5657       
     58        _icu_tokenize   = icu_tokenize;
    5759        _strict_file_io = strict_file_io;
    5860       
     
    132134                    // Convert to Solr add form
    133135                    JSONObject solr_add_doc_json
    134                         = SolrDocJSON.generateSolrDocJSON(volume_id, page_id, ef_page, _whitelist_bloomfilter);
     136                        = SolrDocJSON.generateSolrDocJSON(volume_id, page_id, ef_page, _whitelist_bloomfilter,_icu_tokenize);
    135137                    solr_add_doc_json.put("filename_json_bz2", output_json_bz2);
    136138
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures/PerVolumeJSON.java

    r31226 r31252  
    11package org.hathitrust.extractedfeatures;
     2
     3import java.io.IOException;
    24
    35import org.apache.spark.api.java.function.VoidFunction;
     
    3234    protected double            _progress_step;
    3335   
     36     boolean _icu_tokenize;
     37     boolean _strict_file_io;
     38     
    3439    public PerVolumeJSON(String input_dir, String whitelist_filename,
    3540                         String solr_url, String output_dir, int verbosity,
    36                          DoubleAccumulator progress_accum, double progress_step)
     41                         DoubleAccumulator progress_accum, double progress_step,
     42                         boolean icu_tokenize, boolean strict_file_io)
    3743    {
    3844        _input_dir  = input_dir;
     
    4652        _progress_step  = progress_step;
    4753       
     54        _icu_tokenize   = icu_tokenize;
     55        _strict_file_io = strict_file_io;
     56       
    4857        _whitelist_bloomfilter = null;
    4958    }
    5059   
    5160    //public Iterator<String> call(String json_file_in)
    52     public void call(String json_file_in)
     61    public void call(String json_file_in) throws IOException
    5362    {
    5463        if ((_whitelist_filename != null) && (_whitelist_bloomfilter == null)) {
     
    5665        }
    5766
    58         JSONObject extracted_feature_record = JSONClusterFileIO.readJSONFile(_input_dir + "/" + json_file_in);
     67        String full_json_file_in = _input_dir + "/" + json_file_in;
     68        JSONObject extracted_feature_record = JSONClusterFileIO.readJSONFile(full_json_file_in);
    5969       
    60         String volume_id = extracted_feature_record.getString("id");
    61        
    62         //JSONObject ef_metadata = extracted_feature_record.getJSONObject("metadata");
    63         //String title= ef_metadata.getString("title");
    64        
    65         JSONObject ef_features = extracted_feature_record.getJSONObject("features");
    66        
    67        
    68         int ef_page_count = ef_features.getInt("pageCount");
    69        
    70         if (_verbosity >= 1) {
    71             System.out.println("Processing: " + json_file_in);
    72             System.out.println("  pageCount = " + ef_page_count);
    73         }
    74        
    75         JSONArray ef_pages = ef_features.getJSONArray("pages");
    76         int ef_num_pages = ef_pages.length();
    77        
    78         // Make directory for page-level JSON output
    79         String json_dir = ClusterFileIO.removeSuffix(json_file_in,".json.bz2");
    80         String page_json_dir = json_dir + "/pages";
    81        
    82         if (_output_dir != null) {
    83             ClusterFileIO.createDirectoryAll(_output_dir + "/" + page_json_dir);
    84         }
    85        
    86         //ArrayList<String> ids = new ArrayList<String>(ef_num_pages);
    87         for (int i = 0; i < ef_page_count; i++) {
    88             String formatted_i = String.format("page-%06d", i);
    89             String page_id = volume_id + "." + formatted_i;
    90        
    91             if (_verbosity >= 2) {
    92               System.out.println("  Page: " + page_id);
     70        if (extracted_feature_record != null) {
     71            String volume_id = extracted_feature_record.getString("id");
     72
     73            //JSONObject ef_metadata = extracted_feature_record.getJSONObject("metadata");
     74            //String title= ef_metadata.getString("title");
     75
     76            JSONObject ef_features = extracted_feature_record.getJSONObject("features");
     77
     78            int ef_page_count = ef_features.getInt("pageCount");
     79
     80            if (_verbosity >= 1) {
     81                System.out.println("Processing: " + json_file_in);
     82                System.out.println("  pageCount = " + ef_page_count);
    9383            }
    94            
    95             String output_json_bz2 = page_json_dir +"/" + formatted_i + ".json.bz2";
    96             //ids.add(output_json_bz2); // ****
    97            
    98             if (i==0) {
    99                 System.out.println("Sample output JSON page file: " + output_json_bz2);
     84
     85            JSONArray ef_pages = ef_features.getJSONArray("pages");
     86            int ef_num_pages = ef_pages.length();
     87
     88            // Make directory for page-level JSON output
     89            String json_dir = ClusterFileIO.removeSuffix(json_file_in,".json.bz2");
     90            String page_json_dir = json_dir + "/pages";
     91
     92            if (_output_dir != null) {
     93                ClusterFileIO.createDirectoryAll(_output_dir + "/" + page_json_dir);
    10094            }
    101            
    102             JSONObject ef_page = ef_pages.getJSONObject(i);
    10395
    104             if (ef_page != null) {
    105                 // Convert to Solr add form
    106                 JSONObject solr_add_doc_json
    107                     = SolrDocJSON.generateSolrDocJSON(volume_id, page_id, ef_page, _whitelist_bloomfilter);
     96            //ArrayList<String> ids = new ArrayList<String>(ef_num_pages);
     97            for (int i = 0; i < ef_page_count; i++) {
     98                String formatted_i = String.format("page-%06d", i);
     99                String page_id = volume_id + "." + formatted_i;
    108100
    109            
    110                 if ((_verbosity >=2) && (i==20)) {
    111                     System.out.println("==================");
    112                     System.out.println("Sample output Solr add JSON [page 20]: " + solr_add_doc_json.toString());
    113                     System.out.println("==================");
     101                if (_verbosity >= 2) {
     102                    System.out.println("  Page: " + page_id);
    114103                }
    115                
    116                            
    117                 if (_solr_url != null) {
     104
     105                String output_json_bz2 = page_json_dir +"/" + formatted_i + ".json.bz2";
     106                //ids.add(output_json_bz2); // ****
     107
     108                if (i==0) {
     109                    System.out.println("Sample output JSON page file: " + output_json_bz2);
     110                }
     111
     112                JSONObject ef_page = ef_pages.getJSONObject(i);
     113
     114                if (ef_page != null) {
     115                    // Convert to Solr add form
     116                    JSONObject solr_add_doc_json
     117                    = SolrDocJSON.generateSolrDocJSON(volume_id, page_id, ef_page, _whitelist_bloomfilter, _icu_tokenize);
     118
     119
    118120                    if ((_verbosity >=2) && (i==20)) {
    119121                        System.out.println("==================");
    120                         System.out.println("Posting to: " + _solr_url);
     122                        System.out.println("Sample output Solr add JSON [page 20]: " + solr_add_doc_json.toString());
    121123                        System.out.println("==================");
    122124                    }
    123                     SolrDocJSON.postSolrDoc(_solr_url, solr_add_doc_json);
     125
     126
     127                    if (_solr_url != null) {
     128                        if ((_verbosity >=2) && (i==20)) {
     129                            System.out.println("==================");
     130                            System.out.println("Posting to: " + _solr_url);
     131                            System.out.println("==================");
     132                        }
     133                        SolrDocJSON.postSolrDoc(_solr_url, solr_add_doc_json);
     134                    }
     135
     136                    if (_output_dir != null) {
     137                        if ((_verbosity >=2) && (i==20)) {
     138                            System.out.println("==================");
     139                            System.out.println("Saving to: " + _output_dir);
     140                            System.out.println("==================");
     141                        }
     142                        SolrDocJSON.saveSolrDoc(solr_add_doc_json, _output_dir + "/" + output_json_bz2);
     143                    }
     144                }
     145                else {
     146                    System.err.println("Skipping: " + page_id);
    124147                }
    125148
    126                 if (_output_dir != null) {
    127                     if ((_verbosity >=2) && (i==20)) {
    128                         System.out.println("==================");
    129                         System.out.println("Saving to: " + _output_dir);
    130                         System.out.println("==================");
    131                     }
    132                     SolrDocJSON.saveSolrDoc(solr_add_doc_json, _output_dir + "/" + output_json_bz2);
    133                 }
     149            }
     150        }
     151        else {
     152            // File did not exist, or could not be parsed
     153            String mess = "Failed to read in bzipped JSON file '" + full_json_file_in + "'";
     154            if (_strict_file_io) {
     155                throw new IOException(mess);
    134156            }
    135157            else {
    136                 System.err.println("Skipping: " + page_id);
     158                System.err.println("Warning: " + mess);
     159                System.out.println("Warning: " + mess);
    137160            }
    138            
    139161        }
    140        
    141162       
    142163        //ids.add(volume_id);
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures/PerVolumeWordStreamFlatmap.java

    r31242 r31252  
    2020    protected double            _progress_step;
    2121   
     22    boolean _icu_tokenize;
    2223    boolean _strict_file_io;
    2324   
    2425    public PerVolumeWordStreamFlatmap(String input_dir, int verbosity,
    2526                              DoubleAccumulator progress_accum, double progress_step,
     27                              boolean icu_tokenize,
    2628                              boolean strict_file_io)
    2729    {
     
    3234        _progress_step  = progress_step;
    3335       
     36        _icu_tokenize   = icu_tokenize;
    3437        _strict_file_io = strict_file_io;
    3538    }
     
    8790                if (ef_page != null) {
    8891                   
    89                     ArrayList<String> page_word_list = SolrDocJSON.generateTokenPosCountText(volume_id, page_id, ef_page);                 
     92                    ArrayList<String> page_word_list = SolrDocJSON.generateTokenPosCountText(volume_id, page_id, ef_page, _icu_tokenize);                   
    9093                    all_word_list.addAll(page_word_list);
    9194                }
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures/ProcessForSolrIngest.java

    r31220 r31252  
    121121        System.err.println();
    122122       
     123        boolean icu_tokenize = Boolean.getBoolean("wcsa-ef-ingest.icu-tokenize");
     124        boolean strict_file_io = Boolean.getBoolean("wcsa-ef-ingest.strict-file-io");
     125       
    123126        PerVolumeJSON per_vol_json = new PerVolumeJSON(_input_dir,_whitelist_filename,
    124                                                        _solr_url,_output_dir,_verbosity, progress_accum,per_vol);
     127                                                       _solr_url,_output_dir,_verbosity, progress_accum,per_vol,
     128                                                       icu_tokenize,strict_file_io);
    125129
    126130        json_list_data.foreach(per_vol_json);
     
    161165        DoubleAccumulator per_vol_progress_accum = jsc.sc().doubleAccumulator("Per Volume Progress Percent");
    162166       
    163         //String strict_file_io_str = System.getProperty("wcsa-ef-ingest.strict-file-io","true");
     167        boolean icu_tokenize = Boolean.getBoolean("wcsa-ef-ingest.icu-tokenize");
    164168        boolean strict_file_io = Boolean.getBoolean("wcsa-ef-ingest.strict-file-io");
    165                
     169       
    166170        PerPageJSONFlatmap paged_solr_json_flatmap
    167171            = new PerPageJSONFlatmap(_input_dir,_whitelist_filename,
    168172                                     _solr_url,_output_dir,_verbosity,
    169173                                     per_vol_progress_accum,per_vol,
    170                                      strict_file_io);
     174                                     icu_tokenize,strict_file_io);
    171175        JavaRDD<JSONObject> per_page_jsonobjects = json_list_data.flatMap(paged_solr_json_flatmap).cache();
    172176       
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures/ProcessForWhitelist.java

    r31251 r31252  
    7272       
    7373        boolean strict_file_io = Boolean.getBoolean("wcsa-ef-ingest.strict-file-io");
    74                
     74        boolean icu_tokenize = Boolean.getBoolean("wcsa-ef-ingest.icu-tokenize");
     75       
    7576        PerVolumeWordStreamFlatmap paged_solr_wordfreq_flatmap
    7677            = new PerVolumeWordStreamFlatmap(_input_dir,_verbosity,
    7778                                     per_vol_progress_accum,per_vol,
     79                                     icu_tokenize,
    7880                                     strict_file_io);
    7981        JavaRDD<String> words = json_list_data.flatMap(paged_solr_wordfreq_flatmap);
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures/SolrDocJSON.java

    r31245 r31252  
    2424public class SolrDocJSON {
    2525
    26     protected static ArrayList<String> getTokenPosCountWords(JSONObject ef_token_pos_count, String page_id)
    27     {
    28         boolean solr_icu_tokenize = true;
     26    protected static ArrayList<String> getTokenPosCountWords(JSONObject ef_token_pos_count, String page_id,
     27                                                             boolean icu_tokenize)
     28    {
    2929       
    3030        ArrayList<String> words = new ArrayList<String>();
     
    3636                String token = token_iter.next();
    3737               
    38                 if (solr_icu_tokenize == true) {
     38                if (icu_tokenize == true) {
    3939                    Reader reader = new StringReader(token);
    4040                   
     
    7979   
    8080    protected static String generateSolrText(JSONObject ef_token_pos_count, String page_id,
    81                                             WhitelistBloomFilter whitelist_bloomfilter)
    82     {
    83         ArrayList<String> tokens = getTokenPosCountWords(ef_token_pos_count, page_id);
     81                                            WhitelistBloomFilter whitelist_bloomfilter, boolean icu_tokenize)
     82    {
     83        ArrayList<String> tokens = getTokenPosCountWords(ef_token_pos_count, page_id,icu_tokenize);
    8484
    8585        StringBuilder sb = new StringBuilder();
     
    125125
    126126    protected static JSONObject generateSolrDocJSON(String volume_id, String page_id, JSONObject ef_page,
    127                                                     WhitelistBloomFilter whitelist_bloomfilter)
     127                                                    WhitelistBloomFilter whitelist_bloomfilter, boolean icu_tokenize)
    128128    {
    129129        JSONObject solr_update_json = null;
     
    137137                    JSONObject solr_add_json = new JSONObject();
    138138   
    139                     String text = generateSolrText(ef_token_pos_count,page_id,whitelist_bloomfilter);
     139                    String text = generateSolrText(ef_token_pos_count,page_id,whitelist_bloomfilter,icu_tokenize);
    140140                   
    141141                    JSONObject solr_doc_json = new JSONObject();
     
    213213    }
    214214
    215     protected static ArrayList<String> generateTokenPosCountText(String volume_id, String page_id, JSONObject ef_page)
     215    protected static ArrayList<String> generateTokenPosCountText(String volume_id, String page_id, JSONObject ef_page,
     216                                                                 boolean icu_tokenize)
    216217    {
    217218        ArrayList<String> word_list = null;
     
    221222            if (ef_body != null) {
    222223                JSONObject ef_token_pos_count = ef_body.getJSONObject("tokenPosCount");
    223                 word_list = getTokenPosCountWords(ef_token_pos_count,page_id);
     224                word_list = getTokenPosCountWords(ef_token_pos_count,page_id,icu_tokenize);
    224225            }
    225226            else {
Note: See TracChangeset for help on using the changeset viewer.