Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 лаб5_AQL.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

9.4.5.Теперь эти представления могут быть использованы в текущем модуле для экстрактора AmountwithUnit. Переместитесь к aql скрипту этого экстрактора.

9.4.6.Добавьте следующие строки кода в самом начале, сразу после названия модуля, для RevenueByDivision_CandidateGeneration, чтобы импортировать требуемые представления в текущий модуль.

module RevenueByDivision_CandidateGeneration;

--<add the following lines>

import view Number from module RevenueByDivision_BasicFeatures as Num;

import view Unit from module RevenueByDivision_BasicFeatures as Quant;

Примечание

Оператор импорта помещает объекты в контекст текущего модуля. Оператор импорта используется только, чтобы импортировать объекты из других модулей. Помните, что объект объявленный в файле AQL определенного модуля, будет доступен любому другому файлу AQL в том же самом модуле.

9.4.7.После импорта исправьте строку ‘from’, присваивающую переменные N и U к алиасам Num и Quant, которые мы создали для представлений Number и Unit. Далее измените шаблон, чтобы искать в тексте символ $, сопровождаемый числом и единицей измерения. (‘$’ <N.match> <U.match>). В результате экстрактор будет выглядеть следующим образом:

create view AmountWithUnit as

extract pattern '$'<N.match> <U.match>

return group 0 as match

from Num N, Quant U;

output view AmountWithUnit;

9.4.8.Запустите экстрактор, перейдите к Extraction Tasks и выберите Step 4.a в Extraction Tasks (3-я опция "Run the extraction plan on the set of documents that are labeled"). Вы увидите результат в окне Annotation Explorer. Дважды щелкните по строке в Annotation Explorer, чтобы увидеть панель справа и установить флажок для AmountWithUnit.

Рис.57 – Результаты для экстрактора AmountwithUnit, последовательное размещение числового значения после единицы измерения

9.5.Создание экстрактора для RevenueByDivision

Добавьте правило Candidate Generations для RevenueByDivision, чтобы можно было идентифицировать имя подразделения (Division), сопровождаемого упоминанием о его доходе (Revenue), с определенным разрывов в словах между ними. Например:

  • Global Financing segment revenues

  • Software segment revenues

Мы будем использовать оператор AQL Select следующим образом:

9.5.1.В Extraction Plan перейдите к RevenueByDivision и щелкните правой кнопкой по нему. Выберите New AQL statement и пункт Candidate Generation AQL Statement.

9.5.2.В диалоговом окне введите RevenueOfDivision1 для View Name и AQL script. Выберите Select в качестве Type. Вы можете оставить опцию 'output view' неотмеченной. Вы получите следующий шаблон AQL:

create view RevenueOfDivision1 as

select <name>

into <output view name>

from <arguments>

9.5.3.Измените output на export для Revenue и Division, чтобы экспортировать представление в другой модуль.

9.5.4.Импортируйте представления в текущий файл для RevenueOfDivision1, добавив следующие две строки кода в самом начале aql-файла, сразу после названия.

import view Revenue from module RevenueByDivision_BasicFeatures as Rev;

import view Division from module RevenueByDivision_BasicFeatures as Div;

9.5.5.Для оператора Select мы хотим выбрать промежуток, который комбинирует промежутки Division и Revenue в разных порядках, объединив промежутки и отметив их как соответствующие. Далее от объединенного промежутка мы выбираем требуемое имя подразделения.

select CombineSpans(D.match, R.match) as match, D.match as division

9.5.6.Чтобы удостовериться, что название подразделения и доход используются в одном выражении рядом друг с другом, мы добавляем следующий оператор:

where FollowsTok(D.match, R.match, 0,1);

9.5.7.В результате код должен выглядеть так:

create view RevenueOfDivision1 as

select CombineSpans(D.match, R.match) as match, D.match as division

from Rev R, Div D

where FollowsTok(D.match, R.match, 0,1);

Добавьте еще одно правило Candidate Generation с именем “RevenueOfDivision2”, на основе шаблона “Revenue for (from) … Division”, который ищет фрагмент текста с двумя или менее словами между словами “for” (или “from”) и названием подразделения. Например: “Revenues from the Systems and Technology Group (S&TG) segment” (В данном случае – одно слово the между from и названием подразделения).

9.5.8.В Extraction Plan щелкните правой кнопкой по RevenueByDivision New AQL Statement. И выберите Candidate Generation AQL Statement.

9.5.9.В диалоговом окне введите RevenueOfDivision2 для View/AQL script Name и выберите Pattern в качестве Type. Вы можете оставить опцию ‘output view’ неотмеченной.

create view RevenueOfDivision2 as

extract pattern <pattern specification>

return group 0 as match

from <list of input views> ;

9.5.10.Спецификация шаблона имеет тот же синтаксис, что и AmountwithUnit с добавлением проверки на «разрывы» между словами. Для этого в коде используется: ‘<Token> {0,2}’. (Между словами с меткой Revenue и меткой Division – не более двух слов.)

9.5.11.Заключительный код будет выглядеть следующим образом:

create view RevenueOfDivision2 as

extract pattern <R.match> ('from'|'for') <Token>{0,2} (<D.match>)

return group 0 as match and group 2 as division

from Rev R, Div D;

9.5.12.Добавьте правило Union All Rule для объединения результатов RevenueOfDivision1 и RevenueOfDivision2.

В Extraction Plan щелкните правой кнопкой по RevenueByDivision и выберите New AQL Statement -> Candidate Generation AQL Statement. В открывшемся диалоговом окне введите следующие данные:

  • RevenueByDivision для View/Script Name,

  • Выберите Union All в качестве Type,

  • Поставьте флажок на опции ‘output view'.

В результате шаблон для RevenueByDivision.aql должен выглядеть следующим образом:

create view RevenueByDivision as

(select <name 1> from <input view 1>)

union all

(select <name 2> from <input view 2>);

output view RevenueByDivision;

9.5.13.Два входных имени представления (<input view>) - RevenuebyDivision1 и RevenuebyDivision2, таким образом, в результате код экстрактора должен быть таким:

create view RevenueByDivision as

(select R1.* from RevenueOfDivision1 R1)

union all

(select R2.* from RevenueOfDivision2 R2);

output view RevenueByDivision;

Используя данное представление, объединяются результаты RevenueOfDivision1 и RevenueOfDivision2.

Вопрос № 4:

Какой оператор используется для объединения представлений?

________________________________________________________

Теперь, ваш Extraction Plan должен выглядеть следующим образом:

Рис. 58 – Сгенерированные candidates для экстрактора RevenueByDivision

9.5.14.В Extraction Tasks выберите Step 4: Test the Extractor, выберите последний пункт - Run the extraction plan on the set of documents that are labeled и щелкните по значку рядом с ним. Вы увидите информацию – имена подразделений и их доходы как показано ниже.

Примечание

Выберите match (SPAN) для Division и Revenue в окне справа, чтобы подсветить извлеченный текст.

Рис.59– Визуализация извлеченных объектов RevenueByDivision и AmountWithUnit.

В красной области на рисунке выделены недостающие ассоциации между названиями подразделений и их доходами. Это будет устранено на следующем этапе. Ключом для этой ассоциации является то, что между суммой дохода и названием подразделения имеется несколько слов.