Manual do SCAE - Relato 3

De LCAD
Revisão de 10h01min de 10 de julho de 2008 por Flibio (discussão | contribs) (MAE)
Ir para: navegação, pesquisa

Introdução

Este manual visa explicar como utilizar o SCAE, desde sua instalação até sua utilização.

Tutorial sobre o SCAE

Introdução

O Sistema de Codificação Automática de Atividades Econômicas (SCAE) possui a arquitetura mostrada na Figura 1. A interface de usuário com o Sistema é um navegador Internet (browser), que se comunica com o módulo Servidor de Aplicação (SA) do SCAE. Este módulo, por sua vez, se comunica com os outros dois módulos do SCAE: Core e Banco de Dados (BD).

Figura 1: Arquitetura do SCAE

Em uma solicitação de classificação de atividade econômica, o usuário, por meio da interface, envia ao SA uma descrição de atividade econômica. O SA, por sua vez, envia esta descrição ao Core, que a classifica e retorna códigos CNAE e medidas de confiança quanto às associações destes códigos com a descrição de atividade econômica recebida. De posse dos códigos CNAE, o SA requisita ao BD seus textos associado (descritores).

O Core também se comunica com o módulo BD, que é responsável por armazenar todo o conhecimento do SCAE (dicionário eletrônico; representação, interna ao Sistema, da tabela CNAE e das descrições de atividades econômicas usadas em treinamento; etc.). Além de realizar a classificação, o Core manipula as tabelas do Sistema (cria, insere dados, remove dados, etc.) armazenadas em BD. Diferentes submódulos do Core são responsáveis por esta manipulação. O SA está sendo desenvolvido em PHP, o BD em C, e o Core em C, Perl e Java.

Instalação

Preparando o ambiente para Instalação do SCAE

A preparação do ambiente para instalação do SCAE consiste basicamente na instalação e configuração das bibliotecas que este necessita. A seguir, são listadas as bibliotecas e os passos necessários para sua instalação.

Bibliotecas instaláveis a partir do YUM
  • w3c-libwww
  • w3c-libwww-devel
  • xmlrpc-c
  • xmlrpc-c-devel
  • xforms
  • xforms-devel
  • freeglut
  • freeglut-devel
  • libnet-devel
  • byacc
  • httpd
  • php

Efetue login como usuário root e entre com o comando a seguir para instalar as bibliotecas a partir do yum. Note que caso alguma delas já esteja instalada, o yum cuidará para que esta não seja instalada novamente e, caso alguma delas necessite de outra(s), o yum cuidará de instalar tais dependências. {Responda "y" quando for perguntado "Is this ok [y/N]:".}

yum install -y w3c-libwww w3c-libwww-devel xmlrpc-c xmlrpc-c-devel xforms xforms-devel freeglut freeglut-devel libnet-devel byacc httpd php
Bibliotecas instaláveis a partir do CD
JDK

O pacote JDK encontra-se no CD no caminho:

libs/jdk/jdk-6u4-linux-i586.bin

Copie o arquvio para o /opt:

 cp /media/SCAE/libs/jdk/jdk_6u4_.bin /opt

Transforme este arquivo em um executável:

chmod +x /opt/jdk_6u4_.bin

Instale o pacote com o comando a seguir:

cd /opt; ./jdk_6u4_.bin ; ln -s jdk1.6.0_04 jdk-latest

A licença do pacote será exibida (aperte a tecla de espaço para passar cada tela) e em seguida você será perguntado se concorda com ela. Responda 'yes' para dar início a instalação. Em seguida, Copie o de configuração a seguir com o seguinte comando, que também o torna executável:

cp /media/SCAE/libs/jdk/java.sh /etc/profile.d/ ; chmod +x /etc/profile.d/java.sh

Agora execute o seguinte comando para tornar o arquivo disponível:

source /etc/profile.d/java.sh

Então execute o seguinte comando para verificar se o path está correto:

which java

Você deverá obter algo como:

/opt/jdk-latest/bin/java

Agora execute os seguintes comandos:

/usr/sbin/alternatives --install /usr/bin/java java /opt/jdk1.6.0_04/bin/java 2
/usr/sbin/alternatives --config java

Após ter inserido o último comando, você será perguntado sobre o tipo de Java que deseja para o sistema. Pressione 2(A opção que indica o JDK 1.6.0_04) e aperte enter.

Para confirmar a versão do seu Java Runtime Environment, execute:

java -version

A saída esperada é:

java version "1.6.0_04"
Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharin

Por último, adicione as seguintes linhas ao seu arquivo .bashrc no seu diretório home

#JAVA
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/i386
export LD_LIBRARY_PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/i386/client
export LD_LIBRARY_PATH
MAE

Como root, extraia a MAE para o /opt com o comando a seguir:

cd /opt; tar -zxvf /media/SCAE/libs/MAE/MAE.tgz 

Compile a MAE com o comando a seguir:

cd /opt/MAE; make clean; make -f Makefile.no_interface

Em seguida, insira as seguintes linhas ao seu .bashrc (localizado no seu diretório home):

# MAE 
export MAEHOME=$HOME/PATH/MAE
PATH=$PATH:$MAEHOME/bin

Instalação do corretor ortográfico

Antes de compilar o DB_CORE, é necessário instalar as bibliotecas do corretor ortográfico do SCAE. Para isso, siga os passos abaixo:

1 - Entre no diretório DB_CORE/SPELLER/scaeaspell-0.60.5/ e digite:

./configure
make

2 - Inclua no arquivo .bashrc no seu home o caminho das bibliotecas do Aspell:

#SCAE SPELLER
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/scae/code/CORES/DB_CORE/SPELLER/scaeaspell-0.60.5/.libs
export LD_LIBRARY_PATH

3 - Atualize as variáveis de ambiente:

source .bashrc 

Agora, o DB_CORE está pronto para ser compilado.

Compilando e Executando o BD

Antes de compilar o DB_CORE é necessário seguir os passos abaixo (como root):

Por default, o Fedora Core 6 vem com um Java antigo instalado, então você precisa instalar a versão mais nova do Java Runtime Environment para desfrutar de todas as suas funcionalidades. Abaixo, nós o ensinaremos a instalar/atualizar seu Java Environment.

O primeiro passo é realizar o dowload daqui [1]. Você precisará aceitar a licença e selecionar linux como plataforma. Após clicar em continue, um nova página será aberta, na qual você deverá selecionar o arquivo .bin de nome jdk-6u4-linux-i586.bin. Após a seleção o download será iniciado.

Agora o DB_CORE pode ser compilado com sucesso.

Compile o BD (Figura 1) executando os seguintes comandos:

cd code/CORES/DB_CORE
make clean
make

Estes comandos vão criar o executável db_core no diretório code/CORES/DB_CORE. Este arquivo, quando executado, será um daemon que implementa o BD.

CRIAÇÃO DE TABELAS

Após compilado, podemos utilizar o db_core para criar um conjunto básico de tabelas que permitem demonstrar as funcionalidades do SCAE (assuma sempre que o diretório corrente é o último especificado por um comando cd). Executemos, por exemplo, o script abaixo:

./build_tables_subclasse_110_tf.bat

A saída deste comando deve ser:

Locale set to pt_BR.UTF-8.
Loading known tables from .csv
Number of known tables = 18
Creating KNOWN_LEXICONS_saved.csv file.
Creating KNOWN_TTVS_saved.csv file.
Creating KNOWN_TRAININGS_saved.csv file.
Creating KNOWN_TESTS_saved.csv file.
Loading dictionary .csv
Number of dictionary words = 1212255
Number of distincts words = 843235
Loading cnae subclasses .csv
Number of CNAE-Subclasses = 1183
Loading dados 'CSV_FILES/dados_vitoria_110.csv'
Number of economic activities descriptions = 14204
Number of distinct economic activities descriptions = 3281
Loading dados 'CSV_FILES/dados_bh_110.csv'
Number of economic activities descriptions = 175770
Number of distinct economic activities descriptions = 87999
Lexicon size = 1356. Number of words discarded due to word frequency (PFS) = 0.
CRIAÇÃO DE DICIONÁRIOS A PARTIR DE FILTROS

O DB_CORE permite que você construa dicionários filtrados a partir de tabelas (CNAE e/oui dados) ou a partir de um dicionário preexistente. Abaixo, descreveremos dois scripts que geram tais dicionários.

Criando um dicionário a partir de tabelas

O script abaixo usa o db_core para criar um dicionário filtrado a partir de: um filtro especificado, opções de filtragem e tabelas (CNAE e/ou dados):

./build_filtered_dictionary_from_tables.bat

Este script contém as seguintes linhas:

./db_core \
load_csv_cnae_subclasse CNAE_110_SUBCLASSE \
load_csv_dados DADOS_VITORIA_SUB_110 \
create_filtered_dictionary DICIONARIO_STOP_STEMM_ACCENT 1 "STOP + STEMM + ACCENT" 2 CNAE_110_SUBCLASSE-DESCRICAO_SUB DADOS_VITORIA_SUB_110-OBJETO_SOCIAL

DICIONARIO_STOP_STEMM_ACCENT é o nome do dicionário a ser criado. Este diconário será automaticamente inserido na Known_tables. O número 1 especifica que o filtro utilizará o stemmizador da Maria Abadia Lacerda Dias (mald@univates.br) (2 especifica que o filtro utilzará o stemmizador do Patraick Marques Cirelli). O texto entre aspas especifica as filtragens a serem adotadas (STOP = sem stop-words, STEMM = realiza stemming e ACCENTE = retira acento). O número 2, no exemplo, especifica a quantidade de tabelas que serão utilizadas para constrir o dicionário filtrado.

Criando um dicionário a partir de outro dicionário

O script abaixo usa o db_core para criar um dicionário filtrado a partir de: um filtro especificado, opções de filtragem e um dicionário preexistente.

./build_filtered_dictionary_from_dictionary.bat

Este script contém as seguintes linhas:

./db_core \
load_dictionary DICIONARIO \
create_filtered_dictionary_from_dictionary DICIONARIO_FILTERED_VERSION 1 "STEMM + STOP + ACCENT" DICIONARIO

DICIONARIO_FILTERED_VERSION é o nome do dicionário a ser criado. Este diconário será automaticamente inserido na Known_tables. O número 1 especifica que o filtro utilizará o stemmizador da Maria Abadia Lacerda Dias (mald@univates.br) (2 especifica que o filtro utilzará o stemmizador do Patraick Marques Cirelli). O texto entre aspas especifica as filtragens a serem adotadas (STOP = sem stop-words, STEMM = realiza stemming e ACCENTE = retira acento). O último parâmetro, DICIONARIO, especifica o nome do dicionário que servirá de base para a construção do novo.

Execuntando o DB_CORE SERVER

Após ter criado todas as tabelas de interesse, você pode colocar o daemon db_core em operação com o comando:

nohup ./db_core init_server ports.cfg&

Mensagens de erro geradas pelo db_core serão gravadas no arquivo nohup.out, conforme mensagem mostrada após a execução do comando acima (nohup: ignoring input and appending output to nohup.out). Com a execução deste comando, o BD da Figura 1 estará em operação. As tabelas mantidas por este banco de dados são necessárias para a operação do SCAE serão carregadas conforme demandadas pelo SCAE. Para interromper o db_core, descubra o seu PID com o comando:

ps -A | grep db_core

e kill o db_core com o comando

kill -9 PID (onde PID é o número do processo informado pelo comando ps)

Compilando a Biblioteca Compartilhada de Comunicação (shared)

Antes de compilar e executar um CORE, é necessário garantir que a biblioteca compartilhada de comunicação esteja compilada e que sua variável de ambiente esteja setada. Para isto, siga os passos a seguir:

cd code/CORES/shared
make clean
make

Em seguida, insira as seguintes linhas ao seu .bashrc (localizado no seu diretório home):

# SHARED 
export SHAREDHOME=$HOME/code/CORES/shared

Compilando a Biblioteca Compartilhada MAE

Como root, copie a MAE para o /opt

cp -r /media/CDROM/libs/MAE /opt

Compile a MAE com o comando a seguir:

cd /opt/MAE; make clean; make –f Makefile.no_interface

Em seguida, insira as seguintes linhas ao seu .bashrc (localizado no seu diretório home):

# MAE 
export MAEHOME=$HOME/PATH/MAE
PATH=$PATH:$MAEHOME/bin

Compilando e Executando o VS_CORE

O Core da Figura 1, na verdade, pode ser composto por um ou mais classificadores. Na versão atual do SCAE, três classificadores estão disponíveis: VS_CORE WNN_CORE e WNN_COR_CORE. O Vector Space (VS)_Core emprega a técnica de mesmo nome para classificar (na verdade, categorizar) texto, enquanto que o Weightless Neural Network (WNN)_Core e o Weightless Neural Network Correlate (WNN_COR)_Core empregam redes neurais sem peso (do tipo Virtual Generalizing Ramdon Access Memory - VG-RAM) para o mesmo fim. Mais detalhes sobre como estas técnicas podem ser usadas para categorizar objetos sociais de empresas (atividades econômicas) segunda a tabela de Classificação Nacional de Atividades Econômicas (CNAE) podem ser encontrados no trabalho De Souza, A. F.; Pedroni, F.; OLIVEIRA, E.; Ciarelli, P. M.; Henrique, W. F.; Veronese, L. . Automated Free Text Classification of Economic Activities using VG-RAM Weightless Neural Networks. International Conference on Intelligent Systems Design and Applications (ISDA), 2007, Rio de Janeiro. Proceedings of ISDA, 2007..

Para compilar o VS_CORE, volte para o seu diretório raiz e digite os comandos:

cd code/CORES/VS_CORE
make clean
make

Estes comandos vão criar o executável vs_core no diretório code/CORES/VS_CORE. Este executável é um daemon que implementa o Core que classifica segundo a técnica VS. Para colocá-lo em operação, digite:

nohup ./vs_core&

Com o comando acima, parte do Core da Figura 1 estará em operação. Para interromper o vs_core, descubra o seu PID com o comando:

ps -A | grep vs_core

e kill o vs_core com o comando

kill -9 PID (onde PID é o número do processo informado pelo comando ps)

Compilando e Executando o WNN_CORE

Antes de compilar o WNN_CORE você já deveria ter compilado a biblioteca MAE

Para compilar o WNN_CORE volte para o seu diretório raiz e digite os comandos:

cd code/CORES/WNN_CORE
make clean
make

Estes comandos vão criar o executável wnn_core no diretório code/CORES/WNN_CORE. Este executável é um daemon que implementa o Core que classifica texto usando VG-RAM WNN. Para colocá-lo em operação, digite:

nohup ./wnn_core&

Com o comando acima, uma segunda parte do Core da Figura 1 estará em operação. Para interromper o wnn_core descubra o seu PID com o comando:

ps -A | grep wnn_core

e kill o wnn_core com o comando

kill -9 PID (onde PID é o número do processo informado pelo comando ps)

Compilando e Executando o WNN_COR_CORE

Antes de compilar o WNN_COR_CORE você já deveria ter compilado a biblioteca MAE

Para compilar o WNN_COR_CORE volte para o seu diretório raiz e digite os comandos:

cd code/CORES/WNN_COR_CORE
make clean
make

Estes comandos vão criar o executável wnn_cor_core no diretório code/CORES/WNN_COR_CORE. Este executável é um daemon que implementa o Core que classifica texto usando VG-RAM WNN. Para colocá-lo em operação, digite:

nohup ./wnn_cor_core&

Com o comando acima, uma segunda parte do Core da Figura 1 estará em operação. Para interromper o wnn_cor_core descubra o seu PID com o comando:

ps -A | grep wnn_cor_core

e kill o wnn_cor_core com o comando

kill -9 PID (onde PID é o número do processo informado pelo comando ps)

Configurando o SA

Com os deamons db_core, vs_core e class_cnae em operação, é possível examinar todas as funcionalidades do SCAE por meio de um browser, graças ao seu Servidor de Aplicação (SA) (ver Figura 1). O SA foi implementado em PHP e seu código fica no diretório code/scaeweb. Para acessá-lo através de um browser, ele precisa ser "servido" por um servidor http, como o Apache, por exemplo. Se você está instalando o SCAE em uma máquina stand alone, você pode instalar o apache e o php com o comando (você precisa ser root para usar o yum):

yum install apache php

Para que o apache sirva o SA, coloque um link simbólico do diretório scaeweb para o diretório raiz de páginas http do Apache (você precisa ser root para escrever no diretório raiz do Apache):

ln -s code/scaeweb /var/www/html/scaeweb

Além disso, vc precisa garantir que o caminho até o diretório code/scaeweb tenha permissão de leitura. Para isto basta adicionar essas permissões com o comando chmod. Por exemplo, caso seu diretório seja /home/usuario:

cd /home
chmod +r+x usuario

Você pode então acessar o SCAE com um browser em sua máquina na URL: http://127.0.0.1/scaeweb

Seu browser deve mostrar a imagem da Figura 2. Caso ela não apareça, você tem problemas de configuração no Apache ou PHP. Neste caso, se a mensagem do browser indicar que você não tem permissão de acesso ao diretório scaeweb, experimente copiar todo o conteúdo do diretório code/scaeweb para /var/www/html/:

rm /var/www/html/scaeweb
cp -r code/scaeweb /var/www/html

Caso o Apache funcione exibindo o conteúdo da página mas não consiga interpretar o php, experiemnte reiniciá-lo:

/etc/init.d/httpd restart
Figura 2: SCAE

Se funcionar, experimente voltar à solução com o link simbólico e reduzir o nível de segurança do SELinux (Security-Enhanced Linux) com a ferramenta Sistema->SELinux Management. Mude System Default Enforcing Mode e Current Enforcing Mode para Permissive. Se funcionar, o SELinux não permite que o Apache (httpd) acesse diretórios de usuário via links simbólicos (e possivelmente muitos outros diretórios). Neste caso, fique com a cópia de scaeweb no /var/www/http, ou deixe o SELinux como indicado acima, ou configure o SELinux para permitir que o Apache acesse links simbólicos.

Se a redução do nível de segurança do SELinux funcionar, o Apache pode não estar configurado para permitir o seu próprio acesso a links simbólicos. Neste caso, consulte a documentação do Apache sobre o assunto na Internet. O problema pode estar, também, no PHP.

Se você conseguir ver a Figura 2 no seu browser, o SCAE está pronto para operar (desde que também estejam rodando o DB_CORE e ao menos um core categorizador). Neste ponto, já é possível utilizar a interface para administrar o Sistema. Siga pelo link de Administração para treinar o categorizador desejado e ter a possibilidade de efetuar categorizações. Para maiores detalhes, remeta-se a seção Utilizando a Interface Web.

As demais funcionalidade do SCAE (inclusive sua interface via linha de comando) são apresentadas na próxima seção.

  1. Instalar as depedências do scae:
    1. Instalar php
    2. Instalar o apache (httpd)
    3. Instalar o jdk1.6.0_04
    4. Instalar w3c-libwww e w3c-libwww-devel
    5. Instalar xmlrpc-c e xmlrpc-c-devel
    6. Instalar a aplicação MAE
    7. Instalar o Aspell
  1. Instalar a aplicação MAE:
    1. Instalar o xforms e xforms-devel
    2. Instalar freeglut e freeglut-devel
    3. Instalar libnet e libnet-devel
    4. Compilar a MAE com make -f Makefile.no_interface
  1. Configurar as variáveis de ambiente no arquivor .bashrc
    1. Especificar o path do java/lib/i386 na LD_LIBRARY_PATH
    2. Especificar o path do java/lib/i386/client na LD_LIBRARY_PATH
    3. Especificar o path do /opt/MAE na MAEHOME
    4. Especificar o path do /opt/MAE/bin na PATH
    5. Especificar o path CORES/shared na SHAREDHOME
    6. Especificar o path do SPELLER/scaeaspell-0.60.5 na LD_LIBRARY_PATH
  1. Instalar o SCAE
    1. ./configure
    2. make
    3. make install
  1. Instalar o scaeweb
    1. Inicializar o servidor web Apache
    2. Criar um link em /var/www/html/ apontando para code/scaeweb
    3. Alterar o home do usuário para permissão de leitura (chmod +rx user_name)

Utilização