Ignore:
Timestamp:
01/16/15 19:24:55 (9 years ago)
Author:
emanuel.dima@uni-tuebingen.de
Message:
  1. alpha12: better language filtering using detection, collections view improvements
File:
1 edited

Legend:

Unmodified
Added
Removed
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/lang/LanguagesISO693_3.java

    r5900 r5931  
    2828        public static class Language {
    2929
    30                 String code, name;
     30                // code is ISO-639-3 (3 letters) while code_2 is ISO-639-2 (2 letters)
     31                String code, code_2, name;
    3132
    32                 public Language(String code, String name) {
     33                public Language(String code, String code_2, String name) {
    3334                        this.code = code;
     35                        this.code_2 = code_2;
    3436                        this.name = name;
    3537                }
    3638        }
    3739
    38         private Map<String, Language> code2Lang = new HashMap<String, Language>();
    39         private Map<String, Language> name2Lang = new HashMap<String, Language>();
     40        private Map<String, Language> codeToLang = new HashMap<String, Language>();
     41        private Map<String, Language> nameToLang = new HashMap<String, Language>();
     42        private Map<String, Language> code_2ToLang = new HashMap<String, Language>();
    4043
    4144        private LanguagesISO693_3() {
    4245                InputStream is = LanguagesISO693_3.class.getResourceAsStream(LANGUAGES_FILE_PATH);
    4346                try (BufferedReader br = new BufferedReader(new InputStreamReader(is, LANGUAGES_FILE_ENCODING))) {
    44                         String line;
     47                        String line = br.readLine(); // ignore first line
    4548                        while ((line = br.readLine()) != null) {
    4649                                if (line.length() > 0) {
     
    5053                                                continue;
    5154                                        }
    52                                         String code = toks[0];
    53                                         String name = toks[6];
    54                                         Language l = new Language(code, name);
    55                                         code2Lang.put(code, l);
    56                                         name2Lang.put(name, l);
     55                                        String code = toks[0].trim();
     56                                        String code_2 = toks[3].trim().isEmpty() ? null : toks[3].trim();
     57                                        if (code_2 != null && code_2.length() != 2) {
     58                                                throw new RuntimeException("bad code_2 code: " + code_2);
     59                                        }
     60                                        String name = toks[6].trim();
     61                                        Language l = new Language(code, code_2, name);
     62                                        codeToLang.put(code, l);
     63                                        if (code_2 != null) {
     64                                                code_2ToLang.put(code_2, l);
     65                                        }
     66                                        nameToLang.put(name, l);
    5767                                }
    5868                        }
     
    6373                ObjectWriter ow = new ObjectMapper().writerWithDefaultPrettyPrinter();
    6474                try {
    65                         System.out.println(ow.writeValueAsString(code2Lang));
     75                        System.out.println(ow.writeValueAsString(codeToLang));
    6676                } catch (JsonProcessingException ex) {
    6777                }
     
    7686
    7787        public Set<String> getCodes() {
    78                 return code2Lang.keySet();
     88                return codeToLang.keySet();
     89        }
     90
     91        public String codeForCode639_2(String code639_2) {
     92                if (code639_2 == null) {
     93                        return null;
     94                }
     95                Language l = code_2ToLang.get(code639_2);
     96                if (l == null) {
     97                        log.error("Unknown 639-2 code: " + code639_2);
     98                        return null;
     99                }
     100                return l.code;
    79101        }
    80102
    81103        public String codeForName(String name) {
    82                 Language l = name2Lang.get(name);
     104                Language l = nameToLang.get(name);
    83105                if (l == null) {
    84106                        log.error("Unknown language name: " + name);
     
    89111
    90112        public String nameForCode(String code) {
    91                 Language l = code2Lang.get(code);
     113                Language l = codeToLang.get(code);
    92114                if (l == null) {
    93115                        log.error("Unknown language code: " + code);
Note: See TracChangeset for help on using the changeset viewer.