#gate #information-extraction
#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 в структуру (например, hashmap), чтобы я мог найти конкатенацию этих 4 ключевых частей и получить (например) «VALUE1». Можно ли загрузить справочник из файла JAPE и использовать его в качестве словаря?
Есть ли какой-либо другой (лучший) способ сделать то, что мне нужно?
Большое спасибо.
Ответ №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);
}