Integrando o RSLP Stemmer ao seu código

Alexandre Ramos Coelho, arcoelho@inf.ufrgs.br
Última Atualização: Wed May 9 23:47:17 2007

Introdução

Para usar o RSLP em seu código, são necessários os seguintes arquivos:

Integrando o código do RSLP

Para possibilitar o uso do RSLP em programas internos, o mesmo foi reescrito para ser integrado em outros programas escritos em linguagem C de forma simplificada, exigindo do usuário o uso de apenas três funções básicas. Assim, para utilizá-lo no código-fonte de seu programa, deve-se:

  1. Incluir o arquivo rslpStemmer.h, adicionando ao seu arquivo fonte principal:
      ...
      #include "rslpStemmer.h"
      ...
    
  2. Incluir a chamada à função rslpLoadStemmer, que faz o carregamento de todos os arquivos e estruturas necessárias para o funcionamento do stemmer. Esta função somente precisa ser chamada uma vez, recebendo como parâmetro uma estrutura do tipo rslp_stemmer_main_struct. No código-fonte do RSLP já existe uma variável deste tipo declarada globalmente (rslpMainStruct), sendo possível utilizá-la diretamente. Além disso, é necessário também fornecer para a função o nome e o caminho do arquivo de configuração principal (por exemplo, rslpconfig.txt). Neste caso, a chamada à função seria:
      rslpLoadStemmer(&rslpMainStruct, "rslpconfig.txt");
    
  3. No seu programa principal, antes de seu encerramento, chamar a função rslpUnloadStemmer, que desalocará toda a memória utilizada pelas estruturas internas do stemmer. Como parâmetro, deve ser passada a mesma estrutura utilizada na chamada à rslpLoadStemmer. Por exemplo:
      rslpUnloadStemmer(&rslpMainStruct);
    
  4. Adicionar a compilação dos arquivos rslpStemmer.c e rslpTrie.c ao Makefile de seu projeto. Abaixo um exemplo de Makefile, onde exemplo.c é o nome do arquivo fonte de seu programa:
      CC=gcc
      OBJS=exemplo.o rslpStemmer.o rslpTrie.o
      
      exemplo : $(OBJS)
      	$(CC) $(OBJS) -o exemplo
      
      exemplo.o : exemplo.c
      	$(CC) -c exemplo.c 
      
      rslp.o : rslpStemmer.c
      	$(CC) -c rslpStemmer.c
      
      trie.o : trie.c
      	$(CC) -c rslpTrie.c
      
      $(OBJS) : rslpTrie.h rslpStemmer.h 
    
    No Dev-C++, basta adicionar os arquivos citados ao seu projeto, o Dev se encarrega de criar o Makefile apropriado.

Processando palavras com o stemmer

Para efetivamente usar o stemmer, basta utilizar a função rslpProcessWord, passando à ela a estrutura principal do stemmer (previamente carregada através de rslpLoadStemmer) e uma variável com a palavra que se deseja processar. Como a palavra será gradualmente modificada por cada passo do stemmer, é necessário que a mesma esteja armazenada em uma variável que possibilite o aumento do seu tamanho, como array do tipo char previamente alocado com um tamanho razoável (por exemplo, palavra pode ter sido declarada em seu programa como char palavra[80]). Um exemplo de uso seria:

  ...
  char palavra[80];
  
  ...
  lerPalavraDeAlgumDispositivo(palavra);
  ...
  rslpProcessWord(palavra, &rslpMainStruct);
  ...

Após a chamada à função rslpProcessWord a variável palavra conterá o stem resultante da aplicação das regras de stemming sobre a palavra originalmente passada à função.

O arquivo de configuração

A função de inicialização - rslpLoadStemmer() - primeiramente tenta ler o arquivo de configuração do stemmer. Neste arquivo estão indicados os nomes de arquivos para leitura dos passos e suas regras, para a sua ordem de aplicação delas, além de configuração do dicionário de Entidades Nomeadas e para stem, entre outras coisas. Sua sintaxe é simples, consistindo do nome da variável de configuração (que deve estar escrita em letras maiúsculas), seguido de um sinal de igual ("="), e o valor desejado para aquela configuração (os valores possíveis dependem de cada variável). A lista de variáveis de configuração segue abaixo:

Variável Valores possíveis Tipo
STEPS_FILE String com o nome do arquivo de passos e regras Obrigatório
FLOW_FILE String com o nome do arquivo com o fluxo de aplicação das regras. Caso não exista, o RSLP automaticamente carrega o fluxo de regras padrão. Opcional
DO_STEMMING YES ou NO. Indica se o processo de stemming deve ser realizado. O padrão é YES. Caso seja selecionado NO, a função rslpProcessWord não aplica as regras de stemming, deixando a palavra passada intocada. Útil para depuração de código. Opcional
REPLACE_ISO_CHARS YES ou NO. Indica se deve substituir caracteres acentuados na palavra pelos equivalentes sem acento (por exemplo, á por a). Opcional
USE_STEM_DICTIONARY YES ou NO. Indica se deve ser utilizado o dicionário de stems, que consiste em armazenar em uma árvore TRIE cada palavra lida e seu respectivo stem. Em uma nova ocorrência desta palavra, a mesma não seria novamente processado, já que o seu stem estaria armazenado no dicionário. O uso deste dicionário aumenta drasticamente o desempenho do stemmer, porém às custa de um uso maior de memória. Opcional
STEM_DICT_MAX_SIZE Um valor inteiro, à partir de 0. Indica o tamanho máximo de memória (em megabytes) que o dicionário de stems pode utilizar. Caso este limite seja atingido, novas palavras não são mais adicionadas ao dicionário, obrigando o seu reprocessamento a cada nova ocorrência. Se for configurado para 0, o uso do dicionário é desativado. Opcional
USE_NAMED_ENTITIES YES ou NO. Indica se deve ser utilizado o dicionário de Entidades Nomeadas. Entidades Nomeadas, são, por exemplo, nomes próprios, que não deveriam ser reduzidos a stems. Assim, se ativado este dicionário, sempre que uma palavra iniciada por letras maiúscula é recebida, o stem primeiro verifica sua presença neste dicionário. Caso exista, a palavra não é processada pelos passos do stemmer, não sendo modificada (à exceção do case das letras e à substituição de acentos, caso ativada). Opcional
NAMED_ENTITIES_FILE String com o nome do arquivo com a listagem de Entidades Nomeadas. Opcional
NAMED_ENTITIES_DICT_MAX_SIZE Idem a STEM_DICT_MAX_SIZE. Opcional

Abaixo um exemplo de arquivo de configuração do RSLP Stemmer:

  STEPS_FILE=steprules.txt
  DO_STEMMING=YES
  REPLACE_ISO_CHARS=YES
  USE_STEM_DICTIONARY=YES
  USE_NAMED_ENTITIES=YES
  NAMED_ENTITIES_FILE=nomes.xml
  STEM_DICT_MAX_SIZE=123
  NAMED_ENTITIES_DICT_MAX_SIZE=50
  FLOW_FILE=rslpflow.original

IMPORTANTE: o RSLP procura o arquivo de configuração na pasta atual, ou seja, o arquivo deve estar presenta na mesma pasta em que se está rodando o RSLP.