Além desses recursos, o GATE disponibiliza também uma engine de identificação de padrões de anotações chamada JAPE, Java Annotation Patterns Engine (CUNNINGHAM; MAYNARD; TABLAN, 2000) que provê transdutores de estado finito baseados em ex-
pressões regulares que atuam tendo como entrada o texto e as anotações definidas no AnnotationSetdo GATE. Assim, a partir de uma gramática JAPE, cada um dos trans- dutores JAPE definidos são executados e, sempre que as regras definidas na gramática são satisfeitas pelas anotações existentes no corpus, uma saída é gerada (composta ti- picamente de outras anotações) ou algum código Java que tenha sido especificado é disparado. Essa capacidade de geração de anotações e execução de código Java faz do JAPE um dos principais recursos de expansão do GATE, permitindo a construção de componentes de tratamento lingüístico completamente novos.
Uma gramática JAPE é composta de um conjunto de fases que são executadas seqüencialmente. Cada fase é composta por:
• Um nome único;
• Um identificador de entrada que define os tipos de anotação que serão conside- rados como entradas para a fase;
• Opções que modificam o comportamento da máquina JAPE durante a execução da fase;
• Macros para a definição de componentes da gramática (opcionalmente);
• Regras da gramática.
Por sua vez, uma regra é estabelecida com:
• Um nome único;
• Uma prioridade (opcional);
• Regras “à esquerda” (left-hand-side) que especificam expressões regulares que identificarão padrões de anotação. Pode conter operadores de expressão regular tais como “*” (zero ou mais ocorrências), “?” (zero ou uma ocorrência), “|” (ou) ou “+” (uma ou mais ocorrências);
• Regras “à direira” (right-hand-side) que definem as ações que devem ser execu- tadas quando as regras “a esquerda” forem satisfeitas. Pode conter qualquer bloco de código Java válido.
4.3 GATE: um Framework para Processamento Lingüístico 53
Phase:Fase1
1
Input:Token
2
Options: control = appelt
3 4 Rule:IdentificaUniversidades 5 Priority: 25 6 7 ( 8 {Token.string == "Universidade"} 9 ( {Token.string == "Federal"} )? 10 ( {Token.string == "de"} | 11 {Token.string == "da"} | 12 {Token.string == "do"} ) 13 ( {Token.category == "NNP"} )+ 14 15 ):nomeOrg 16 17 --> :nomeOrg.Organizacao = {regra="IdentificaUniversidades"} 18
Esse exemplo abre com a definição de uma única fase, Fase1, e especifica na linha 2 que serão consideradas as anotações do tipo Token (todos os outros tipos de anota- ções presentes no AnnotationSet serão desprezadas). Em seguida define-se a opção que a engine do JAPE deve executar em modo appelt, o que significa que se várias re- gras a esquerda forem satisfeitas simultaneamente somente a regra mais longa dentre elas será considerada. Se houver mais de uma regra nessas condições então a regra com a prioridade mais alta será aplicada. A regra IdentificaUniversidades tem prioridade 25, como se observa na linha 6.
A regra “à esquerda” (o bloco entre as linhas 8 e 16 que antecede o ‘->’) contém a expressão regular que será executada contra as anotações de entrada. A regra es- pecifica que a seqüência de tokens Universidade, seguida opcionalmente (“?”)por uma ocorrência de Federal, seguida de um entre os tokens (de, da, do) e de um ou mais ( “+”) substantivos próprios. Como se vê, cada Token tem pelo menos duas fea- tures: string, que contem a palavra ou símbolo do texto, e category, que contém a categoria gramatical (POS tag) atribuída pelo etiquetador gramatical em um passo an- terior do processamento do texto. Essa seqüência de anotações identificada será então referenciada como nomeOrg.
A regra “à direita” (que sucede o -> na linha 18) será executada para cada seqüên- cia de anotações nomeOrg e irá criar uma nova anotação que chamará Organizacao e que se estenderá por toda a seqüência descoberta. Como exemplo, se a regra for aplicada contra a seqüência de tokens “Universidade”, “de”, “São” e “Paulo”, uma nova anotação será criada e se estenderá pela seqüência "Universidade de São Paulo". Essa nova anotação terá apenas uma feature, rule, que receberá o valor
IdentificaUniversidades, para caracterizar a regra usada em sua identificação e criação.
54
5
Método Semi-Automático para
Construção de Ontologias de
Domínio
Essencialmente, o método proposto neste trabalho deverá fornecer apoio a um onto- logista na criação da ontologia, sugerindo conceitos, definições, relações e restrições capturadas a partir do texto. Esses componentes são então utilizados na geração de uma representação formal dessa ontologia com base na linguagem OWL.
Baseada nesse método, uma aplicação será implementada para automatizar o tra- tamento dos textos e a criação da ontologia. Em linhas gerais, as capacidades desse sistema podem ser descritas da seguinte forma:
1. Constituir um corpus de textos que sejam representativos do domínio cuja on- tologia se pretende construir;
2. Utilizar técnicas de Processamento de Linguagem Natural para identificar vá- rios componentes lingüísticos de interesse no corpus;
3. Identificar no corpus possíveis candidatos a conceitos; 4. Identificar no corpus relações entre esses conceitos;
5. Apresentar ao usuário os conceitos e relações descobertos para sua verificação e ajuste;
6. Representar esses conceitos e relações na linguagem formal escolhida (OWL).
5.1 Premissas e Escopo
O método proposto para a construção desse sistema é baseado na identificação de conceitos presentes no texto e nas relações expressas através de padrões lingüísticos entre esses conceitos.
Uma das premissas básicas do método é que os principais conceitos do domínio para o qual se deseja estabelecer a ontologia sejam comumente referenciados nos tex- tos mais significativos desse domínio. Assim, a descoberta de conceitos no texto é
5.1 Premissas e Escopo 55
focada nos termos que mais freqüentemente ocorrem no corpus analisado. Por exem- plo, uma análise dos termos do PMBOK, Project Management Body of Knowledge, (Project Management Institute, 1996) revela que o termo project é o mais comum do documento, como intuitivamente se esperaria.
Outra premissa fundamental é que sejam mencionadas nesse corpus as relações existentes entre os vários conceitos. As relações mais interessantes ao problema são aquelas do tipo “IsA” de classe-subclasse. Exemplos dessa relação extraídos literal- mente do PMBOK são “a project charter is a document that formally recognizes the exis- tence of a project”, “the project plan is a formal, approved document used to manage and control project execution”, “a deliverable is a tangible, verifiable work product”. Esse mesmo tipo de relação pode ser representada com outros padrões lingüísticos, como em “a program is a group of projects”, razão pela qual esses padrões devem ser cuidadosamente estabelecidos para maximizar a identificação dessas relações.
Ainda assim, não se espera que o corpus contenha todos os conceitos e relações de um domínio a que ele se refere, o que fundamenta a expectativa de que a ontologia criada por este método seja apenas parcial (e não completa).