Ignore:
Timestamp:
2016-12-17T17:25:08+13:00 (7 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 edited

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();
Note: See TracChangeset for help on using the changeset viewer.