Changeset 6065 for SRUAggregator


Ignore:
Timestamp:
02/26/15 16:17:04 (9 years ago)
Author:
emanuel.dima@uni-tuebingen.de
Message:
  1. alpha 25: removed unused iso-639-2 support and unused german tokenizer; fixed bug related to xml unencoding; changed weblicht config
Location:
SRUAggregator/trunk
Files:
3 deleted
11 edited
1 copied

Legend:

Unmodified
Added
Removed
  • SRUAggregator/trunk/aggregator.yml

    r6057 r6065  
    11aggregatorParams:
    2   # CENTER_REGISTRY_URL: http://centres.clarin.eu/restxml/
     2  CENTER_REGISTRY_URL: http://centres.clarin.eu/restxml/
    33  additionalCQLEndpoints:
    44    - https://clarin.ids-mannheim.de/digibibsru-new
    5     - https://lux17.mpi.nl/ds/cqlsearch
     5    # - https://lux17.mpi.nl/ds/cqlsearch
    66    # - http://cqlservlet.mpi.nl/
    77    # - http://dspin.dwds.de:8088/ddc-sru/dingler/
     
    2828  EXECUTOR_SHUTDOWN_TIMEOUT_MS: 1000
    2929
    30   WEBLICHT_URL: https://weblicht.sfs.uni-tuebingen.de/WebLicht-4/?input=
     30  weblichtConfig:
     31    url: https://weblicht.sfs.uni-tuebingen.de/WebLicht-4/?input=
     32    acceptedTcfLanguages:
     33      - en
     34      - de
     35      - nl
     36      - fr
     37      - it
     38      - sp
     39      - pl
    3140
    3241# use the simple server factory, run on a single port
  • SRUAggregator/trunk/build.sh

    r5976 r6065  
    3232node_modules/react-tools/bin/jsx --no-cache-dir $JSDIR $JSDIR
    3333
    34 # mvn -q clean package
     34if [ "$1" == "--jar" ]
     35then
     36        mvn -q clean package
     37fi
    3538
    3639# Run in production:
    37 #java -jar target/Aggregator2-2.0.0-alpha-6.jar server aggregator.yml
     40#java -jar target/Aggregator2-2.0.0.jar server aggregator.yml
    3841
    3942# Run for development:
    40 # java -cp src/main/resources:target/Aggregator2-2.0.0-alpha-10.jar eu.clarin.sru.fcs.aggregator.app.Aggregator server aggregator_development.yml
     43# java -cp src/main/resources:target/Aggregator2-2.0.0.jar eu.clarin.sru.fcs.aggregator.app.Aggregator server aggregator_development.yml
  • SRUAggregator/trunk/pom.xml

    r6057 r6065  
    88        <groupId>eu.clarin.sru.fcs</groupId>
    99        <artifactId>Aggregator2</artifactId>
    10         <version>2.0.0-alpha-24</version>
     10        <version>2.0.0-alpha-25</version>
    1111        <name>FCS Aggregator</name>
    1212
     
    9090
    9191                <dependency>
    92                         <groupId>org.apache.opennlp</groupId>
    93                         <artifactId>opennlp-tools</artifactId>
    94                         <version>1.5.3</version>
    95                 </dependency>
    96                 <dependency>
    9792                    <groupId>com.optimaize.languagedetector</groupId>
    9893                    <artifactId>language-detector</artifactId>
     
    149144                                </configuration>
    150145                        </plugin>
    151                         <!--<plugin>
    152                                 <groupId>org.apache.maven.plugins</groupId>
    153                                 <artifactId>maven-source-plugin</artifactId>
    154                                 <version>2.2.1</version>
    155                                 <executions>
    156                                         <execution>
    157                                                 <id>attach-sources</id>
    158                                                 <goals>
    159                                                         <goal>jar</goal>
    160                                                 </goals>
    161                                         </execution>
    162                                 </executions>
    163                         </plugin>-->
    164146                        <plugin>
    165147                                <groupId>org.apache.maven.plugins</groupId>
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/Aggregator.java

    r6057 r6065  
    1818import eu.clarin.sru.fcs.aggregator.rest.RestService;
    1919import eu.clarin.sru.fcs.aggregator.scan.Statistics;
    20 import eu.clarin.sru.fcs.aggregator.lang.LanguagesISO693_3;
     20import eu.clarin.sru.fcs.aggregator.util.LanguagesISO693;
    2121import io.dropwizard.Application;
    2222import io.dropwizard.assets.AssetsBundle;
     
    2525import java.io.File;
    2626import java.io.IOException;
    27 import java.io.InputStream;
    2827import java.util.ArrayList;
    2928import java.util.Collections;
     
    3534import java.util.concurrent.ScheduledExecutorService;
    3635import java.util.concurrent.atomic.AtomicReference;
    37 import opennlp.tools.tokenize.TokenizerModel;
    3836import org.slf4j.LoggerFactory;
    3937
     
    8886 * @author edima
    8987 *
     88 * TODO: ?use weblicht only to show up in zoomed mode
     89 * - send only tcf with only a text layer and language (from the list in params)
     90 *
     91 * TODO: add the modes described above (except live)
     92 *
    9093 * TODO: zoom into the results from a corpus, allow functionality only for
    9194 * the view (search for next set of results)
     
    9598 * Twan (they did a test, it worked)
    9699 *
     100 * TODO: add PiWik support, tracking the following:
     101 * - visits, searches, search per corpus
     102 *
     103 * TODO: BUG: language detection is immediate, in UI; export implications
     104 *
    97105 * TODO: websockets
    98106 *
     
    122130        private AtomicReference<Statistics> searchStatsAtom = new AtomicReference<Statistics>(new Statistics());
    123131
    124         private TokenizerModel tokenizerModel;
    125132        private LanguageDetector languageDetector;
    126133        private TextObjectFactory textObjectFactory;
     
    235242                }
    236243
    237                 LanguagesISO693_3.getInstance(); // force init
    238                 initTokenizer();
     244                LanguagesISO693.getInstance(); // force init
    239245                initLanguageDetector();
    240246
     
    293299        }
    294300
    295         public TokenizerModel getTokenizerModel() {
    296                 return tokenizerModel;
    297         }
    298 
    299301        private static void shutdownAndAwaitTermination(AggregatorConfiguration.Params params,
    300302                        ThrottledClient sruClient, ExecutorService scheduler) {
     
    313315        }
    314316
    315         private void initTokenizer() {
    316                 TokenizerModel model = null;
    317                 try {
    318                         try (InputStream tokenizerModelDeAsIS = Thread.currentThread().getContextClassLoader().getResourceAsStream(DE_TOK_MODEL)) {
    319                                 model = new TokenizerModel(tokenizerModelDeAsIS);
    320                         }
    321                 } catch (IOException ex) {
    322                         log.error("Failed to load tokenizer model", ex);
    323                 }
    324                 tokenizerModel = model;
    325         }
    326 
    327317        public void initLanguageDetector() throws IOException {
    328318                List<LanguageProfile> languageProfiles = new LanguageProfileReader().readAll();
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/AggregatorConfiguration.java

    r6057 r6065  
    1414        public static class Params {
    1515
    16                 @NotEmpty
    1716                @JsonProperty
    1817                String CENTER_REGISTRY_URL;
    1918
    20                 @NotEmpty
    2119                @JsonProperty
    22                 String WEBLICHT_URL;
     20                List<URL> additionalCQLEndpoints;
    2321
    2422                @NotEmpty
     
    6664                long EXECUTOR_SHUTDOWN_TIMEOUT_MS;
    6765
     66                public static class WeblichtConfig {
     67                        @JsonProperty
     68                        String url;
     69
     70                        @JsonProperty
     71                        List<String> acceptedTcfLanguages;
     72
     73                        @JsonIgnore
     74                        public String getUrl() {
     75                                return url;
     76                        }
     77
     78                        @JsonIgnore
     79                        public List<String> getAcceptedTcfLanguages() {
     80                                return acceptedTcfLanguages;
     81                        }
     82                }
     83
     84                @NotEmpty
    6885                @JsonProperty
    69                 List<URL> additionalCQLEndpoints;
     86                WeblichtConfig weblichtConfig;
    7087
    7188                @JsonIgnore
     
    95112
    96113                @JsonIgnore
    97                 public String getWEBLICHT_URL() {
    98                         return WEBLICHT_URL;
     114                public WeblichtConfig getWeblichtConfig() {
     115                        return weblichtConfig;
    99116                }
    100117        }
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/rest/RestService.java

    r6057 r6065  
    77import eu.clarin.sru.fcs.aggregator.app.Aggregator;
    88import eu.clarin.sru.fcs.aggregator.app.AggregatorConfiguration;
     9import eu.clarin.sru.fcs.aggregator.app.AggregatorConfiguration.Params.WeblichtConfig;
    910import eu.clarin.sru.fcs.aggregator.scan.Corpus;
    1011import eu.clarin.sru.fcs.aggregator.scan.Statistics;
     
    1213import eu.clarin.sru.fcs.aggregator.search.Result;
    1314import eu.clarin.sru.fcs.aggregator.search.Search;
    14 import eu.clarin.sru.fcs.aggregator.lang.LanguagesISO693_3;
    15 import eu.clarin.sru.fcs.aggregator.search.ExportException;
     15import eu.clarin.sru.fcs.aggregator.util.LanguagesISO693;
    1616import eu.clarin.sru.fcs.aggregator.search.Exports;
    1717import java.io.IOException;
     
    2222import java.util.Map;
    2323import java.util.Set;
    24 import java.util.logging.Level;
    25 import java.util.logging.Logger;
    2624import javax.servlet.ServletContext;
    2725import javax.servlet.http.HttpServletRequest;
     
    3634import javax.ws.rs.core.MediaType;
    3735import javax.ws.rs.core.Response;
    38 import opennlp.tools.tokenize.TokenizerModel;
    3936import org.slf4j.LoggerFactory;
    4037
     
    113110                log.info("get language codes", codes);
    114111                for (String code : codes) {
    115                         String name = LanguagesISO693_3.getInstance().nameForCode_3(code);
     112                        String name = LanguagesISO693.getInstance().nameForCode(code);
    116113                        languages.put(code, name != null ? name : code);
    117114                }
     
    192189                }
    193190
    194         if (format == null || format.trim().isEmpty() || format.trim().equals("text")) {
     191                if (format == null || format.trim().isEmpty() || format.trim().equals("text")) {
    195192                        String text = Exports.getExportText(search.getResults());
    196193                        return download(text, MediaType.TEXT_PLAIN, search.getQuery() + ".txt");
    197194                } else if (format.equals("tcf")) {
    198                         byte[] bytes = Exports.getExportTokenizedTCF(
    199                                         search.getResults(), search.getSearchLanguage(),
    200                                         Aggregator.getInstance().getTokenizerModel());
     195                        byte[] bytes = Exports.getExportTCF(
     196                                        search.getResults(), search.getSearchLanguage());
    201197                        return download(bytes, TCF_MEDIA_TYPE, search.getQuery() + ".xml");
    202198                } else if (format.equals("excel")) {
     
    240236                                url = DataTransfer.uploadToDropOff(bytes, "text/plan", ".txt");
    241237                        }
    242                 } else if (format.equals("tokens")) {
    243                         byte[] bytes = Exports.getExportTokenizedTCF(
    244                                         search.getResults(), search.getSearchLanguage(),
    245                                         Aggregator.getInstance().getTokenizerModel());
     238                } else if (format.equals("tcf")) {
     239                        byte[] bytes = Exports.getExportTCF(
     240                                        search.getResults(), search.getSearchLanguage());
    246241                        if (bytes != null) {
    247242                                url = DataTransfer.uploadToDropOff(bytes, "text/tcf+xml", ".tcf");
     
    251246                }
    252247
    253                 URI weblichtUri = new URI(Aggregator.getInstance().getParams().getWEBLICHT_URL()
    254                                 + url);
     248                WeblichtConfig weblicht = Aggregator.getInstance().getParams().getWeblichtConfig();
     249                URI weblichtUri = new URI(weblicht.getUrl() + url);
    255250                return url == null
    256251                                ? Response.status(503).entity("error while exporting to weblicht").build()
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/scan/Corpus.java

    r6043 r6065  
    11package eu.clarin.sru.fcs.aggregator.scan;
    22
    3 import eu.clarin.sru.fcs.aggregator.lang.LanguagesISO693_3;
     3import eu.clarin.sru.fcs.aggregator.util.LanguagesISO693;
    44import java.util.ArrayList;
    55import java.util.Collections;
     
    102102
    103103        public void addLanguage(String language) {
    104                 if (LanguagesISO693_3.getInstance().getCodes_3().contains(language)) {
     104                if (LanguagesISO693.getInstance().isCode(language)) {
    105105                        this.languages.add(language);
    106106                } else {
    107                         String code = LanguagesISO693_3.getInstance().code_3ForName(language);
     107                        String code = LanguagesISO693.getInstance().code_3ForName(language);
    108108                        this.languages.add(code == null ? language : code);
    109109                }
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/search/Exports.java

    r6043 r6065  
    11package eu.clarin.sru.fcs.aggregator.search;
    22
    3 import eu.clarin.sru.fcs.aggregator.lang.LanguagesISO693_2;
    4 import eu.clarin.sru.fcs.aggregator.lang.LanguagesISO693_3;
     3import eu.clarin.sru.fcs.aggregator.util.LanguagesISO693;
    54import eu.clarin.weblicht.wlfxb.io.WLDObjector;
    65import eu.clarin.weblicht.wlfxb.io.WLFormatException;
    76import eu.clarin.weblicht.wlfxb.md.xb.MetaData;
    8 import eu.clarin.weblicht.wlfxb.tc.api.MatchedCorpus;
    9 import eu.clarin.weblicht.wlfxb.tc.api.Token;
    107import eu.clarin.weblicht.wlfxb.tc.xb.TextCorpusStored;
    118import eu.clarin.weblicht.wlfxb.xb.WLData;
    129import java.io.ByteArrayOutputStream;
    1310import java.io.IOException;
    14 import java.util.ArrayList;
    15 import java.util.Collections;
    16 import java.util.HashSet;
    1711import java.util.List;
    18 import java.util.Set;
    1912import java.util.logging.Level;
    2013import java.util.logging.Logger;
    21 import opennlp.tools.tokenize.TokenizerME;
    22 import opennlp.tools.tokenize.TokenizerModel;
    2314import org.apache.poi.ss.usermodel.Cell;
    2415import org.apache.poi.ss.usermodel.CellStyle;
     
    3021/**
    3122 * Utility for representing SearchResult data in different formats.
    32  * 
     23 *
    3324 * @author Yana Panchenko
    3425 */
     
    3930        public static String getExportCSV(List<Result> resultsProcessed, String separator) {
    4031
    41         boolean noResult = true;
    42         StringBuilder csv = new StringBuilder();
    43         if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
    44             String[] headers = new String[]{
    45                 "LEFT CONTEXT", "KEYWORD", "RIGHT CONTEXT", "PID", "REFERENCE"};
    46             for (String header : headers) {
    47                 csv.append("\"");
    48                 csv.append(header);
    49                 csv.append("\"");
    50                 csv.append(separator);
    51             }
    52             csv.append("\n");
    53 
    54             for (Result result : resultsProcessed) {
    55                 for (Kwic kwic : result.getKwics()) {
    56                     csv.append("\"");
    57                     csv.append(escapeQuotes(kwic.getLeft()));
    58                     csv.append("\"");
    59                     csv.append(separator);
    60                     csv.append("\"");
    61                     csv.append(escapeQuotes(kwic.getKeyword()));
    62                     csv.append("\"");
    63                     csv.append(separator);
    64                     csv.append("\"");
    65                     csv.append(escapeQuotes(kwic.getRight()));
    66                     csv.append("\"");
    67                     csv.append(separator);
    68                     csv.append("\"");
    69                     if (kwic.getPid() != null) {
    70                         csv.append(escapeQuotes(kwic.getPid()));
    71                     }
    72                     csv.append("\"");
    73                     csv.append(separator);
    74                     csv.append("\"");
    75                     if (kwic.getReference() != null) {
    76                         csv.append(escapeQuotes(kwic.getReference()));
    77                     }
    78                     csv.append("\"");
    79                     csv.append("\n");
    80                     noResult = false;
    81                 }
    82             }
    83         }
    84         if (noResult) {
    85             return null;
    86         } else {
    87             return csv.toString();
    88         }
    89     }
     32                boolean noResult = true;
     33                StringBuilder csv = new StringBuilder();
     34                if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
     35                        String[] headers = new String[]{
     36                                "LEFT CONTEXT", "KEYWORD", "RIGHT CONTEXT", "PID", "REFERENCE"};
     37                        for (String header : headers) {
     38                                csv.append("\"");
     39                                csv.append(header);
     40                                csv.append("\"");
     41                                csv.append(separator);
     42                        }
     43                        csv.append("\n");
     44
     45                        for (Result result : resultsProcessed) {
     46                                for (Kwic kwic : result.getKwics()) {
     47                                        csv.append("\"");
     48                                        csv.append(escapeQuotes(kwic.getLeft()));
     49                                        csv.append("\"");
     50                                        csv.append(separator);
     51                                        csv.append("\"");
     52                                        csv.append(escapeQuotes(kwic.getKeyword()));
     53                                        csv.append("\"");
     54                                        csv.append(separator);
     55                                        csv.append("\"");
     56                                        csv.append(escapeQuotes(kwic.getRight()));
     57                                        csv.append("\"");
     58                                        csv.append(separator);
     59                                        csv.append("\"");
     60                                        if (kwic.getPid() != null) {
     61                                                csv.append(escapeQuotes(kwic.getPid()));
     62                                        }
     63                                        csv.append("\"");
     64                                        csv.append(separator);
     65                                        csv.append("\"");
     66                                        if (kwic.getReference() != null) {
     67                                                csv.append(escapeQuotes(kwic.getReference()));
     68                                        }
     69                                        csv.append("\"");
     70                                        csv.append("\n");
     71                                        noResult = false;
     72                                }
     73                        }
     74                }
     75                if (noResult) {
     76                        return null;
     77                } else {
     78                        return csv.toString();
     79                }
     80        }
    9081
    9182        private static CharSequence escapeQuotes(String text) {
    92         StringBuilder sb = new StringBuilder();
    93         for (int i = 0; i < text.length(); i++) {
    94             char ch = text.charAt(i);
    95             if (ch == '"') {
    96                 sb.append('"');
    97             }
    98             sb.append(ch);
    99         }
    100         return sb;
    101     }
     83                StringBuilder sb = new StringBuilder();
     84                for (int i = 0; i < text.length(); i++) {
     85                        char ch = text.charAt(i);
     86                        if (ch == '"') {
     87                                sb.append('"');
     88                        }
     89                        sb.append(ch);
     90                }
     91                return sb;
     92        }
    10293
    10394        public static byte[] getExportExcel(List<Result> resultsProcessed) throws ExportException {
    10495
    105         boolean noResult = true;
    106         SXSSFWorkbook workbook = null;
    107         ByteArrayOutputStream excelStream = new ByteArrayOutputStream();
    108         if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
    109             try {
    110                 String[] headers = new String[]{
    111                     "LEFT CONTEXT", "KEYWORD", "RIGHT CONTEXT", "PID", "REFERENCE"};
    112 
    113                 workbook = new SXSSFWorkbook();
    114                 Sheet sheet = workbook.createSheet();
    115 
    116                 Font boldFont = workbook.createFont();
    117                 boldFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
    118 
    119                 // Header
    120                 CellStyle headerStyle = workbook.createCellStyle();
    121                 headerStyle.setFont(boldFont);
    122 
    123                 Row row = sheet.createRow(0);
    124 
    125                 for (int j = 0; j < headers.length; ++j) {
    126                     Cell cell = row.createCell(j, Cell.CELL_TYPE_STRING);
    127                     cell.setCellValue(headers[j]);
    128                     cell.setCellStyle(headerStyle);
    129                 }
    130 
    131                 // Body
    132                 Cell cell;
    133                 for (int k = 0; k < resultsProcessed.size(); k++) {
    134                     Result result = resultsProcessed.get(k);
    135                     List<Kwic> kwics = result.getKwics();
    136                     for (int i = 0; i < kwics.size(); i++) {
    137                         Kwic kwic = kwics.get(i);
    138                         row = sheet.createRow(k + i + 1);
    139                         cell = row.createCell(0, Cell.CELL_TYPE_STRING);
    140                         cell.setCellValue(kwic.getLeft());
    141                         cell = row.createCell(1, Cell.CELL_TYPE_STRING);
    142                         cell.setCellValue(kwic.getKeyword());
    143                         cell = row.createCell(2, Cell.CELL_TYPE_STRING);
    144                         cell.setCellValue(kwic.getRight());
    145                         if (kwic.getPid() != null) {
    146                             cell = row.createCell(3, Cell.CELL_TYPE_STRING);
    147                             cell.setCellValue(kwic.getPid());
    148                         }
    149                         if (kwic.getReference() != null) {
    150                             cell = row.createCell(3, Cell.CELL_TYPE_STRING);
    151                             cell.setCellValue(kwic.getReference());
    152                         }
    153                         noResult = false;
    154                     }
    155                 }
    156                 workbook.write(excelStream);
    157             } catch (IOException ex) {
     96                boolean noResult = true;
     97                SXSSFWorkbook workbook = null;
     98                ByteArrayOutputStream excelStream = new ByteArrayOutputStream();
     99                if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
     100                        try {
     101                                String[] headers = new String[]{
     102                                        "LEFT CONTEXT", "KEYWORD", "RIGHT CONTEXT", "PID", "REFERENCE"};
     103
     104                                workbook = new SXSSFWorkbook();
     105                                Sheet sheet = workbook.createSheet();
     106
     107                                Font boldFont = workbook.createFont();
     108                                boldFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
     109
     110                                // Header
     111                                CellStyle headerStyle = workbook.createCellStyle();
     112                                headerStyle.setFont(boldFont);
     113
     114                                Row row = sheet.createRow(0);
     115
     116                                for (int j = 0; j < headers.length; ++j) {
     117                                        Cell cell = row.createCell(j, Cell.CELL_TYPE_STRING);
     118                                        cell.setCellValue(headers[j]);
     119                                        cell.setCellStyle(headerStyle);
     120                                }
     121
     122                                // Body
     123                                Cell cell;
     124                                for (int k = 0; k < resultsProcessed.size(); k++) {
     125                                        Result result = resultsProcessed.get(k);
     126                                        List<Kwic> kwics = result.getKwics();
     127                                        for (int i = 0; i < kwics.size(); i++) {
     128                                                Kwic kwic = kwics.get(i);
     129                                                row = sheet.createRow(k + i + 1);
     130                                                cell = row.createCell(0, Cell.CELL_TYPE_STRING);
     131                                                cell.setCellValue(kwic.getLeft());
     132                                                cell = row.createCell(1, Cell.CELL_TYPE_STRING);
     133                                                cell.setCellValue(kwic.getKeyword());
     134                                                cell = row.createCell(2, Cell.CELL_TYPE_STRING);
     135                                                cell.setCellValue(kwic.getRight());
     136                                                if (kwic.getPid() != null) {
     137                                                        cell = row.createCell(3, Cell.CELL_TYPE_STRING);
     138                                                        cell.setCellValue(kwic.getPid());
     139                                                }
     140                                                if (kwic.getReference() != null) {
     141                                                        cell = row.createCell(3, Cell.CELL_TYPE_STRING);
     142                                                        cell.setCellValue(kwic.getReference());
     143                                                }
     144                                                noResult = false;
     145                                        }
     146                                }
     147                                workbook.write(excelStream);
     148                        } catch (IOException ex) {
    158149                                LOGGER.log(Level.SEVERE, null, ex);
    159150                                throw new ExportException("Exception exporting Excel", ex);
    160             } finally {
    161                 if (workbook != null) {
    162                     workbook.dispose();
    163                 }
    164             }
    165         }
    166         if (noResult) {
    167             return null;
    168         } else {
    169             return excelStream.toByteArray();
    170         }
    171 
    172     }
    173 
    174         private static byte[] getExportTCF(List<Result> resultsProcessed,
     151                        } finally {
     152                                if (workbook != null) {
     153                                        workbook.dispose();
     154                                }
     155                        }
     156                }
     157                if (noResult) {
     158                        return null;
     159                } else {
     160                        return excelStream.toByteArray();
     161                }
     162
     163        }
     164
     165        public static byte[] getExportTCF(List<Result> resultsProcessed,
    175166                        String searchLanguage) throws ExportException {
    176         StringBuilder text = new StringBuilder();
    177         Set<String> resultsLangs = new HashSet<String>();
    178         if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
    179             for (Result result : resultsProcessed) {
    180                 resultsLangs.addAll(result.getCorpus().getLanguages());
    181                 for (Kwic kwic : result.getKwics()) {
    182                     text.append(kwic.getLeft());
    183                     text.append(" ");
    184                     text.append(kwic.getKeyword());
    185                     text.append(" ");
    186                     text.append(kwic.getRight());
    187                     text.append("\n");
    188                 }
    189             }
    190 
    191         }
    192         if (text.length() == 0) {
    193                         return null;
    194         } else {
    195             WLData data;
    196             MetaData md = new MetaData();
    197             String resultsLang = "unknown";
    198             if (resultsLangs.size() == 1) {
    199                 resultsLang = resultsLangs.iterator().next();
    200                                 String code2 = LanguagesISO693_2.getInstance().langForCode(resultsLang).getCode_639_1();
    201                 if (code2 != null) {
    202                     resultsLang = code2;
    203                 }
    204             } else if (!searchLanguage.equals("anylang")) {
    205                                 String code2 = LanguagesISO693_2.getInstance().langForCode(resultsLang).getCode_639_1();
    206                 if (code2 == null) {
    207                     resultsLang = searchLanguage;
    208                 } else {
    209                     resultsLang = code2;
    210                 }
    211             }
    212             TextCorpusStored tc = new TextCorpusStored(resultsLang);
    213             tc.createTextLayer().addText(text.toString());
    214             data = new WLData(md, tc);
     167                String text = getExportText(resultsProcessed);
     168                if (text == null || text.isEmpty()) {
     169                        return null;
     170                } else {
     171                        WLData data;
     172                        MetaData md = new MetaData();
     173                        String languageCode = LanguagesISO693.getInstance().code_1ForCode_3(searchLanguage);
     174                        TextCorpusStored tc = new TextCorpusStored(languageCode);
     175                        tc.createTextLayer().addText(text);
     176                        data = new WLData(md, tc);
    215177                        ByteArrayOutputStream os = new ByteArrayOutputStream();
    216             try {
    217                 WLDObjector.write(data, os);
    218             } catch (WLFormatException ex) {
    219                 LOGGER.log(Level.SEVERE, "Error exporting TCF {0} {1}", new String[]{ex.getClass().getName(), ex.getMessage()});
     178                        try {
     179                                WLDObjector.write(data, os);
     180                        } catch (WLFormatException ex) {
     181                                LOGGER.log(Level.SEVERE, "Error exporting TCF {0} {1}", new String[]{ex.getClass().getName(), ex.getMessage()});
    220182                                throw new ExportException("Error exporting TCF", ex);
    221             }
     183                        }
    222184                        return os.toByteArray();
    223         }
    224     }
    225 
    226         public static byte[] getExportTokenizedTCF(List<Result> resultsProcessed,
    227                         String searchLanguage, TokenizerModel tokenizerModel) throws ExportException {
    228         StringBuilder text = new StringBuilder();
    229         if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
     185                }
     186        }
     187
     188        public static String getExportText(List<Result> resultsProcessed) {
     189                StringBuilder text = new StringBuilder();
     190                if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
    230191                        for (Result result : resultsProcessed) {
    231192                                for (Kwic kwic : result.getKwics()) {
     
    239200                                        }
    240201                                        text.append("\n");
    241                 }
    242             }
    243 
    244         }
    245         if (text.length() == 0) {
    246                         return null;
    247         } else {
    248             WLData data;
    249                         MetaData md = new MetaData();
    250                         String languageCode = LanguagesISO693_3.getInstance().code_1ForCode_3(searchLanguage);
    251                         TextCorpusStored tc = new TextCorpusStored(languageCode);
    252             tc.createTextLayer().addText(text.toString());
    253                         addTokensSentencesMatches(resultsProcessed, tc, tokenizerModel);
    254             data = new WLData(md, tc);
    255                         ByteArrayOutputStream os = new ByteArrayOutputStream();
    256             try {
    257                 WLDObjector.write(data, os);
    258             } catch (WLFormatException ex) {
    259                 LOGGER.log(Level.SEVERE, "Error exporting TCF {0} {1}", new String[]{ex.getClass().getName(), ex.getMessage()});
    260                                 throw new ExportException("Error exporting TCF", ex);
    261                         }
    262                         return os.toByteArray();
    263                 }
    264     }
    265 
    266         private static void addTokensSentencesMatches(List<Result> resultsProcessed, TextCorpusStored tc, TokenizerModel model) {
    267                 if (model == null || !"de".equals(tc.getLanguage())) {
    268             return;
    269         }
    270         TokenizerME tokenizer = new TokenizerME(model);
    271 
    272         if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
    273             tc.createTokensLayer();
    274             tc.createSentencesLayer();
    275             tc.createMatchesLayer("FCS", resultsProcessed.get(0).getSearchString());
    276             for (Result result : resultsProcessed) {
    277                                 MatchedCorpus mCorpus = tc.getMatchesLayer().addCorpus(result.getCorpus().getTitle(), result.getCorpus().getHandle());
    278                 for (Kwic kwic : result.getKwics()) {
    279                     List<Token> tokens = new ArrayList<Token>();
    280                     addToTcfTokens(tokens, tc, tokenizer.tokenize(kwic.getLeft()));
    281                     String[] target = tokenizer.tokenize(kwic.getKeyword());
    282                     List<Token> targetTokens = addToTcfTokens(tokens, tc, target);
    283                     addToTcfTokens(tokens, tc, tokenizer.tokenize(kwic.getRight()));
    284                     tc.getSentencesLayer().addSentence(tokens);
    285                     List<String> pidAndRef = new ArrayList<String>();
    286                     if (kwic.getPid() != null) {
    287                         pidAndRef.add(kwic.getPid());
    288                     }
    289                     if (kwic.getReference() != null) {
    290                         pidAndRef.add(kwic.getReference());
    291                     }
    292                     tc.getMatchesLayer().addItem(mCorpus, targetTokens, pidAndRef);
    293                 }
    294             }
    295         }
    296     }
    297 
    298         private static List<Token> addToTcfTokens(List<Token> tokens, TextCorpusStored tc, String[] tokenStrings) {
    299         List<Token> addedTokens = new ArrayList<Token>(tokenStrings.length);
    300         for (String tokenString : tokenStrings) {
    301             Token token = tc.getTokensLayer().addToken(tokenString);
    302             addedTokens.add(token);
    303             tokens.add(token);
    304         }
    305         return addedTokens;
    306     }
    307 
    308         public static String getExportText(List<Result> resultsProcessed) {
    309         StringBuilder text = new StringBuilder();
    310         if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
    311             for (Result result : resultsProcessed) {
    312                 for (Kwic kwic : result.getKwics()) {
    313                     text.append(kwic.getLeft());
    314                     text.append(" ");
    315                     text.append(kwic.getKeyword());
    316                     text.append(" ");
    317                     text.append(kwic.getRight());
    318                     text.append("\n");
    319                 }
    320             }
    321 
    322         }
    323         if (text.length() == 0) {
    324             return null;
    325         } else {
    326             return text.toString();
    327         }
    328     }
     202                                }
     203                        }
     204                }
     205                if (text.length() == 0) {
     206                        return null;
     207                } else {
     208                        return text.toString();
     209                }
     210        }
    329211}
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/search/Kwic.java

    r6043 r6065  
    33import eu.clarin.sru.client.fcs.DataViewHits;
    44import eu.clarin.sru.fcs.aggregator.app.Aggregator;
    5 import eu.clarin.sru.fcs.aggregator.lang.LanguagesISO693_3;
     5import eu.clarin.sru.fcs.aggregator.util.LanguagesISO693;
    66import java.util.ArrayList;
    77import java.util.List;
     8import org.apache.commons.lang.StringEscapeUtils;
    89
    910/**
     
    4849                this.reference = reference;
    4950
    50                 String text = hits.getText();
     51                // warning: the client library doesn't unescape the xml
     52                // so the text can still contains &lt; and &amp; codes
     53                String str = hits.getText();
     54
    5155                int lastOffset = 0;
    5256                for (int i = 0; i < hits.getHitCount(); i++) {
    5357                        int[] offsets = hits.getHitOffsets(i);
    5458                        if (lastOffset < offsets[0]) {
    55                                 fragments.add(new TextFragment(text.substring(lastOffset, offsets[0]), false));
     59                                String text = StringEscapeUtils.unescapeXml(str.substring(lastOffset, offsets[0]));
     60                                fragments.add(new TextFragment(text, false));
    5661                        }
    5762                        if (offsets[0] < offsets[1]) {
    58                                 fragments.add(new TextFragment(text.substring(offsets[0], offsets[1]), true));
     63                                String text = StringEscapeUtils.unescapeXml(str.substring(offsets[0], offsets[1]));
     64                                fragments.add(new TextFragment(text, true));
    5965                        }
    6066                        lastOffset = offsets[1];
    6167                }
    62                 if (lastOffset < text.length()) {
    63                         fragments.add(new TextFragment(text.substring(lastOffset, text.length()), false));
     68                if (lastOffset < str.length()) {
     69                        String text = StringEscapeUtils.unescapeXml(str.substring(lastOffset, str.length()));
     70                        fragments.add(new TextFragment(text, false));
    6471                }
    6572
    66                 String code_iso639_1 = Aggregator.getInstance().detectLanguage(hits.getText());
     73                String code_iso639_1 = Aggregator.getInstance().detectLanguage(str);
    6774                language = code_iso639_1 == null ? null
    68                                 : LanguagesISO693_3.getInstance().code_3ForCode_1(code_iso639_1);
     75                                : LanguagesISO693.getInstance().code_3ForCode(code_iso639_1);
    6976        }
    7077
     
    8794        @Deprecated
    8895        public String getLeft() {
     96                StringBuilder sb = new StringBuilder();
    8997                for (TextFragment tf : fragments) {
    90                         if (!tf.isHit) {
    91                                 return tf.text;
     98                        if (tf.isHit) {
     99                                break;
    92100                        }
     101                        sb.append(tf.text);
    93102                }
    94                 return "";
     103                return sb.toString();
    95104        }
    96105
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/util/LanguagesISO693.java

    r6044 r6065  
    1 package eu.clarin.sru.fcs.aggregator.lang;
     1package eu.clarin.sru.fcs.aggregator.util;
    22
    33import com.fasterxml.jackson.core.JsonProcessingException;
     
    1010import java.util.HashMap;
    1111import java.util.Map;
    12 import java.util.Set;
    1312import org.slf4j.LoggerFactory;
    1413
     
    1817 * @author Yana Panchenko
    1918 */
    20 public class LanguagesISO693_3 {
     19public class LanguagesISO693 {
    2120
    22         private static final org.slf4j.Logger log = LoggerFactory.getLogger(LanguagesISO693_3.class);
     21        private static final org.slf4j.Logger log = LoggerFactory.getLogger(LanguagesISO693.class);
    2322        public static final String LANGUAGES_FILE_PATH = "/lang/iso-639-3_20140320.tab";
    2423        public static final String LANGUAGES_FILE_ENCODING = "UTF-8";
    2524
    26         private static LanguagesISO693_3 instance = null;
     25        private static LanguagesISO693 instance = null;
    2726
    2827        public static class Language {
    2928
    3029                // code is ISO-639-3 (3 letters) while code_2 is ISO-639-1 (2 letters)
    31                 String code_3, code_1, name;
     30                private String code_3, code_1, name;
    3231
    3332                public Language(String code_3, String code_1, String name) {
     
    3837        }
    3938
    40         private Map<String, Language> code_3ToLang = new HashMap<String, Language>();
     39        private Map<String, Language> codeToLang = new HashMap<String, Language>();
    4140        private Map<String, Language> nameToLang = new HashMap<String, Language>();
    42         private Map<String, Language> code_1ToLang = new HashMap<String, Language>();
    4341
    44         private LanguagesISO693_3() {
    45                 InputStream is = LanguagesISO693_3.class.getResourceAsStream(LANGUAGES_FILE_PATH);
     42        private LanguagesISO693() {
     43                InputStream is = LanguagesISO693.class.getResourceAsStream(LANGUAGES_FILE_PATH);
    4644                try (BufferedReader br = new BufferedReader(new InputStreamReader(is, LANGUAGES_FILE_ENCODING))) {
    47                         String line = br.readLine(); // ignore first line
     45                        br.readLine(); // ignore first line (header)
     46                        String line;
    4847                        while ((line = br.readLine()) != null) {
    4948                                if (line.length() > 0) {
     
    6059                                        String name = toks[6].trim();
    6160                                        Language l = new Language(code_3, code_1, name);
    62                                         code_3ToLang.put(code_3, l);
     61                                        codeToLang.put(code_3, l);
    6362                                        if (code_1 != null) {
    64                                                 code_1ToLang.put(code_1, l);
     63                                                codeToLang.put(code_1, l);
    6564                                        }
    6665                                        nameToLang.put(name, l);
     
    7372                ObjectWriter ow = new ObjectMapper().writerWithDefaultPrettyPrinter();
    7473                try {
    75                         System.out.println(ow.writeValueAsString(code_3ToLang));
     74                        System.out.println(ow.writeValueAsString(codeToLang));
    7675                } catch (JsonProcessingException ex) {
    7776                }
    7877        }
    7978
    80         public static LanguagesISO693_3 getInstance() {
     79        public static LanguagesISO693 getInstance() {
    8180                if (instance == null) {
    82                         instance = new LanguagesISO693_3();
     81                        instance = new LanguagesISO693();
    8382                }
    8483                return instance;
    8584        }
    8685
    87         public Set<String> getCodes_3() {
    88                 return code_3ToLang.keySet();
     86        public boolean isCode(String code) {
     87                return codeToLang.containsKey(code);
    8988        }
    9089
    91         public String code_3ForCode_1(String code639_1) {
     90        public String code_3ForCode(String code639_1) {
    9291                if (code639_1 == null) {
    9392                        return null;
    9493                }
    95                 Language l = code_1ToLang.get(code639_1);
     94                Language l = codeToLang.get(code639_1);
    9695                if (l == null) {
    9796                        log.error("Unknown ISO-639-1 code: " + code639_1);
     
    105104                        return null;
    106105                }
    107                 Language l = code_3ToLang.get(code639_3);
     106                Language l = codeToLang.get(code639_3);
    108107                if (l == null) {
    109108                        log.error("Unknown ISO-639-3 code: " + code639_3);
     
    122121        }
    123122
    124         public String nameForCode_3(String code) {
    125                 Language l = code_3ToLang.get(code);
     123        public String nameForCode(String code) {
     124                Language l = codeToLang.get(code);
    126125                if (l == null) {
    127126                        log.error("Unknown language code: " + code);
     
    130129                return l.name;
    131130        }
    132 
    133131}
  • SRUAggregator/trunk/src/main/resources/assets/js/main.js

    r6057 r6065  
    33"use strict";
    44
    5 var VERSION = "VERSION 2.0.0.α24";
     5var VERSION = "VERSION 2.0.0.α25";
    66var URLROOT = "/Aggregator-testing";
    77
     
    150150                                                                React.createElement("span", {className: "icon-bar"})
    151151                                                        ),
    152                                                         React.createElement("a", {className: "navbar-brand", href: "#", tabIndex: "-1"}, React.createElement("header", null, "Federated Content Search"))
     152                                                        React.createElement("a", {className: "navbar-brand", href: URLROOT, tabIndex: "-1"}, React.createElement("header", null, "Federated Content Search"))
    153153                                                ),
    154154                                                this.renderCollapsible()
  • SRUAggregator/trunk/src/main/resources/assets/js/main.jsx

    r6057 r6065  
    33"use strict";
    44
    5 var VERSION = "VERSION 2.0.0.α24";
     5var VERSION = "VERSION 2.0.0.α25";
    66var URLROOT = "/Aggregator-testing";
    77
     
    150150                                                                <span className="icon-bar"></span>
    151151                                                        </button>
    152                                                         <a className="navbar-brand" href="#" tabIndex="-1"><header>Federated Content Search</header></a>
     152                                                        <a className="navbar-brand" href={URLROOT} tabIndex="-1"><header>Federated Content Search</header></a>
    153153                                                </div>
    154154                                                {this.renderCollapsible()}
Note: See TracChangeset for help on using the changeset viewer.