O projeto visa criar um programa multithreading para processar textos em paralelo, utilizando técnicas básicas de Processamento de Linguagem Natural (PLN) em Rust e paralelizando a execução com OpenCL. O programa lê um dataset CSV contendo e-mails que podem ser classificados em até seis categorias. Para cada classificação, o código separa os e-mails em novos arquivos txt e conta a frequência de palavras de cada um utilizando a GPU.
O dataset utilizado para dividir as mensagens de acordo com as categorias "toxic", "severe_toxic", "obscene", "threat", "insult", "identity_hate" foi encontrado na plataforma Kaggle: Toxic Comments Classification - NB-Logistic.
- Leitura e Escrita em CSV: Leitura de dados de um arquivo CSV de entrada e escrita de dados processados em arquivos CSV de saída;
- Remoção de Pontuação e Stopwords: Limpeza do texto removendo pontuações e palavras comuns (stopwords);
- Tokenização: Divisão do texto em palavras individuais (tokens);
- Cálculo de Frequência de Palavras com GPU: Utiliza a GPU para calcular a frequência de palavras em cada categoria.
- Representação de Dados: Exibição das 10 palavras mais frequentes de cada categoria.
- Limpeza de Arquivos Temporários: Remove os arquivos de texto temporários após a análise.
-
Tenha certeza de ter rustc (compilador Rust) e cargo (gerenciador de pacotes) instalado. É possível verificar desta forma:
rustc --version cargo --version
- Se não tiver:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt install rustc
-
É necessário instalar o OpenCL. Este trabaho foi feito para ser exeutado com GPUs AMD, foi utilizado o AMD-APP-SDKInstaller.
export LIB="/c/Program Files (x86)/AMD APP SDK/3.0/lib/x86_64:$LIB"
-
As dependências ficam listadas em
Cargo.toml.
- Clone o repositório:
-
Se você tiver o Git instalado, clone o repositório para o seu computador usando o seguinte comando:
git clone https://github.com/CloudioJ/IPPD cd <diretório_do_repositório>
-
Execute o programa:
cargo build --release cargo run
O projeto está organizado nos seguintes diretórios:
csv/: Contém o dataset original;src/: Contém o arquivo main.rs;txt/: Contémos os arquivos de texto por categoria - crie manualmente o diretório.
- Claudio Luis da Silva Machado Junior
- Fernanda Cardoso Petiz