Mudanças entre as edições de "Manual do SCAE"

De LCAD
Ir para: navegação, pesquisa
(→‎Adicionando um CORE ao SCAE)
Linha 1: Linha 1:
−
__TOC__
 
−
==Introdução==
 
−
Este manual visa explicar como utilizar o SCAE, desde sua instalação e manutençã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).
 
−
 
−
[[imagem:arquitetura_do_scae.gif|frame|right|130px|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.
 
−
 
−
===Download===
 
−
 
−
====Como Acessar o Repositório do SCAE====
 
−
É possível acessar o repositório do SCAE através de um navegador ou ainda baixar seus códigos direto para sua máquina.
 
−
O acesso só é permitido a usuários do Projeto SCAE cadastrados e com conta no LCAD.
 
−
 
−
=====Organização do Repositório=====
 
−
O repositório está dividido da seguinte maneira:
 
−
* code
 
−
** CORES (códigos-fonte dos categorizadores)
 
−
*** DB_CORE
 
−
*** USER_INTERFACE
 
−
*** VS_CORE
 
−
*** WISARD_CORE
 
−
*** WNN_CORE
 
−
*** WNN_COR_CORE
 
−
*** config
 
−
*** shared (diretório da biblioteca compartilhada de comunicação)
 
−
** db_server (código da API do Oracle -- em desuso no momento)
 
−
** scaeweb (código da Interface WEB)
 
−
* data (dados do Oracle -- em desuso no momento)
 
−
* install (diretório de instalações)
 
−
* Roteiros
 
−
 
−
=====Navegando no Repositório=====
 
−
Para acessar o repositório através de um navegador, basta seguir para [http://www.lcad.inf.ufes.br/svn/scae http://www.lcad.inf.ufes.br/svn/scae] e utilizar sua conta/senha do LCAD.
 
−
 
−
=====Baixando o SCAE para sua Máquina=====
 
−
Antes de baixar o repositório do SCAE, recomenda-se navegar pelo mesmo e identificar qual(is) de suas partes será(ão) utilizada(s). Dessa forma, é possível fazer o download apenas das partes de interesse, evitando um longo download de todo seu conteúdo.
 
−
 
−
Para baixar o repositório completo do SCAE para sua máquina utilize
 
−
svn co http://www.lcad.inf.ufes.br/svn/scae
 
−
 
−
Para baixar apenas uma parte, por exemplo, um diretório da árvore do repositório, acrescente o caminho ao endereço.
 
−
Exemplo:
 
−
* Baixar apenas os códigos-fonte dos CORES
 
−
svn co http://www.lcad.inf.ufes.br/svn/scae/code/CORES
 
−
 
−
Outras informações sobre o svn podem ser encontradas no nosso manual de [[Uso Básico do Subversion]].
 
−
 
−
====Como Acessar o Repositório MAE====
 
−
Também é possível acessar o repositório da Máquina Associadora de Eventos (MAE) através de um navegador ou ainda baixar seus códigos direto para sua máquina.
 
−
O acesso só é permitido a usuários do Projeto SCAE cadastrados e com conta no LCAD.
 
−
 
−
=====Organização do Repositório=====
 
−
O Repositório está dividido da seguinte maneira:
 
−
* bin
 
−
* docs
 
−
* etc
 
−
* examples
 
−
** biological_vergence
 
−
** brain
 
−
** calibration
 
−
** character
 
−
** circle
 
−
** class_cnae
 
−
** doorman
 
−
** face_recog
 
−
** face_recog2.2
 
−
** face_recog_new
 
−
** face_recog_without_filters
 
−
** log_polar
 
−
** monks
 
−
** qian
 
−
** qian_analysis
 
−
** robot
 
−
** robot008
 
−
** robot013
 
−
** robot020
 
−
** robot050
 
−
** robot_explorer
 
−
** robot_motion
 
−
** robot_mult_freq
 
−
** robot_smv
 
−
** robot_smv_10.0
 
−
** robot_smv_11.0
 
−
** robot_smv_12.0
 
−
** robot_smv_13.0
 
−
** robot_smv_2.0
 
−
** robot_smv_3.0
 
−
** robot_smv_4.0
 
−
** robot_smv_5.0
 
−
** robot_smv_7.0
 
−
** robot_smv_8.0
 
−
** robot_smv_9.0
 
−
** robot_without_filters
 
−
** simple_xor
 
−
** smv
 
−
** smv1.1
 
−
** smv2.0
 
−
** stereo
 
−
** test_filter
 
−
** vergence
 
−
** visual_search
 
−
** visual_search_1.0
 
−
** visual_search_10.0
 
−
** visual_search_1.1
 
−
** visual_search_1.2
 
−
** visual_search_2.0
 
−
** visual_search_2.1
 
−
** visual_search_4.0
 
−
** visual_search_5.0
 
−
** visual_search_7.0
 
−
** visual_search_8.0
 
−
** visual_search_9.0
 
−
** visual_search_smv
 
−
** visual_search_statisc
 
−
** visual_search_without_filters
 
−
** wnn_cnae
 
−
** wnn_cor_cnae
 
−
* images
 
−
* include
 
−
* lib
 
−
* src
 
−
* tools
 
−
 
−
=====Navegando no Repositório=====
 
−
Para acessar o repositório através de um navegador, basta seguir para [http://www.lcad.inf.ufes.br/svn/MAE http://www.lcad.inf.ufes.br/svn/MAE] e utilizar sua conta/senha do LCAD.
 
−
 
−
=====Baixando a MAE para sua Máquina=====
 
−
 
−
Para baixar o repositório completo da MAE para sua máquina utilize:
 
−
svn co http://www.lcad.inf.ufes.br/svn/MAE
 
−
Importante: recomenda-se fortemente salvar o diretório raiz da MAE em /opt.
 
−
 
−
===Instalação===
 
−
Um roteiro detalhado de instalação do SCAE pode ser encontrado em [http://www.lcad.inf.ufes.br/svn/scae/Roteiros http://www.lcad.inf.ufes.br/svn/scae/Roteiros]. Neste tutorial, apresentamos apenas um procedimento de instalação simplificado, que assume que o sistema operacional utilizado é o Fedora Core 8 e que várias bibliotecas já estão instaladas (em muitas instalações Fedora, mesmo anteriores à versão 8, ele deve ser o suficiente para colocar o SCAE em operação). Contudo, verifique se as bibliotecas w3c-libwww e xmlrpc-c estão instaladas com os comandos (se elas não estiverem instaladas, estes comandos as instalarão):
 
−
yum install w3c-libwww
 
−
yum install w3c-libwww-devel
 
−
yum install xmlrpc-c
 
−
yum install xmlrpc-c-devel
 
−
 
−
Notamos que, caso a versão das bibliotecas  w3c-libwww e xmlrpc-c instaladas no seu sistema seja a mesma versão disponível no repositório do SCAE em:
 
−
 
−
  http://www.lcad.inf.ufes.br/svn/scae/install/xmlrpc/,
 
−
 
−
é necessário que elas sejam removidas e reinstaladas a partir da versão disponível no repositório do Fedora, usando o comando yum, como especificado acima.
 
−
 
−
Para iniciar a instalação do SCAE, baixe (download) seus arquivos de instalação. Para isso, vá para o diretório raiz de sua conta e digite o comando (você vai precisar de uma senha para baixar os arquivos; solicite-a via o e-mail de suporte do LCAD):
 
−
svn co http://www.lcad.inf.ufes.br/svn/scae/code
 
−
 
−
Este comando vai criar o diretório code e vários subdiretórios (se você precisar remover todo o diretório code não se esqueça de deletar o arquivo .subversion que fica no seu diretório raiz).
 
−
 
−
====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 como '''root''':
 
−
 
−
1 - Verifique se o Aspell está instalado na máquina. Caso esteja instalado passe para o passo 2. Caso contrário, digite na linha de comando:
 
−
yum install aspell
 
−
 
−
2 - Realizar o download do source do SCAEAspell para o diretório ''/opt'':
 
−
cd /opt
 
−
svn co http://www.lcad.inf.ufes.br/svn/scae/code/CORES/install/scaeaspell/
 
−
tar -xzf scaeaspell/scaeaspell-0.60.5.tar.gz
 
−
tar -xjf scaeaspell/aspell6-pt_BR-20070411-0.tar.bz2
 
−
rm -rf scaeaspell/
 
−
 
−
4 - Instale o dicionário pt_BR no Aspell:
 
−
cd /opt/aspell6-pt_BR-20070411-0
 
−
./configure
 
−
make
 
−
make install
 
−
 
−
5 - Instale as bibliotecas do SCAE:
 
−
cd /opt/scaeaspell-0.60.5
 
−
./configure --prefix=/usr --sysconfdir=/etc --enable-shared
 
−
make
 
−
make install
 
−
 
−
O dicionário no formato do Aspell já foi gerado e encontra-se no diretório ''code/CORES/DB_CORE/SPELLER/dictionary''. Para utilizá-lo, copie os seguintes arquivos para o diretório /usr/lib/aspell-0.60:
 
−
cp  code/CORES/DB_CORE/SPELLER/dictionary/dict_scae.multi /usr/lib/aspell-0.60/
 
−
cp  code/CORES/DB_CORE/SPELLER/dictionary/dict_scae.rws /usr/lib/aspell-0.60/
 
−
cp  code/CORES/DB_CORE/SPELLER/dictionary/keyboard.kbd /usr/lib/aspell-0.60/
 
−
 
−
O arquivo dict_scae.multi é apenas um ''alias'' para dict_scae.rws, e o arquivo keyboard.kbd é um mapeamento do teclado ABNT para análise tipográfica.
 
−
 
−
'''Obs.:'''
 
−
O corretor ortográfico do SCAE é baseado no corretor Aspell e utiliza um dicionário gerado a partir do arquivio dicionário_completo_corrigido.csv. Para gerar o dicionário no formato do Aspell, digite na linha de comando:
 
−
aspell --lang=pt_BR --encoding=UTF-8 create master ./dict_scae < arquivo_entrada
 
−
O arquivo de entrada deve ter uma palavra por linha.
 
−
 
−
Posteriormente, siga para a compilação do DB_CORE.
 
−
 
−
====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 [https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u4-b-oth-JPR@CDS-CDS_Developer]. 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.
 
−
 
−
Mova o arquvio para o /opt:
 
−
  mv jdk-6u4-linux-i586.bin /opt
 
−
 
−
Transforme este arquivo em um executável
 
−
chmod +x jdk-6u4-linux-i586.bin
 
−
 
−
Execute o .bin com o seguinte comando:
 
−
./jdk-6u4-linux-i586.bin
 
−
 
−
Você será perguntado, novamente, se concordar com os termos da licença, aperte espaço até aparecer a pergunta se concorda ou não. Digite yes e a extração começará.
 
−
 
−
Crie o seguinte arquivo com seu editor de texto preferido:
 
−
 
−
vim /etc/profile.d/java.sh
 
−
chmod +x /etc/profile.d/java.sh
 
−
 
−
Agora cole as seguintes opções no arquivo. Lembre-se do carriage return depois destas linhas, então salve-o:
 
−
 
−
export JAVA_HOME=/opt/jdk1.6.0_04
 
−
export PATH=$JAVA_HOME/bin:$PATH
 
−
 
−
Agora execute o seguinte comando para tornar o arquivo disponível:
 
−
 
−
source /etc/profile.d/java.sh
 
−
 
−
Então execute o seguinte comando para ver se o path está correto:
 
−
 
−
which java
 
−
 
−
Você deveria ver algo como: /opt/jdk1.6.0_04/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 e aperte enter.
 
−
 
−
Para ver a versão do seu Java Runtime Environment, execute:
 
−
 
−
java -version
 
−
 
−
Deveria ser igual a este:
 
−
 
−
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 .bashrc
 
−
#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
 
−
 
−
Agora sim 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 [http://pt.wikipedia.org/wiki/Daemon_(aplicativo_para_computadores) daemon] que implementa o BD.
 
−
 
−
=====CRIAÇÃO DE TABELAS=====
 
−
Após compilado, podemos utilizar o db_core para criar  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):
 
−
<nowiki>#</nowiki> SHARED
 
−
export SHAREDHOME=$HOME/code/CORES/shared
 
−
 
−
====Compilando a Biblioteca Compartilhada MAE====
 
−
Antes de compilar a MAE e os CORES WNN_CORE e WNN_COR_CORE, são necessárias algumas bibliotecas, que podem ser instaladas com os comandos abaixo (você precisa ser root para executar o yum):
 
−
yum install xforms xforms-devel freeglut freeglut-devel libnet-devel byacc
 
−
 
−
Para compilar a MAE vá para o seu diretório raiz e digite os comandos:
 
−
make clean
 
−
make –f Makefile.no_interface
 
−
 
−
Em seguida, insira as seguintes linhas ao seu .bashrc (localizado no seu diretório home):
 
−
<nowiki>#</nowiki> 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 [[:Imagem:souza_vg-ram-3.pdf|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
 
−
 
−
[[imagem:Scae classificacao.JPG|frame|right|250px|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 [[Manual_do_SCAE#Utilizando_a_interface_Web|Utilizando a Interface Web]].
 
−
 
−
As demais funcionalidade do SCAE (inclusive sua interface via linha de comando) são apresentadas na próxima seção.
 
−
 
−
===Usando o SCAE===
 
−
 
−
Esta seção visa explicar como utilizar o DB_CORE para criar as tabelas a serem utilizá-las e também como executá-lo, como utilizar as interfaces de linha de comando e web para realizar treinamentos, testes e categorização.
 
−
 
−
====Criando Tabelas no DB_CORE====
 
−
 
−
O DB_CORE interpreta diretivas da linha de comando e executa tarefas de carregamento de tabelas e criação de lexicon entre outras. A seguir são detalhados os possíveis comandos ao DB_CORE:
 
−
 
−
create_filtered_dictionary ''NOME_DO_DICIONARIO'' ''FILTRO_ID'' ''"filtragem1 filtragem2 ... filtragemN"'' ''NUMERO_DE_TABELAS'' ''TABELA-COLUNA''
 
−
* NOME_DO_DICIONARIO : um nome sem espaços;
 
−
* FILTRO_ID: um inteiro informando o filtro a ser utilizado;
 
−
* "filtragem1 filtragem2 ... filtragemN" : as filtragens que serão empregadas (remoção de [http://en.wikipedia.org/wiki/Stop_word ''stop words''], acentos e [http://en.wikipedia.org/wiki/Stemming stemming]) separadas por espaços e entre aspas duplas obrigatoriamente;
 
−
* NUMERO_DE_TABELAS : um inteiro informando o número de tabelas que serão utilizadas;
 
−
* TABELA-COLUNA : informar cada TABELA-COLUNA de acordo com o número de tabelas informado, dizendo o nome da tabela e da coluna;
 
−
load_dictionary ''NOME_DO_DICIONARIO''
 
−
* NOME_DO_DICIONARIO : um nome sem espaços;
 
−
load_csv_cnae_subclasse ''XXXXXXXXXX''
 
−
Carrega a tabela subclasse de nome ''XXXXXXXXXX'';
 
−
load_csv_dados_vitoria ''XXXXXXXXXX''
 
−
Carrega a tabela de dados de Vitória de nome ''XXXXXXXXXX'';
 
−
create_word_vectors_table '''XXXXXXXXXX-YYYYYYYYYY'
 
−
Cria a tabela de vetores para cada linha da coluna YYYYYYYYYY da tabela XXXXXXXXXX;
 
−
create_lexicon ''NOME_DO_LEXICON'' ''"Descrição do lexicon."'' ''NUMERO_DE_TABELAS'' ''TABELA-COLUNA:MIN:MAX'' ... ''TABELA-COLUNA:MIN:MAX''
 
−
''"classe1 classe2 ... classeN"'' ''PFS''
 
−
Cria um lexicon com os parâmetros fornecidos, onde:
 
−
* NOME_DO_LEXICON : um nome sem espaços;
 
−
* "Descrição do lexicon." : uma descrição obrigatoriamente entre aspas duplas;
 
−
* NUMERO_DE_TABELAS : um inteiro informando o número de tabelas que serão utilizadas;
 
−
* TABELA-COLUNA:MIN:MAX : informar cada TABELA-COLUNA:MIN:MAX de acordo com o número de tabelas informado, dizendo o nome da tabela, da coluna, limite inferior e superior;
 
−
* "classe1 classe2 ... classeN" : as classes gramaticais a serem removidas separadas por espaços e entre aspas duplas obrigatoriamente;
 
−
* PFS : um inteiro informando a frequencia maxima para inclusao de palavras no lexicon;
 
−
create_training_and_testing_vectors_table ''LEXICON'' ''QTDE'' ''TABELA-COLUNA'' ... ''TABELA-COLUNA'' ''CONSTRUÇÃO''
 
−
Cria os vetores '''individuais''' de treinamento e teste com os parâmetros fornecidos, onde:
 
−
* LEXICON : nome do lexicon;
 
−
* QTDE : quantidade de TABELA-COLUNAs que serão informadas;
 
−
* TABELA-COLUNA : par com o nome da tabela e da coluna;
 
−
* CONSTRUÇÃO : método de construção do vetor final;
 
−
create_cnae_codes_vectors_table ''TABELA'' ''CONSTRUÇÃO''
 
−
Constrói a tabela de códigos cnae:
 
−
* TABELA : nome da tabela;
 
−
* CONSTRUÇÃO : método de construção do vetor final;
 
−
create_ttv ''TTV'' ''LEXICON'' ''TABELA'' ''QTDE'' ''COLUNA'' ... ''COLUNA'' ''CONSTRUÇÃO''
 
−
Cria uma '''tabela de vetores de treinamento e teste''':
 
−
* TTV : nome dado à tabela de ttv;
 
−
* LEXICON : nome do lexicon a utilizar;
 
−
* TABELA : nome da tabela (cnae ou dados) a utilizar;
 
−
* QTDE : quantidade de colunas que serão informadas;
 
−
* COLUNA : cada nome de coluna de acordo com a quantidade informada;
 
−
* CONSTRUÇÃO : método de construção do vetor final;
 
−
save_tables_in_binary_format
 
−
Salva as tabelas carregadas e construídas em formato binário para posterior carregamento (mais rápido);
 
−
init_server ''ports.cfg''
 
−
Inicializa o servidor com a configuração do arquivo ''ports.cfg''
 
−
 
−
A seguir, temos um exemplo completo retirado do arquivo ''build_tables_subclasse_110_tf.bat''
 
−
 
−
./db_core \
 
−
load_dictionary DICIONARIO \
 
−
load_csv_cnae_subclasse CNAE_110_SUBCLASSE \
 
−
load_csv_dados DADOS_VITORIA_SUB_110 \
 
−
load_csv_dados DADOS_BH_SUB_110 \
 
−
create_word_vectors_table CNAE_110_SUBCLASSE-DESCRICAO_SUB \
 
−
create_word_vectors_table DADOS_VITORIA_SUB_110-OBJETO_SOCIAL \
 
−
create_word_vectors_table DADOS_BH_SUB_110-OBJETO_SOCIAL \
 
−
create_lexicon LEXICON_LESS_ART_PREP_SUB_110 "Tudo menos artigos e preposicoes da tabela CNAE 1.1" 1
 
−
CNAE_110_SUBCLASSE-DESCRICAO_SUB:0:1182 "art. prep." 20000 \
 
−
create_ttv TTV_C1S_DESC LEXICON_LESS_ART_PREP_SUB_110 CNAE_110_SUBCLASSE 1 DESCRICAO_SUB DEFAULT TF \
 
−
create_ttv TTV_DVS1_OBJS LEXICON_LESS_ART_PREP_SUB_110 DADOS_VITORIA_SUB_110 1 OBJETO_SOCIAL DEFAULT TF \
 
−
create_ttv TTV_DBS1_OBJS LEXICON_LESS_ART_PREP_SUB_110 DADOS_BH_SUB_110 1 OBJETO_SOCIAL DEFAULT TF \
 
−
save_tables_in_binary_format
 
−
 
−
====Utilizando a USER_INTERFACE====
 
−
 
−
A USER_INTERFACE interpreta diretivas da linha comando e executa tarefas de treinamento e teste entre outras. A seguir são detalhados os possíveis comandos à USER_INTERFACE:
 
−
 
−
read_ports ''CONFIG_FILE''
 
−
Carrega o arquivo de configuração de nome ''CONFIG_FILE'', o qual contém os nomes dos CORES e suas respectivas portas de escuta;
 
−
train ''NOME_DO_CORE'' ''NOME_DO_TREINAMENTO'' ''DESCRIÇÃO_DO_TREINAMENTO'' ''NUMERO_DE_TABELAS'' ''TABELA_TTV'' ''MIN'' ''MAX'' ... ''TABELA_TTV'' ''MIN''  ''MAX''
 
−
Realiza um treinamento com os parâmetros fornecidos, onde:
 
−
* ''NOME_DO_CORE'' : um nome sem espaços;
 
−
* ''NOME_DO_TREINAMENTO'' : um nome sem espaços;
 
−
* ''DESCRIÇÃO_DO_TREINAMENTO'' : uma descrição obrigatoriamente entre aspas duplas;
 
−
* ''NUMERO_DE_TABLES'' : um inteiro informando o número de tabelas que serão utilizadas no treino;
 
−
* ''TABELA_TTV'': um nome, sem espaços, informando o nome da table de TTVs a ser utilizada;
 
−
* ''MIN'': um inteiro informando limite inferior da TABLE_TTV a ser utilizado;
 
−
* ''MAX'' : um inteiro informando limite superior da TABLE_TTV a ser utilizado;
 
−
save ''NOME_DO_CORE'' ''NOME_DO_TREINAMENTO''
 
−
Salva o treinamento ''NOME_DO_TREINAMENTO'' no CORE ''NOME_DO_CORE''. Os parâmetros fornecidos são:
 
−
* ''NOME_DO_CORE'' : um nome sem espaços;
 
−
* ''NOME_DO_TREINAMENTO'' : um nome sem espaços;
 
−
reload ''NOME_DO_CORE'' ''NOME_DO_TREINAMENTO''
 
−
Recarrega o treinamento ''NOME_DO_TREINAMENTO'' para o CORE ''NOME_DO_CORE''. Os parâmetros fornecidos são:
 
−
* ''NOME_DO_CORE'' : um nome sem espaços;
 
−
* ''NOME_DO_TREINAMENTO'' : um nome sem espaços;
 
−
test ''NOME_DO_CORE'' ''NOME_DO_TESTE'' ''DESCRIÇÃO_DO_TESTE'' ''NUMERO_DE_TABELAS'' ''TABELA_TTV'' ''MIN'' ''MAX'' ... ''TABELA_TTV'' ''MIN''  ''MAX''
 
−
Realiza um teste. Os parâmetros fornecidos, onde:
 
−
* ''NOME_DO_CORE'' : um nome sem espaços;
 
−
* ''NOME_DO_TREINAMENTO'' : um nome sem espaços;
 
−
* ''DESCRIÇÃO_DO_TESTE'' : uma descrição obrigatoriamente entre aspas duplas;
 
−
* ''NUMERO_DE_TABLES'' : um inteiro informando o número de tabelas que serão utilizadas no teste;
 
−
* ''TABELA_TTV'': um nome, sem espaços, informando o nome da table de TTVs a ser utilizada;
 
−
* ''MIN'': um inteiro informando limite inferior da TABLE_TTV a ser utilizado;
 
−
* ''MAX'' : um inteiro informando limite superior da TABLE_TTV a ser utilizado;
 
−
 
−
A seguir, temos um exemplo completo de treino retirado do arquivo ''experimento_1.1.1_train.bat''
 
−
 
−
./user_interface \
 
−
read_ports ports.cfg \
 
−
train VS TREINAMENTO_EXPERIMENTO_1.1.1 "Treinamento com a TTV_C1S_DESC completa." 1 TTV_C1S_DESC 0 1182 \
 
−
save VS "TREINAMENTO_EXPERIMENTO_1.1.1"
 
−
 
−
Agora um exemplo completo de teste retirado do arquivo ''experimento_1.1.1_test.bat''
 
−
 
−
./user_interface \
 
−
read_ports ports.cfg \
 
−
reload VS TREINAMENTO_EXPERIMENTO_1.1.1 \
 
−
test VS TESTE_EXPERIMENTO_1.1.1 "Teste com a TTV_C1S_DESC completa." 1 TTV_C1S_DESC 0 1182
 
−
 
−
====Utilizando a Interface Web====
 
−
A interface Web permite que o usuário do SCAE realize todos os passos necessários para a categorização de atividades econômicas. A interface Web dispoinibiliza as seguintes funcionalidades:
 
−
 
−
# Codificação de colunas das tabelas do BD;
 
−
# Criação de um lexicon;
 
−
# Criação de vetores de treinamento e teste;
 
−
# Treinamento dos cores;
 
−
# Teste dos cores;
 
−
# Classifição de atividades econômicas;
 
−
 
−
=====Codificação de Colunas das Tabelas do BD Segundo o Dicionário Eletrônico do SCAE=====
 
−
 
−
[[imagem:Scae codificacao.jpg|frame|right|250px|Figura 3: Codificação de colunas.]]
 
−
 
−
O objetivo desta interface é realizar a codificação de colunas das tabelas do BD segundo o dicionário eletrônico utilizado no SCAE. As colunas codificadas serão utilizadas para a criação de um Lexicon e de vetores de treinamento e teste (TTV).
 
−
 
−
Para realizar a codificação das colunas, o usuário precisa digitar os nomes das tabelas e a respestivas colunas da tabela nos campos apresentadados na interface, sendo que o primeiro campo de cada linha corresponde ao nome da tabela e os demais campos aos nomes das colunas. Ao clicar no campo referente ao nome da tabela, é mostrado no item '''Sugestão''' os possíveis nomes de tabelas existentes atualmente no banco de dados. O mesmo vale para os campos referentes aos nomes das colunas. Ao digitar o nome da tabela ou da coluna nos campos, o item '''Sugestão''' exibe os nomes das tabelas ou colunas que iniciam com os caracteres digitados.
 
−
 
−
Os campos referentes aos nomes das colunas estão desabilitados e são habilitados a partir do momento que o nome da tabela digitado é validado.
 
−
 
−
Após digitar os nomes das colunas das tabelas desejáveis para a codificação, o usuário deve clicar no botão '''Codificar''' para realizar a codificação das colunas. Para apagar os nomes da tabela e das colunas, o usário pode clicar no botão '''Limpar''' ou pressionar a tecla '''F5'''. Ao clicar no botão '''Codificar''', uma caixa de texto em vermelho é mostrada no canto superior direito da tela informando o status da codificação.
 
−
 
−
O resultado da codificação é mostrado no item '''O resultado será mostrado aqui'''. Esse item, também, é utilizado para informar os possíveis erros decorrentes de comunicação com os cores, mensagens XML erradas e campos preenchidos incorretamente, etc...
 
−
 
−
=====Criação de um Lexicon no SCAE=====
 
−
 
−
[[imagem:Scae lexicon.jpg|frame|right|250px|Figura 4: Criação de um lexicon.]]
 
−
 
−
O objetivo desta interface é realizar a criação de um lexicon. O lexicon compreende um conjunto de palavras de interesse as quais são representadas na sua forma canônica. O lexicon é formado a partir de um texto, de um dicionário contendo o mapeamento das palavras nas suas respectivas palavras canônicas e é construído, também, a partir de um conjunto de classes gramáticais a serem removidas. O lexicon será utilizado para a criação dos vetores de treino e teste (TTV).
 
−
 
−
Para criar um lexicon, o usuário precisa digitar:
 
−
* o nome do lexicon;
 
−
* o pfs (máxima frequência da palavra na coleção);
 
−
* os nomes das tabelas, as respestivas colunas da tabela e os limites inferiores e superiores nos campos apresentadados na interface, sendo que o primeiro campo de cada linha corresponde ao nome da tabela, os quatros campos seguintes corresponde aos nomes das colunas e os dois últimos campos corresponde aos limites;
 
−
* a descrição do lexicon;
 
−
 
−
Caso deseje selecionar alguma classe gramatical, basta o usuário selecionar as classes desejáveis. Ao clicar no botão '''Marcar todas''' todas as classes gramaticais são selecionadas. O botão '''Desmarcar''' desmarcar alguma classe gramatical selecionada.
 
−
 
−
Ao clicar no campo referente ao nome do lexicon, caso exista algum lexicon criado, é mostrado no item '''Sugestão''' os possíveis nomes de lexicons existentes no banco de dados. Ao digitar o nome do lexicon no campo, o item '''Sugestão''' exibe os nomes dos lexicons que iniciam com os caracteres digitados. Ao verficar que o nome do lexicon digitado já existe, a interface preenche os demais campos com as informações que o lexicon foi criado.
 
−
 
−
Ao clicar no campo referente ao nome da tabela, é mostrado no item '''Sugestão''' os possíveis nomes de tabelas existentes atualmente no banco de dados. O mesmo vale para os campos referentes aos nomes das colunas. Ao digitar o nome da tabela ou da coluna nos campos, o item '''Sugestão''' exibe os nomes das tabelas ou colunas que iniciam com os caracteres digitados.
 
−
 
−
Os campos referentes aos nomes das colunas estão desabilitados e são habilitados a partir do momento que o nome da tabela digitado é validado.
 
−
 
−
Após preencher todas as informações necessárias para a criação de um lexicon, o usuário deve clicar no botão '''Criar lexicon''' para criar um lexicon. Para apagar as informações digitais na interface, o usário pode clicar no botão '''Limpar''' ou pressionar a tecla '''F5'''. Ao clicar no botão '''Criar lexicon''', uma caixa de texto em vermelho é mostrada no canto superior direito da tela informando o status da criação do lexicon.
 
−
 
−
O resultado da codificação é mostrado no item '''O resultado será mostrado aqui'''. Esse item, também, é utilizado para informar os possíveis erros decorrentes de comunicação com os cores, mensagens XML erradas e campos preenchidos incorretamente, etc...
 
−
 
−
=====Criação de Vetores de Treinamento e Teste=====
 
−
 
−
[[imagem:Scae treino teste.jpg|frame|right|250px|Figura 5: Criação dos vetores de treinamento e teste]]
 
−
 
−
 
−
O objetivo desta interface é realizar a criação dos vetores de treinamento e teste. Os vetores de treinamento e teste são utilizados para treinar e testar os cores classificadores.
 
−
 
−
Para criar um vetor de treinamento e teste, o usuário precisa digitar:
 
−
* o nome do lexicon;
 
−
* o nome da tabela de treino e teste;
 
−
* os nomes das tabelas, as respectivas colunas da tabela e a construção do treino e teste nos campos apresentadados na interface, sendo que o primeiro campo de cada linha corresponde ao nome do treino e teste, o segundo ao nome da tabela, os quatros campos seguintes corresponde aos nomes das colunas e o último corresponde a construção do treino e teste;
 
−
 
−
Ao clicar no campo referente ao nome do lexicon, caso exista algum lexicon criado, é mostrado no item '''Sugestão''' os possíveis nomes de lexicons existentes no banco de dados. Ao digitar o nome do lexicon no campo, o item '''Sugestão''' exibe os nomes dos lexicons que iniciam com os caracteres digitados.
 
−
 
−
Ao clicar no campo referente ao nome da tabela, é mostrado no item '''Sugestão''' os possíveis nomes de tabelas existentes atualmente no banco de dados. O mesmo vale para os campos referentes aos nomes das colunas. Ao digitar o nome da tabela ou da coluna nos campos, o item '''Sugestão''' exibe os nomes das tabelas ou colunas que iniciam com os caracteres digitados.
 
−
 
−
Os campos referentes aos nomes das colunas estão desabilitados e são habilitados a partir do momento que o nome da tabela digitado é validado.
 
−
 
−
Após preencher todas as informações necessárias para a criação de um vetor de treino e teste, o usuário deve clicar no botão '''Criar vetor''' para criar um o vetor de treino e teste. Para apagar as informações digitais na interface, o usário pode clicar no botão '''Limpar''' ou pressionar a tecla '''F5'''. Ao clicar no botão '''Criar vetor''', uma caixa de texto em vermelho é mostrada no canto superior direito da tela informando o status da criação do lexicon.
 
−
 
−
O resultado da codificação é mostrado no item '''O resultado será mostrado aqui'''. Esse item, também, é utilizado para informar os possíveis erros decorrentes de comunicação com os cores, mensagens XML erradas e campos preenchidos incorretamente, etc...
 
−
 
−
=====Treinamento dos Cores Classificadores do SCAE=====
 
−
 
−
[[imagem:Scae treinamento.jpg|frame|right|250px|Figura 6: Treinamento dos cores classificadores do SCAE.]]
 
−
 
−
O objetivo desta interface é realizar o treinamento dos cores classificadores do SCAE.
 
−
 
−
Para realizar o treinamento, o usuário precisa:
 
−
* selecionar o core classificador;
 
−
* nome do treinanento;
 
−
* os nomes das tabelas de treino e teste e os limites inferiores e superiores nos campos apresentadados na interface, sendo que o primeiro campo de cada linha corresponde ao nome das tabelas de treino e tese, os dois campos seguintes correspondem aos limites;
 
−
* a descrição do treinamento;
 
−
 
−
Ao selecionar o core classificador, as informações dos campos da interfaces são apagados.
 
−
 
−
Ao clicar no campo referente ao nome do treinamento, caso exista algum treimamento criado, é mostrado no item '''Sugestão''' os possíveis nomes de treinamento existentes no banco de dados. Ao digitar o nome do treinamento no campo, o item '''Sugestão''' exibe os nomes dos treinamentos que iniciam com os caracteres digitados. Ao verficar que o nome do treinamento digitado já existe, a interface preenche os demais campos com as informações que o treinamento foi criado.
 
−
 
−
Ao clicar no campo referente ao nome da tabela de treino e teste, é mostrado no item '''Sugestão''' os possíveis nomes de tabelas existentes atualmente no banco de dados. Ao digitar o nome da tabela ou da coluna nos campos, o item '''Sugestão''' exibe os nomes das tabelas ou colunas que iniciam com os caracteres digitados.
 
−
 
−
Os campos referentes aos nomes das colunas estão desabilitados e são habilitados a partir do momento que o nome da tabela digitado é validado.
 
−
 
−
Os campos correspondentes ao nome do lexicon estão desabilitados e apenas mostram qual lexicon foi utilizado para a criação da tabela de treino e teste. Não é permitido a edição desse campo.
 
−
 
−
Após preencher todas as informações necessárias para um treino, o usuário deve clicar no botão '''Treinar''' para treinar os cores classificadores. Para apagar as informações digitais na interface, o usário pode clicar no botão '''Limpar''' ou pressionar a tecla '''F5'''. Ao clicar no botão '''Treinar''', uma caixa de texto em vermelho é mostrada no canto superior direito da tela informando o status da criação do lexicon.
 
−
 
−
O resultado da codificação é mostrado no item '''O resultado será mostrado aqui'''. Esse item, também, é utilizado para informar os possíveis erros decorrentes de comunicação com os cores, mensagens XML erradas e campos preenchidos incorretamente, etc...
 
−
 
−
=====Teste dos Cores Classificadores do SCAE=====
 
−
 
−
[[imagem:Scae teste.jpg|frame|right|250px|Figura 7: Teste dos cores classificadores do SCAE.]]
 
−
 
−
O objetivo desta interface é realizar o teste dos cores classificadores do SCAE.
 
−
 
−
Para realizar o teste, o usuário precisa:
 
−
* selecionar o core classificador;
 
−
* digitar o nome do teste;
 
−
* digitar o nome do treinanento;
 
−
* digitar os nomes das tabelas de treino e teste e os limites inferiores e superiores nos campos apresentadados na interface, sendo que o primeiro campo de cada linha corresponde ao nome das tabelas de treino e tese, os dois campos seguintes correspondem aos limites;
 
−
* a descrição do teste;
 
−
 
−
Ao selecionar o core classificador, as informações dos campos da interface são apagados.
 
−
 
−
Ao clicar no campo referente ao nome do teste, caso exista algum teste criado, é mostrado no item '''Sugestão''' os possíveis nomes de teste existentes no banco de dados. Ao digitar o nome do teste no campo, o item '''Sugestão''' exibe os nomes dos teste que iniciam com os caracteres digitados. Ao verficar que o nome do teste digitado já existe, a interface preenche os demais campos com as informações que o treinamento foi criado.
 
−
 
−
Ao clicar no campo referente ao nome do treinamento, caso exista algum treinamento criado, é mostrado no item '''Sugestão''' os possíveis nomes de treinamento existentes no banco de dados. Ao digitar o nome do treinamento no campo, o item '''Sugestão''' exibe os nomes dos treinamentos que iniciam com os caracteres digitados.
 
−
 
−
Ao clicar no campo referente ao nome da tabela de treino e teste, é mostrado no item '''Sugestão''' os possíveis nomes de tabelas existentes atualmente no banco de dados. Ao digitar o nome da tabela ou da coluna nos campos, o item '''Sugestão''' exibe os nomes das tabelas ou colunas que iniciam com os caracteres digitados.
 
−
 
−
Os campos referentes aos nomes das colunas estão desabilitados e são habilitados a partir do momento que o nome da tabela digitado é validado.
 
−
 
−
Os campos correspondentes ao nome do lexicon estão desabilitados e apenas mostram qual lexicon foi utilizado para a criação da tabela de treino e teste. Não é permitido a edição desse campo.
 
−
 
−
Após preencher todas as informações necessárias para um teste, o usuário deve clicar no botão '''Testar''' para testar os cores classificadores. Para apagar as informações digitais na interface, o usário pode clicar no botão '''Limpar''' ou pressionar a tecla '''F5'''. Ao clicar no botão '''Testar''', uma caixa de texto em vermelho é mostrada no canto superior direito da tela informando o status da criação do lexicon.
 
−
 
−
O resultado da codificação é mostrado no item '''O resultado será mostrado aqui'''. Esse item, também, é utilizado para informar os possíveis erros decorrentes de comunicação com os cores, mensagens XML erradas e campos preenchidos incorretamente, etc...
 
−
 
−
=====Classificação de Atividades Econômicas com o SCAE=====
 
−
 
−
[[imagem:Scae classificacao.JPG|frame|right|250px|Figura 8: Classificação de Atividades Econômicas.]]
 
−
 
−
O objetivo desta interface é realizar a classificação de atividades econômicas de acordo com a descrição da atividade.
 
−
 
−
Para realizar o teste, o usuário precisa:
 
−
* digitar a descrição da atividade no campo '''Descrição das Atividades''';
 
−
* selecionar qual o core que realizará a classificação;
 
−
 
−
Após preencher todas as informações necessárias, o usuário deve clicar no botão '''Classificar''' para classificar a atividade descrita anteriormente. Para apagar as informações digitadas na interface, o usário pode clicar no botão '''Limpar''' ou pressionar a tecla '''F5'''. Ao clicar no botão '''Classificar''', uma caixa de texto em vermelho é mostrada no canto superior direito da tela informando o status da classificação da atividade.
 
−
 
−
O resultado da classificação é mostrado no item '''O resultado será mostrado aqui'''. Esse item, também, é utilizado para informar os possíveis erros decorrentes de comunicação com os cores, mensagens XML erradas e campos preenchidos incorretamente, etc...
 
−
 
−
O resultado da classificação mostra os possívies códigos da tabela CNAE para a atividade descrita.
 
−
 
−
<br />
 
−
<br />
 
−
<br />
 
−
<br />
 
−
<br />
 
−
 
−
==Organização do SCAE==
 
−
Esta seção visa explicar como está organizado o SCAE.
 
−
 
−
===As Partes do SCAE===
 
−
O Sistema foi projetado para funcionar em módulos que se comunicam entre si através de xmlrpc. Os módulos são divididos basicamente em 3 categorias:
 
−
* Interface (WEB e linha de comando)
 
−
* Categorizadores (Redes Neurais, Espaço Vetorial, ..)
 
−
* Banco de Dados (DB_CORE)
 
−
 
−
===Comunicação entre os COREs (xmlrpc)===
 
−
O SCAE usa o protocolo XML-RPC (Extensible Markup Language Remote Process Call) para comunicação entre módulos. Trata-se de um protocolo muito simples que usa http como transporte e XML como codificação, e que permite a comunicação entre aplicações escritas em linguagens diferentes, rodando em computadores diferentes e mesmo em sistemas operacionais diferentes.
 
−
 
−
Toda a comunicação entre os módulos do SCAE é feita por meio de XML-RPC, o que permite que módulos sejam executados em computadores diferentes. Em sistemas que empregam XML-RPC, clientes XML-RPC enviam requisições de execução de procedimentos remotos (RPCs) para servidores XML-RPC, os quais,  por sua vez, devolvem aos clientes o resultado da execução destas RPCs.
 
−
 
−
No SCAE, alguns módulos se comportam somente como clientes, outros somente como servidores. Existem ainda módulos que se comportam ora como clientes ora como servidores.
 
−
 
−
====Comunicando com o DB_CORE====
 
−
 
−
O DB_CORE é o único CORE que faz o papel de servidor puro, ou seja, ele não realiza nenhuma requisição. Neste CORE encontramos o módulo '''db_core_rpcs.c''', o qual contém as seguintes rpcs:
 
−
 
−
* ''get_num_table_lines_rpc'' <br> '''input''': nome da tabela. <br> '''output''': número de linhas da tabela.
 
−
 
−
* ''get_table_column_rpc'' <br> '''input''': nome da tabela, nome da coluna e número da linha. <br> '''output''': campo da tabela.
 
−
 
−
* ''get_table_column_and_codes_rpc'' <br> '''input''': nome da tabela, nome da coluna e número da linha. <br> '''output''': vetor de códigos de palavras.
 
−
 
−
* ''get_lexicon_rpc'' <br> '''input''': nome do lexicon. <br> '''output''': vetor de frequências de palavras, vetor de palavras e um vetor de códifgos de palavras canônicas.
 
−
 
−
* ''create_lexicon_rpc'' <br> '''input''': nome do lexicon, pfs, classes gramáticias, vetor de strings onde cada string é formada como 'TABELA-COLUNA:MIN:MAX e descrição do lexicon. <br> '''output''': 0 se sucesso e 3 caso contrário.
 
−
 
−
* ''get_train_test_vector_words_rpc'' <br> '''input''': nome da tabela, nome da coluna, número da linha, nome do lexico e o tipo de construção (ADD, OR, COMMON). <br> '''output''': vetor de índices, vetor de frequências, vetor de palavras e um vetor de códigos de palavras canônicas.
 
−
 
−
* ''get_cnae_codes_rpc'' <br> '''input''': nome da tabela, a linha e o tipo de construção. <br> '''output''': vetor de códigos CNAE.
 
−
 
−
* ''get_train_and_test_vector_rpc'' <br> '''input''': nome da tabela, nome da coluna, a linha, nome do lexicon e o tipo de construção. <br> '''output''': vetor de treino e teste com tamanho igual ao do lexicon.
 
−
 
−
* ''encode_column_of_some_lines_according_to_dictionary_rpc'' <br> '''input''': nome da tabela e nome da coluna. <br> '''output''': 0 se sucesso e 1 caso contrário.
 
−
 
−
* ''build_user_vector_rpc'' <br> '''input''': texto a ser classificado e o nome do lexicon. <br> '''output''': vetor de inteiros a ser classificado.
 
−
 
−
* ''get_table_list_by_type_rpc''
 
−
** '''input''': String com o tipo de tabelas desejadas.
 
−
*** string: TIPO (CNAE, DADOS, LEXICON, TTV).
 
−
** '''output''': Vetor com a lista de tabelas do tipo requerido.
 
−
*** array strings: TABLE_NAME
 
−
<br>
 
−
* ''get_encodable_column_list_rpc''
 
−
** '''input''': String com o nome da tabela.
 
−
*** string: TABLE_NAME
 
−
** '''output''': Vetor com as colunas codificáveis da tabela.
 
−
*** array strings: TABLE_COLUMN_NAME
 
−
<br>
 
−
* ''get_lexicon_info_rpc''
 
−
** '''input''': String com o nome do Lexicon.
 
−
*** string: LEXICON_NAME
 
−
** '''output''': Vetor de strings onde cada string é formada como 'TABELA-COLUNA:MIN:MAX', string contendo as classes gramaticais removidas separadas por espaço, um inteiro com a freqüência acima da qual a palavra não será incluída e um base64 contendo a descrição do lexicon.
 
−
*** array strings: "TABLE_NAME-TABLE_COLUMN_NAME:MIN:MAX"
 
−
*** string: "GRAM_CLASS1 GRAM_CLASS2 ... GRAM_CLASSN"
 
−
*** integer: PFS
 
−
*** base64: LEXICON_DESCRIPTION
 
−
<br>
 
−
* ''create_ttv_table_rpc''
 
−
** '''input''': String com o nome da Tabela TTV, string contendo o nome do lexicon, string contendo o nome da tabela, array de strings contendo as COLUNAS e, string contendo o método de criação dos vetores.
 
−
*** string: TTV_TABLE_NAME
 
−
*** string: LEXICON_NAME
 
−
*** string: TABLE_NAME
 
−
*** array strings: TABLE_COLUMN_NAME
 
−
*** string: BUILD_TYPE
 
−
** '''output''': Inteiro com o código do erro/sucesso e string com a mensagem de erro/sucesso.
 
−
*** integer: ERROR_CODE
 
−
*** string: MESSAGE
 
−
<br>
 
−
* ''get_ttv_line_rpc''
 
−
** '''input''': String com o nome da Tabela TTV e um inteiro com o número da linha.
 
−
*** string: TTV_TABLE_NAME
 
−
*** integer: LINE
 
−
** '''output''': Vetor de floats com as freqencias e um vetor de inteiros de índice de código cnae.
 
−
*** array floats: FREQUENCES
 
−
*** array integers: CNAE_CODE
 
−
<br>
 
−
* ''get_ttv_info_rpc''
 
−
** '''input''': String com o nome da Tabela TTV.
 
−
*** string: TTV_TABLE_NAME
 
−
** '''output''': String contendo o nome do lexicon utilizado, string contendo o nome da tabela, array de strings contendo as COLUNAS e, string contendo o método de criação dos vetores.
 
−
*** string: LEXICON_NAME
 
−
*** string: TABLE_NAME
 
−
*** array strings: TABLE_COLUMN_NAME
 
−
*** string: BUILD_TYPE
 
−
<br>
 
−
* ''get_training_list_rpc''
 
−
** '''input''': nenhum.
 
−
*** -
 
−
** '''output''': Vetor de strings dos nomes dos treinamentos e vetor de strings dos nomes dos cores correspondentes.
 
−
*** array strings: CORE_NAME
 
−
*** array strings: TRAINING_NAME
 
−
<br>
 
−
* ''get_training_info_rpc''
 
−
** '''input''': String com o nome do treinamento e string com o nome do CORE.
 
−
*** string: TRAINING_NAME
 
−
*** string: CORE_NAME
 
−
** '''output''': String com o nome do lexicon utilizado no treinamento, vetor de strings contendo nome da tabela ttv, limites inferior e superior separados por ":" e, um base64 com a descrição do treinamento.
 
−
*** string: LEXICON_NAME
 
−
*** array strings: "TTV_TABLE_NAME:MIN:MAX"
 
−
*** base64: TRAINING_DESCRIPTION
 
−
<br>
 
−
* ''add_training_info_rpc''
 
−
** '''input''': String com o nome do treinamento, string com o nome do core, string com o nome do lexicon, vetor de strings contendo nome da tabela ttv, limites inferior e superior separados por ":" e, base64 com a descrição do treinamento.
 
−
*** string: TRAINING_NAME
 
−
*** string: CORE_NAME
 
−
*** string: LEXICON_NAME
 
−
*** array strings: "TTV_TABLE_NAME:MIN:MAX"
 
−
*** base64: TRAINING_DESCRIPTION
 
−
** '''output''': nenhum.
 
−
*** -
 
−
 
−
<br>
 
−
* ''get_test_list_rpc''
 
−
** '''input''': nenhum.
 
−
*** -
 
−
** '''output''': Vetor de strings dos nomes dos testes e vetor de strings dos nomes dos cores correspondentes.
 
−
*** array strings: TEST_NAME
 
−
*** array strings: CORE_NAME
 
−
<br>
 
−
* ''get_test_info_rpc''
 
−
** '''input''': String com o nome do teste e string com o nome do CORE.
 
−
*** string: TEST_NAME
 
−
*** string: CORE_NAME
 
−
** '''output''': String com o nome do lexicon utilizado no teste, vetor de strings contendo nome da tabela ttv, limites inferior e superior separados por ":" e, um base64 com a descrição do treinamento.
 
−
*** array strings: "TABLE_NAME:MIN:MAX"
 
−
*** integer: NUMBER_OF_TESTS
 
−
*** integer: CORRECT_GUESSES
 
−
*** string: TRAINING_NAME
 
−
*** base64: TEST_DESCRIPTION
 
−
<br>
 
−
* ''add_test_info_rpc''
 
−
** '''input''': String com o nome do teste e string com o nome do CORE, string com o nome do lexicon utilizado no teste, vetor de strings contendo nome da tabela ttv, limites inferior e superior separados por ":" e, um base64 com a descrição do treinamento.
 
−
*** string: TEST_NAME
 
−
*** string: CORE_NAME
 
−
*** string: TRAINING_NAME
 
−
*** array strings: "TABLE_NAME:MIN:MAX"
 
−
*** integer: NUMBER_OF_TESTS
 
−
*** integer: CORRECT_GUESSES
 
−
*** base64: TEST_DESCRIPTION
 
−
** '''output''': nenhum.
 
−
*** -
 
−
 
−
====Comunicando com os COREs Categorizadores====
 
−
 
−
Atualmente, já estão embutidos no SCAE, os seguintes CORES categorizadores:   
 
−
* VS_CORE;
 
−
* WNN_CORE;
 
−
* WNN_COR_CORE;
 
−
* WISARD_CORE.
 
−
 
−
 
−
Cada CORE acima desempenha tanto o papel de cliente, quanto o de servidor. Para que seja possível utilizar um CORE classificador, as seguintes rpc foram implementadas no módulo '''core_rpcs.c''', existente no diretório SHARED (shared/src/):
 
−
 
−
* ''train_rpc''
 
−
** '''input''': Vetor de xmls contendo nome da tabela ttv, limites inferior e superior separados por ":".
 
−
*** array xmls: "TABLE_NAME:MIN:MAX"
 
−
** '''output''': Inteiro especificando se a chamada transcorreu com sucesso (SUCCESS = 0) ou se houve alguma falha (FAIL = 0).
 
−
*** integer: 0 ou 1
 
−
<br>
 
−
* ''save_rpc''
 
−
** '''input''': String com o nome do treinamento, vetor de xmls contendo nome da tabela ttv, limites inferior e superior separados por ":" e, base64 com a descrição do treinamento.
 
−
*** string: TRAINING_NAME
 
−
*** array xmls: "TTV_TABLE_NAME:MIN:MAX"
 
−
*** base64: TRAINING_DESCRIPTION
 
−
** '''output''': Inteiro especificando se a chamada transcorreu com sucesso (SUCCESS = 0) ou se houve alguma falha (FAIL = 0).
 
−
*** integer: 0 ou 1
 
−
<br>
 
−
* ''reload_rpc''
 
−
** '''input''': String com o nome do treinamento.
 
−
*** string: TRAINING_NAME
 
−
** '''output''': Inteiro especificando se a chamada transcorreu com sucesso (SUCCESS = 0) ou se houve alguma falha (FAIL = 0).
 
−
*** integer: 0 ou 1
 
−
<br>
 
−
* ''test_rpc''
 
−
** '''input''': String com o nome do teste, vetor de xmls contendo nome da tabela ttv, limites inferior e superior separados por ":" e, base64 com a descrição do teste.
 
−
*** string: TEST_NAME
 
−
*** array xmls: "TTV_TABLE_NAME:MIN:MAX"
 
−
*** base64: TEST_DESCRIPTION
 
−
** '''output''': Dois inteiros, um especificando a quantidade de testes realizados e o outro o número de acertos obtidos.
 
−
*** integer: NUMBER_OF_TESTS
 
−
*** integer: CORRECT_GUESSES
 
−
<br>
 
−
* ''classify_rpc''
 
−
** '''input''': Texto a ser classificado.
 
−
*** string: TEXT
 
−
** '''output''': Dois vetores, um de códigos sequencias e o outro de probabilidades.
 
−
*** array integer: SEQ_CODE_VECTOR
 
−
*** array float: PROBABILITIES_VECTOR
 
−
<br>
 
−
 
−
===Módulos do SCAE (COREs)===
 
−
O SCAE possuirá vários módulos de classficação. Os já implementados são descritos a seguir.
 
−
 
−
====DB_CORE====
 
−
Trata-se de um Banco de Dados implementado na linguagem C que, entre outras coisas, é responsável por:
 
−
 
−
* carregar tabelas em formato .csv;
 
−
* construir e armazenar novas tabelas;
 
−
* atender às requisições dos demais CORES.
 
−
 
−
=====Tabelas Existentes=====
 
−
 
−
Abaixo, esboçamos as tabelas em .csv que são utilizadas como ponto de partida para a criaçào das demais tabelas.
 
−
 
−
{| border=1 align="center"
 
−
|+ Tabela: DICIONARIO
 
−
|- align="center"
 
−
| Coluna
 
−
| Comentários
 
−
|-
 
−
! PALAVRA
 
−
| a própria palavra
 
−
|-
 
−
! CLASSE
 
−
| classe gramatical
 
−
|-
 
−
! PALAVRA_CANONICA
 
−
| palavra canônica
 
−
|-
 
−
! GENERO
 
−
| gênero
 
−
|-
 
−
! GRAU
 
−
| grau
 
−
|-
 
−
! LISTA_ELEMENTOS
 
−
| lista de elementos
 
−
|-
 
−
! LISTA_PREPOSICOES
 
−
| lista de preposições
 
−
|-
 
−
! LISTA_REGENCIAS
 
−
| lista de regências
 
−
|-
 
−
! MODO_TEMPO_FORMANOMINAL
 
−
| modo e/ou tempo e/ou forma nominal
 
−
|-
 
−
! NUMERO
 
−
| número
 
−
|-
 
−
! LISTA_PAPEIS
 
−
| lista de papéis
 
−
|-
 
−
! PESSOA
 
−
| pessoa
 
−
|-
 
−
! CODIGO_PALAVRA_CANONICA
 
−
| código da palavra canônica
 
−
|-
 
−
! CODIGO_PALAVRA
 
−
| código da palavra
 
−
|-
 
−
|}
 
−
 
−
 
−
{| border=1 align="center"
 
−
|+ Tabela: CNAE_110_SUBCLASSE
 
−
|- align="center"
 
−
| Coluna
 
−
| Comentários
 
−
|-
 
−
! CODIGO_SUB_SEC
 
−
| Código Sequencial da subclasse
 
−
|-
 
−
! CODIGO_SEC
 
−
|
 
−
|-
 
−
! CODIGO_DIV
 
−
|
 
−
|-
 
−
! CODIGO_GRP
 
−
|
 
−
|-
 
−
! CODIGO_CLA
 
−
|
 
−
|-
 
−
! CODIGO_SUB
 
−
|
 
−
|-
 
−
! DV_SUB
 
−
|
 
−
|-
 
−
! DESCRICAO_SUB
 
−
|
 
−
|-
 
−
! CCOMPRE_SUB
 
−
|
 
−
|-
 
−
! TCOMPRE_SUB
 
−
|
 
−
|-
 
−
! NCOMPRE_SUB
 
−
|
 
−
|-
 
−
! NOTAS_SUB
 
−
|
 
−
|-
 
−
! CODIGO_CNAE_SUBCLASSE
 
−
|
 
−
|-
 
−
! VETOR_CODIGOS_CNAE
 
−
|
 
−
|-
 
−
|}
 
−
 
−
 
−
 
−
{| border=1 align="center"
 
−
|+ Tabela: CNAE_200_SUBCLASSE
 
−
|- align="center"
 
−
| Coluna
 
−
| Comentários
 
−
|-
 
−
! CODIGO_SUB_SEC
 
−
| Código Sequencial da subclasse
 
−
|-
 
−
! CODIGO_SEC
 
−
|
 
−
|-
 
−
! CODIGO_DIV
 
−
|
 
−
|-
 
−
! CODIGO_GRP
 
−
|
 
−
|-
 
−
! CODIGO_CLA
 
−
|
 
−
|-
 
−
! CODIGO_SUB
 
−
|
 
−
|-
 
−
! DV_SUB
 
−
|
 
−
|-
 
−
! DESCRICAO_SUB
 
−
|
 
−
|-
 
−
! CCOMPRE_SUB
 
−
|
 
−
|-
 
−
! TCOMPRE_SUB
 
−
|
 
−
|-
 
−
! NCOMPRE_SUB
 
−
|
 
−
|-
 
−
! NOTAS_SUB
 
−
|
 
−
|-
 
−
! CODIGO_CNAE_SUBCLASSE
 
−
|
 
−
|-
 
−
! VETOR_CODIGOS_CNAE
 
−
|
 
−
|-
 
−
|}
 
−
 
−
 
−
{| border=1 align="center"
 
−
|+ Tabela: DADOS_VITORIA_110
 
−
|- align="center"
 
−
| Coluna
 
−
| Comentários
 
−
|-
 
−
! NO_IDENTIFICADOR
 
−
| Um número de identificação que veio junto aos dados que recebemos
 
−
|-
 
−
! OBJETO_SOCIAL
 
−
| Texto descritivo do objeto em questão
 
−
|-
 
−
! CNAE_FISCAL
 
−
| Um código CNAE para o qual esta atividade foi classificada; Formato direto de 7 dígitos, sem '-' ou '/'
 
−
|-
 
−
! VETOR_CODIGOS_CNAE
 
−
| Neste campo, sempre o valor zero, ele é preenchido pelo DB_CORE com os sequenciais que representam as classificações
 
−
|}
 
−
 
−
 
−
{| border=1 align="center"
 
−
|+ Tabela: DADOS_VITORIA_200
 
−
|- align="center"
 
−
| Coluna
 
−
| Comentários
 
−
|-
 
−
! NO_IDENTIFICADOR
 
−
| Um número de identificação que veio junto aos dados que recebemos
 
−
|-
 
−
! OBJETO_SOCIAL
 
−
| Texto descritivo do objeto em questão
 
−
|-
 
−
! CNAE_FISCAL
 
−
| Um código CNAE para o qual esta atividade foi classificada; Formato direto de 7 dígitos, sem '-' ou '/'
 
−
|-
 
−
! VETOR_CODIGOS_CNAE
 
−
| Neste campo, sempre o valor zero, ele é preenchido pelo DB_CORE com os sequenciais que representam as classificações
 
−
|}
 
−
 
−
=====Manipulando o Dicionário=====
 
−
 
−
Para criar um novo dicionário ou apenas adicionar novas palavras a um dicionário já existente foi criado um script que torna essa tarefa bem simples. O script ''adiciona_palavras_dicionario.sh'' se encontra dentro do diretório ''DB_CORE/Diadorim'' e para utilizá-lo basta seguir os seguintes passos:
 
−
 
−
* Escreva as palavras a serem adiconadas ao dicionário em um arquivo texto, uma palavra por linha. '''Atenção'''! Escreva as palavras sempre em letras minúsculas e certifique-se de que a codificação do arquivo é '''unicode (utf8)'''.
 
−
 
−
* Digite o comando ''./adiciona_palavras_dicionario.sh entrada.txt saida.csv'' para rodar o script e adicionar as palavras. No comando anterior, substitua ''entrada.txt'' pelo nome do arquivo texto com as palavras a serem adicionadas e ''saida.csv'' pelo nome do dicionário onde você deseja inserir as palavras. Para criar um novo dicionário, basta substituir ''saida.csv'' pelo nome de um dicionário que ainda não exista e responder '''s''' à pergunta sobre começar um novo dicionário.
 
−
 
−
Para fazer a adição das novas palavras ao dicionário, este script faz uso de um aplicativo fornecido pelo NILC - USP, chamado Diadorim. Este aplicativo é responsável por encontrar palavras relacionadas a uma dada palavra (todas as conjugações de um verbo por exemplo) e as informações de classe, gênero, número, tempo, grau, pessoa, etc, das palavras a serem adiconadas.
 
−
 
−
O script executa os seguintes passos:
 
−
 
−
* Passa possíveis letras maiúsculas para minúsculas nas palavras de entrada;
 
−
* Usa o Diadorim para preencher um arquivo com as informações de classe, gênero, tempo, etc;
 
−
* Cria um dicionário no formato .csv apartir das informações do passo anterior;
 
−
* Insere as novas palavras no dicionário fornecido;
 
−
* Reordena o dicinário;
 
−
* Retira possíveis palavras duplicadas (repetidas) do dicionário;
 
−
* Mostra as informações de saída.
 
−
 
−
Vários arquivos de back up são gerados e apagados durante a execução dos passos acima. Se você quiser mantê-los para posterior verificação, use a opção '''-b''' como úlltimo parâmetro na chamada do script: ''./adiciona_palavras_dicionario.sh entrada.txt saida.csv -b''
 
−
 
−
O script apresenta como saída quatro informações:
 
−
 
−
* ''Total de linhas lidas'' é o número de palavras que já existia no dicionário fornecido mais o número de palavras geradas pelo Diadorim;
 
−
* ''Total de linhas repetidas'' é o número de palavras encontrads repetidas e que foram excluídas;
 
−
* ''Total de linhas diferentes'' é o número de palavras que seu novo dicionário realmente possui;
 
−
* ''Total de linhas complementares'' é o número de linhas complementares encontradas. Duas linhas são complementares quando uma possui pelo menos um campo que a outra linha não tem e a primeira não possui pelo menos um campo que a segunda linha tem.
 
−
 
−
''adiciona_palavras_dicionario.sh'' gera ainda um arquivo com o nome de '''nao_consta.txt''' que contém todas as palavras que o Diadorim não conhece, e por tanto, não foram adicionadas ao dicionário. Este arquivo se encontra no mesmo diretório do script ''adiciona_palavras_dicionario.sh''.
 
−
 
−
====WNN_CORE====
 
−
Implementação do categorizador que utiliza Redes Neurais Sem Peso VG-RAM.
 
−
 
−
====WNN_COR_CORE====
 
−
Implementação do categorizador que utiliza Redes Neurais Sem Peso VG-RAM com correlação de dados de saída.
 
−
 
−
====VS_CORE====
 
−
Implementação do categorizador que utiliza Espaço Vetorial.
 
−
 
−
====WISARD_CORE====
 
−
Implementação do categorizador que utiliza Redes Neurais Sem Peso WISARD.
 
−
 
−
====BAYESIAN_CORE====
 
−
Implementação do categorizador que utiliza Redes Bayesianas.
 
−
 
−
====CAN_CORE====
 
−
O ''Causal Association Network'' (CAN - nome preliminar oriundo de técnica similar usada em sistemas especialistas na década de 70) CORE armazena conhecimento na forma de um grafo <math>G(N,V)</math> onde os nós, <math>N</math>, são palávras ou nós terminais, e os arcos orientados, <math>V</math>, representam seqüências de palavras observadas no conjunto de treinamento. A Figura 6 mostra um exemplo de um grafo <math>G</math> gerado a partir do conjunto de treinamento:
 
−
{| border=2 width="20%"
 
−
|+ '''Conjunto de Treinamento'''
 
−
|-
 
−
! Objeto Social
 
−
! Código CNAE
 
−
|-
 
−
| align="left" | Cultivo de Arroz
 
−
| align="center" | 1
 
−
|-
 
−
| align="left" | Cultivo de Feijão
 
−
| align="center" | 2
 
−
|-
 
−
| align="left" | Cultivo de Milho
 
−
| align="center" | 3
 
−
|}
 
−
 
−
[[Image:can.jpg|left|thumb|500px|Figura 6: CAN]]
 
−
 
−
Cada nó de G pode armazenar um conjunto <math>Cn</math> de códigos CNAE e cada arco um conjunto <math>Cv</math> de códigos CNAE. O treinamento de uma CAN consiste em construir o grafo G a partir de uma base de dados de exemplos de codificação (objetos sociais e seus códigos CNAE associados ou a denominação de uma subclasse CNAE e seu respectivo código, por exemplo).
 
−
 
−
O teste é feito percorrendo o grafo de acordo com as palavras no objeto social de teste. Durante este percurso, pesos são atribuídos a cada código CNAE em cada nó ou arco encontrado segundo duas funções:
 
−
<math>Fn: Cn \Rightarrow (Cn, \mathbb{R})</math> (para nó) e
 
−
<math>Fv: Cv \Rightarrow (Cv, \mathbb{R})</math> (para arco)
 
−
Os códigos CNAE observados no teste são ordenados segundo a função:
 
−
<math>F: (Cn, \mathbb{R}) \cup (Cv, \mathbb{R}) \Rightarrow (Cn \cup Cv, \mathbb{R}) </math>
 
−
O ranking produzido por <math>F</math> é a saída do categorizador CAN para o objeto social sendo testado.
 
−
 
−
Diversas funções <math>Fn</math>, <math>Fv</math> e <math>F</math> podem ser usadas e experimentos devem ser realizados para identificar candidatas que viabilizem bom desempenho de categorização. Outros aspectos, como o pré-processamento dos dados de entrada (remoção de acentos, conversão para palara canônica, ''stemming'', etc), por exemplo, devem também ser examinados.
 
−
 
−
Em um exemplo de implementação de um categorizador CAN, poderíamos ter funções <math>Fn</math> e <math>Fv</math> que simplesmente contam o número de ocorrências de cada código CNAE observado na travessia do grafo, e uma função <math>F</math> que une as listas de pares ''(código CNAE, ocorrências)'' produzidas por <math>Fn</math> e <math>Fv</math> e ordena a lista resultante segundo o número de ocorrências dos códigos CNAE. Para um objeto social de entrada igual a "''plantio de arroz''", a função <math>Fn</math> deste categorizador produziria os pares ''(1, 1)'', ''(2, 1)'' e ''(3, 1)'' para a palavra "''de''" (a palavra "''plantio''" seria ignorada neste caso por não fazer parte de <math>G</math>), e o par ''(1, 1)'' para a palavra "arroz". A função <math>Fv</math> produziria o par ''(1, 1)'' para o arco orientado (''de'', ''arroz'') e ''(1, 1)'' para o arco orientado (''arroz'', ''terminal''). Finalmente, a função <math>F</math> produziria os pares ordenados ''(código CNAE, ocorrências)'' ''(1, 3)'', ''(2, 1)'' e ''(3, 1)''.
 
−
 
−
----
 
−
 
 
===Adicionando um CORE ao SCAE===
 
===Adicionando um CORE ao SCAE===
  
Linha 1 269: Linha 80:
 
**** '''input''': nenhum.
 
**** '''input''': nenhum.
 
**** '''output''': nenhum. <br><br>
 
**** '''output''': nenhum. <br><br>
−
** O novo CORE deverá fazer uma chamada de função que inicializará o servidor (a partir desta chamada, o CORE entrará em um estado de espera por requisições). A função que inicializa o servidor é a initialize_core_server (NEW_CORE_NAME), em que NEW_CORE_NAME é a mesma string que foi inserida no arquivo ports.cfg. '''Atenção''': a função initialize_core_server(NEW_CORE_NAME) só deverá ser chamada após o CORE ter inicializado suas variáves, estruturas ... <br><br>
+
** O novo CORE deverá fazer uma chamada de função que inicializará o servidor (a partir desta chamada, o CORE entrará em um estado de espera por requisições). A função que inicializa o servidor é a initialize_core_server (NEW_CORE_NAME), em que NEW_CORE_NAME é a mesma string que foi inserida no arquivo ports.cfg. '''Atenção''': a função initialize_core_server(NEW_CORE_NAME) só deverá ser chamada após o CORE ter inicializado suas variáves, estruturas ... veja o exemplo a seguir:<br><br>
 +
int
 +
main(int argc, char *argv[])
 +
{
 +
/* Inicializações pertinentes ao seu CORE */
 +
 +
initialize_core_server ("NEW_CORE_NAME");
 +
 +
return (0);
 +
}
 
** Alterar o arquivo Makefile.
 
** Alterar o arquivo Makefile.
 
*** Altere o nome do executável;
 
*** Altere o nome do executável;

Edição das 08h38min de 25 de março de 2008

Adicionando um CORE ao SCAE

A tarefa de adicionar um novo CORE ao SCAE foi bastante simplificada e é resumida nos passos abaixo:

1) Edite o seu arquivo .bashrc

  • Insira as seguintes linhas ao seu .bashrc a fim de que a compilação seja possível compilar o novo CORE:
# SHARED 
export SHAREDHOME=$HOME/code/CORES/shared;
  • Execute o comando abaixo:
source .bashrc

2) Configure a porta de escuta do seu CORE

  • Abra o arquivo ports.cfg existente no diretório config (code/CORES/config/);
  • Adicione a seguinte linha ao arquivo:
NEW_CORE_NAME = 127.0.0.1 PORT_NUMBER
  • Assegure que a palavra NEW_CORE_NAME e o número PORT_NUMBER não estejam em uso por outros CORES;

3) Adicionando o novo CORE

  • A inclusão de um novo CORE será mais rápida se ela partir de um já existente;
  • Copie o VS_CORE (code/CORE/VS_CORE), o qual é o CORE mais simples, para o CORE que deseja incluir;
cp -r VS_CORE NEW_CORE_NAME_CORE
  • Dentro do diretório NEW_CORE_NAME_CORE, execute os seguintes procedimentos:
    • remova os arquivos vector_space.c, vector_space.h, vs_core.out e vs_core.ok;
    • renomeie o diretório VECTORS_SPACES (neste diretório ficarão armazenadas as memórias deste novo CORE);
    • Copie para o diretóro NEW_CORE_NAME_CORE os arquvos e/ou diretórios pertencentes ao novo CORE;
    • Modifique o módulo specific_core_rpcs_handling_functions.c de acordo com o seu CORE (declare variáveis globais e defines no início do módulo). Neste arquivo existem 9 (nove) funções:

      • begin_training
        • input: um inteiro espcificando o número de tabelas, um array de strings com os nomes das tabelas, um vetor de inteiros espcificando os mínimos dos ranges e um vetor de inteiros espcificando os máximos.
        • int: "N_TABLES"
        • char **: "TABLES_NAMES"
        • int *: "MIN_LINES_VEC"
        • int *: "MAX_LINES_VEC"
        • output: nenhum.

      • train_line
        • input: um vetor de floats a ser utilizado como padrão de treino (e o seu respectivo tamanho) e um vetor de targets (e o seu respectivo tamanho).
        • float : "TTV_VECTOR"
        • int : "TTV_LENGTH"
        • int *: "CNAE_CODES_VECTOR"
        • int : "CNAE_CODES_LENGTH"
        • output: nenhum.

      • end_training
        • input: nenhum.
        • output: nenhum.

      • reload
        • input: o nome da memória a ser carregada.
        • char *: "NAME"
        • output: Inteiro especificando se a chamada transcorreu com sucesso (SUCCESS = 0) ou se houve alguma falha (FAIL = 1).
        • int: 0 ou 1

      • save
        • input: o nome da memória a ser salva.
        • char *: "NAME"
        • output: Inteiro especificando se a chamada transcorreu com sucesso (SUCCESS = 0) ou se houve alguma falha (FAIL = 1).
        • int: 0 ou 1

      • classify
        • input: um vetor de floats representando o texto do usuária a ser classificado (e o seu respectivo tamanho)
        • float : "USER_VECTOR"
        • int : "VEC_LENGTH"
        • output: um vetor de inteiros contendo códigos sequenciais da tabela CNAE, um vetor de floats contendo as respectivas probabilidades e um inteiro contendo o tamanho deste vetores:
        • int : "SEQ_CODE_VEC"
        • float : "PROBABILITIES_VEC"
        • int : "VEC_SIZE"

      • begin_test
        • input: um inteiro espcificando o número de tabelas, um array de strings com os nomes das tabelas, um vetor de inteiros espcificando os mínimos dos ranges e um vetor de inteiros espcificando os máximos.
        • int: "N_TABLES"
        • char **: "TABLES_NAMES"
        • int *: "MIN_LINES_VEC"
        • int *: "MAX_LINES_VEC"
        • output: nenhum.

      • test_line
        • input: o nível da tabela CNAE em que o teste será realizado, um vetor de floats a ser utiluizado como padrão de teste (e o seu respectivo tamanho), um vetor de targets (e o seu respectivo tamanho) e o tamanho do vetor de beliefs (igual a quantidade de códigos existente no nível de teste).
        • int : level
        • float : "TTV_VECTOR"
        • int : "TTV_LENGTH"
        • int *: "CNAE_CODES_VECTOR"
        • int : "CNAE_CODES_LENGTH"
        • int : "PREDICTED_CLASSES_AND_BELIEFS_size"
        • output: um vetor de estruturas a ser preenchido. Cada estrutura contém três campos, mas o CORE deverá preencher apenas 2: classe e belief.
        • PREDICTED_CLASS_AND_BELIEF *: "PREDICTED_CLASSES_AND_BELIEFS"

      • end_test
        • input: nenhum.
        • output: nenhum.

    • O novo CORE deverá fazer uma chamada de função que inicializará o servidor (a partir desta chamada, o CORE entrará em um estado de espera por requisições). A função que inicializa o servidor é a initialize_core_server (NEW_CORE_NAME), em que NEW_CORE_NAME é a mesma string que foi inserida no arquivo ports.cfg. Atenção: a função initialize_core_server(NEW_CORE_NAME) só deverá ser chamada após o CORE ter inicializado suas variáves, estruturas ... veja o exemplo a seguir:

int 
main(int argc, char *argv[])
{	
	/* Inicializações pertinentes ao seu CORE */

	initialize_core_server ("NEW_CORE_NAME");

	return (0);
}
    • Alterar o arquivo Makefile.
      • Altere o nome do executável;
      • Remova o arquivo .objeto vector_space.o e adicione outros (caso existam);
      • Atualize as linhas de dependências do Makefile:
vector_space.o	: vector_space.h $(INCPATH)/specific_core_rpcs_handling_functions.h
specific_core_rpcs_handling_functions.o	: $(INCPATH)/specific_core_rpcs_handling_functions.h vector_space.h

4) Criação de scripts para realização de experimentos

  • Caso queira realizar experimentos com o novo CORE, será necessário criar scripts de treino e teste. Para isto:
    • Entre no diretório USER_INTERFACE (code/CORES/USER_INTERFACE);
    • Copie os arquivos experiment_1.a.x.b.train.bat experiment_N.a.x.b.train.bat, onde a varia de 1 a 8 (até o momento) e b de 1 a 8 (número de experimentos existentes em um tabela). N representá o N-ésimo CORE inserido no scae;
    • Copie os arquivos experiment_1.a.x.b.test.bat experiment_N.a.x.b.test.bat, onde a varia de 1 a 8 (até o momento) e b de 1 a 8 (número de experimentos existentes em um tabela). N representá o N-ésimo CORE inserido no scae;
    • Abra todos os arquivo criados:
kdevelop experiment_N*&

e altere o nome do CORE (troque VS por NEW_CORE_NAME).

5) Subindo o novo CORE para svn

  • Antes de adicionar o novo CORE ao svn, assegure que não existem arquivos .svn nos diretório NEW_CORE_NAME_CORE e nos seus subdiretórios;
  • Agora, no diretório code, execute os seguintes comandos:
svn add NEW_CORE_NAME_CORE
svn ci NEW_CORE_NAME_CORE -m "Adicionado o CORE NEW_CORE_NAME ao repositório do SCAE. Este CORE ..."
  • Pronto, você acabou de inserir um novo CORE!