Show
Ignore:
Timestamp:
17.12.2016 17:25:08 (3 years ago)
Author:
davidb
Message:

Experimenting with Lucene/Solr's ICU tokenizer

Location:
other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest
Files:
2 modified

Legend:

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

    r31213 r31243  
    5151      <version>20.0</version> 
    5252    </dependency> 
    53      
     53 
     54    <dependency> 
     55      <groupId>org.apache.lucene</groupId> 
     56      <artifactId>lucene-analyzers-icu</artifactId> 
     57      <version>6.3.0</version> 
     58    </dependency> 
     59 
    5460  </dependencies> 
    5561 
     
    6470       <source>1.8</source> 
    6571       <target>1.8</target> 
     72 
    6673     </configuration> 
    6774       </plugin> 
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/solr-ingest/src/main/java/org/hathitrust/extractedfeatures/SolrDocJSON.java

    r31242 r31243  
    66import java.io.InputStreamReader; 
    77import java.io.OutputStream; 
     8import java.io.Reader; 
     9import java.io.StringReader; 
    810import java.net.HttpURLConnection; 
    911import java.net.URL; 
    1012import java.util.ArrayList; 
    1113import java.util.Iterator; 
     14import java.util.Set; 
    1215 
    1316import org.apache.commons.compress.compressors.CompressorException; 
    1417import org.json.JSONObject; 
     18import org.apache.lucene.analysis.Tokenizer; 
     19import org.apache.lucene.analysis.icu.segmentation.ICUTokenizer; 
     20import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; 
     21import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; 
    1522 
    1623public class SolrDocJSON { 
     
    1825    protected static String generateSolrText(JSONObject ef_token_pos_count, WhitelistBloomFilter whitelist_bloomfilter) 
    1926        { 
    20             StringBuilder sb = new StringBuilder(); 
    21      
     27            boolean solr_icu_tokenize = true; 
     28         
     29            ArrayList<String> tokens = new ArrayList<String>(); 
     30             
    2231            Iterator<String> token_iter = ef_token_pos_count.keys(); 
    2332             
     33            while (token_iter.hasNext()) { 
     34                String token = token_iter.next(); 
     35 
     36                if (solr_icu_tokenize == true) { 
     37                    Reader reader = new StringReader(token); 
     38                     
     39                    Tokenizer tokenizer = new ICUTokenizer(); 
     40                    tokenizer.setReader(reader); 
     41                         
     42                    //TokenStream tokenStream = analyzer.tokenStream(fieldName, reader); 
     43                    //OffsetAttribute offsetAttribute = tokenizer.addAttribute(OffsetAttribute.class); 
     44                    CharTermAttribute charTermAttribute = tokenizer.addAttribute(CharTermAttribute.class); 
     45 
     46                    try { 
     47                        tokenizer.reset(); 
     48                         
     49                        while (tokenizer.incrementToken()) { 
     50                            //int startOffset = offsetAttribute.startOffset(); 
     51                            //int endOffset = offsetAttribute.endOffset(); 
     52                            String term = charTermAttribute.toString(); 
     53                            tokens.add(term); 
     54                        } 
     55                         
     56                        tokenizer.close(); 
     57                    }  
     58                    catch (IOException e) { 
     59                        e.printStackTrace(); 
     60                    } 
     61                } 
     62                else { 
     63                    tokens.add(token); 
     64                } 
     65            } 
     66             
     67            StringBuilder sb = new StringBuilder(); 
     68             
    2469            if (whitelist_bloomfilter == null) { 
    2570 
    26                 while (token_iter.hasNext()) { 
    27                     String token = token_iter.next(); 
     71                boolean first_append = true; 
     72                 
     73                for (int i=0; i<tokens.size(); i++) { 
     74                    String token = tokens.get(i); 
     75                                     
     76                    if (!first_append) { 
     77                        sb.append(" "); 
     78                    } 
     79                    else { 
     80                        first_append = false; 
     81                    } 
    2882                    sb.append(token); 
    29                     if (token_iter.hasNext()) { 
    30                         sb.append(" "); 
    31                     } 
    3283                } 
    3384            } 
    3485            else { 
    35                 while (token_iter.hasNext()) { 
    36                     String token = token_iter.next(); 
     86                boolean first_append = true; 
     87                 
     88                for (int i=0; i<tokens.size(); i++) { 
     89                    String token = tokens.get(i); 
     90                     
    3791                    if (whitelist_bloomfilter.contains(token)) { 
    38                         sb.append(token); 
    39                         if (token_iter.hasNext()) { 
     92                        if (!first_append) { 
    4093                            sb.append(" "); 
    4194                        } 
    42                     } 
    43                 } 
    44                  
     95                        else { 
     96                            first_append = false; 
     97                        } 
     98                        sb.append(token); 
     99                    }                    
     100                } 
     101                     
    45102            } 
    46103            /* 
     
    50107            } 
    51108    */ 
     109             
     110             
    52111             
    53112           return sb.toString();