Использовать географический справочник в качестве словаря в правиле JAPE в GATE

У меня есть этот сценарий:

У меня есть список пар ключ-значение в виде (например)

000.000.0001.000 VALUE1

000.000.0002.000 VALUE2

...

000.010.0001.000 VALUE254

Документы представляют информацию с помощью таблицы следующим образом:

SK1 | SK2 | SK3 | SK4

000  | 000 | 0001 | 000

Проблема в том, что при обработке этой таблицы она превращается в

000

000

0001

000

Таким образом, географический справочник не будет соответствовать этому. Я решил построить правило JAPE, чтобы оно соответствовало этому, и оно правильно работает, сопоставляя 4 ключевые части.

Теперь мне нужно загрузить справочник из моего правила JAPE в структуру (например, хэш-карту), чтобы я мог найти конкатенацию этих 4 ключевых частей и получить (например) «VALUE1». Можно ли загрузить географический справочник из файла JAPE и использовать его в качестве словаря?

Есть ли другой (лучший) способ сделать то, что мне нужно?

Большое спасибо.


person antorqs    schedule 10.10.2016    source источник


Ответы (1)


Я нашел решение своей проблемы, используя класс GazetteerList со следующим фрагментом:

//Gazetteer object
GazetteerList gazList = new GazetteerList() ;
//Object to map gazetteers entries and their positions in the list
//i.e.: 000.000.0001.000 -> 1,3
//This is because, in my case, the same key 
//can appear more than once in the gazetteer
HashMap<String, ArrayList<Integer>> keyMap = 
                                   new HashMap<String, ArrayList<Integer>>();
  try{
    gazList.setMode(GazetteerList.LIST_MODE);
    gazList.setSeparator("\t");
    gazList.setURL(
        new URL("file:/path/to/gazetteer/gazetteer_list_file.lst"));
    gazList.load();

    //Here is the mapping between the keys and their position
    int pos = 0;
    for( GazetteerNode gazNode : gazList){
      if(keyMap.get(gazNode.getEntry()) == null)
        keyMap.put(gazNode.getEntry(), new ArrayList<Integer>());

      keyMap.get(gazNode.getEntry()).add(pos);
      pos++;
    }

  } catch (MalformedURLException ex){
    System.out.println(ex);
  } catch (ResourceInstantiationException ex){
    System.out.println(ex);
  }

Затем вы можете найти соответствующий ключ на карте и получить его характеристики:

  for(Integer index : keyMap.get(key)){
      FeatureMap fmap = toFeatureMap(gazList.get(index).getFeatureMap());
      fmap.put("additionalFeature", "feature");
      outputAS.add(startOffset, endOffset, "Lookup", fmap);
  }
person antorqs    schedule 28.10.2016