Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Adriel007 committed Oct 29, 2023
0 parents commit ac0e3cf
Show file tree
Hide file tree
Showing 323 changed files with 2,797 additions and 0 deletions.
150 changes: 150 additions & 0 deletions NaiveBayes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
<?php
require_once "./StringTools.php";
class Naive_Bayes
{
use StringTools\StringTools;
private $total_samples = 0;
private $total_tokens = 0;
private $subjects = [];
private $tokens = [];
public function classify($str)
{

if ($this->total_samples === 0)
return [];

$tokens = $this->tokenize($str);
$total_score = 0;
$scores = [];

foreach ($this->subjects as $subject => $subject_data) {

$subject_data['prior_value'] = log($subject_data['count_samples'] / $this->total_samples);
$this->subjects[$subject] = $subject_data;
$scores[$subject] = 0;

foreach ($tokens as $token) {
$count = isset($this->tokens[$token][$subject]) ? $this->tokens[$token][$subject] : 0;
$scores[$subject] += log(($count + 1) / ($subject_data['count_tokens'] + $this->total_tokens));
}

$scores[$subject] = $subject_data['prior_value'] + $scores[$subject];
$total_score += $scores[$subject];

}

$min = min($scores);
$sum = 0;
foreach ($scores as $subject => $score) {
$scores[$subject] = exp($score - $min);
$sum += $scores[$subject];
}

if ($sum > 0) {
foreach ($scores as $subject => $score) {
$scores[$subject] = $score / $sum;
}
} else {
// Tratar caso especial quando a soma das pontuações é 0
$numCategories = count($scores);
$defaultProbability = 1 / $numCategories;
$totalDefaultProbability = $defaultProbability * $numCategories;

foreach ($scores as $subject => $score) {
$scores[$subject] = $defaultProbability;
}

// Distribuir a probabilidade restante uniformemente entre as categorias
$remainingProbability = 1 - $totalDefaultProbability;
$additionalProbability = $remainingProbability / $numCategories;

foreach ($scores as $subject => $score) {
$scores[$subject] += $additionalProbability;
}
}

arsort($scores);
return $scores;

}
public function tokenize($str)
{
$str = $this->removeStopWords($str);
$str = $this->clean($str);

$count = preg_match_all('/\w+/', $str, $matches);

return $count ? $matches[0] : [];

}

public function train($subject, $rows)
{

if (!isset($this->subjects[$subject])) {
$this->subjects[$subject] = array(
'count_samples' => 0,
'count_tokens' => 0,
'prior_value' => null,
);
}

if (empty($rows))
return $this;
if (!is_array($rows))
$rows = array($rows);

foreach ($rows as $row) {

$this->total_samples++;
$this->subjects[$subject]['count_samples']++;

$tokens = $this->tokenize($row);

foreach ($tokens as $token) {

if (!isset($this->tokens[$token][$subject]))
$this->tokens[$token][$subject] = 0;

$this->tokens[$token][$subject]++;
$this->subjects[$subject]['count_tokens']++;
$this->total_tokens++;

}

}

}

public function saveModel($filename)
{
$model = [
'total_samples' => $this->total_samples,
'total_tokens' => $this->total_tokens,
'subjects' => $this->subjects,
'tokens' => $this->tokens,
];

$jsonModel = json_encode($model);
file_put_contents($filename, $jsonModel);
}

public static function loadModel($filename)
{
$jsonModel = file_get_contents($filename);
$model = json_decode($jsonModel, true);

if ($model) {
$naiveBayes = new self();
$naiveBayes->total_samples = $model['total_samples'];
$naiveBayes->total_tokens = $model['total_tokens'];
$naiveBayes->subjects = $model['subjects'];
$naiveBayes->tokens = $model['tokens'];

return $naiveBayes;
} else {
throw new Exception("Failed to load the model from JSON.");
}
}

}
62 changes: 62 additions & 0 deletions SearchLogic.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php
require_once "./NaiveBayes.php";

class SearchLogic
{
use StringTools\StringTools;
private array $normal = [];
private array $toxic = [];

public function __construct(string $pathNormal, string $pathToxic)
{
$this->normal = $this->getAllFilesContents($pathNormal);
$this->toxic = $this->getAllFilesContents($pathToxic);
}

public function classify(string $text): array
{
$naiveBayes = null;

if (file_exists("./model.json")) {
$naiveBayes = Naive_Bayes::loadModel("./model.json");
} else {
$naiveBayes = new Naive_Bayes();

foreach ($this->normal as $normal) {
$naiveBayes->train("normal", $normal);
}
foreach ($this->toxic as $toxic) {
$naiveBayes->train("toxic", $toxic);
}

$naiveBayes->saveModel("./model.json");
}

return $naiveBayes->classify($text);
}

private function getAllFilesContents(string $directoryPath): array
{
$fileContents = [];

// Check if the given path is a directory
if (is_dir($directoryPath)) {
$files = scandir($directoryPath);

foreach ($files as $file) {
// Exclude "." and ".." entries
if ($file !== "." && $file !== "..") {
$filePath = $directoryPath . DIRECTORY_SEPARATOR . $file;

// Check if it's a file
if (is_file($filePath)) {
$fileContents[$file] = $this->removeStopWords($this->clean(file_get_contents($filePath)));
}
}
}
}

return $fileContents;
}
}
?>
73 changes: 73 additions & 0 deletions StringTools.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<?php
namespace StringTools;

trait StringTools
{
public function removeStopWords(string $str): string
{
$str = ' ' . $str . ' ';
$stopWords = json_decode(file_get_contents("./dataset/stopWords.json"), true);
$words = explode(' ', $str);

for ($c = 0; $c < count($words); $c++) {
for ($i = 0; $i < count($stopWords); $i++) {
if (strtolower($words[$c]) === $stopWords[$i]) {
$str = str_replace(' ' . $words[$c] . ' ', ' ', $str);
break;
}
}
}

return trim($str);
}

private function clean(string $str): string
{
$str = strtolower($str);

// Remover acentos
$str = $this->removeAcentos($str);

// Remover emojis
$str = preg_replace('/[\x{1F600}-\x{1F64F}]/u', '', $str);

// Remover links
$str = preg_replace('/https?:\/\/\S+/', '', $str);

// Remover menções com "#" ou "@"
$str = preg_replace('/[#@]\S+/', '', $str);

// Remover pontuações
$str = preg_replace('/[^\w\s]/u', '', $str);

return $str;
}

private function removeAcentos(string $str): string
{
$acentos = [
'á' => 'a',
'à' => 'a',
'ã' => 'a',
'â' => 'a',
'é' => 'e',
'è' => 'e',
'ê' => 'e',
'í' => 'i',
'ì' => 'i',
'î' => 'i',
'ó' => 'o',
'ò' => 'o',
'õ' => 'o',
'ô' => 'o',
'ú' => 'u',
'ù' => 'u',
'û' => 'u',
'ç' => 'c'
];

return strtr($str, $acentos);
}
}

?>
28 changes: 28 additions & 0 deletions dataset/normal/1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
Os transtornos alimentares são características psicológicas, comportamentais e
fisiológicas. Caracterizam-se por graves distúrbios no comportamento alimentar e da
imagem corporal, sendo seus critérios de diagnósticos estabelecidos pela Organização
Mundial de Saúde (OMS), no Código Internacional de Doenças (CID-10), e pela
Associação de Psiquiatria Americana, no Manual de Estatísticas de Doenças Mentais.
Os transtornos alimentares são distúrbios psiquiátricos, envolvendo os sistemas
psicológicos, emocionais, cognitivos, fisiológicos e alimentares podendo levar o
indivíduo ao óbito. Por isso torna-se necessário a correlação na literatura do estado
nutricional associado aos transtornos alimentares em adolescentes. Este estudo foi
originado através do método de pesquisa descritiva, com o levantamento bibliográfico
da revisão sistemática de literatura, tomando como orientação o período compreendido
de 5 anos, que tem como finalidade atualizar o assunto para comunidade científica de
forma qualitativa e ter uma base para fundamentar novas pesquisas. Os descritores
utilizados na busca eletrônica estão nos seguintes bancos de dados: PubMed, BVS,
Scielo (Scientific Eletronic Library Online) e Google Schoolar. Com base no que foi
exposto e analisado na literatura foi identificado que os transtornos alimentares são
patologias severas, que, se não houver tratamento adequado, desencadeia prejuízos a
saúde do indivíduo e até mesmo pode chegar a óbito e que o aumento desses transtorno
é notório em razão da relação de consumo das mídias sociais, visto que, a exibição e o
compartilhamento de imagens online estão diretamente relacionados a busca por
padrões estéticos impostos pela sociedade foi ainda observado que no Brasil há um
crescente, assim como no exterior em relação aos transtornos alimentares chegando à
conclusão que é de suma importância que a OMS junto com o governo federal
encontrem medidas de promoção e prevenção a saúde com relação aos jovens e ao
consumo excessivo com a idealização do padrão de beleza. Como a etiologia dos
transtornos alimentares é multifatorial, é importante a realização de estudos nacionais,
pois fatores ambientes da realidade brasileira podem alterar os resultados obtidos em
outras realidades socioculturais.
3 changes: 3 additions & 0 deletions dataset/normal/10.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
A medicina veterinária é responsável pela harmonia da tríade humano-ambienteanimal. Obstante ao perfil generalista, o médico veterinário enfrenta preconcepções que limitam a sua essencialidade ao perfil curativo de cães e gatos. O presente trabalho consistiu numa pesquisa a campo acerca da temática: Preconcepção da diligência do médico veterinário na sociedade e seu impacto na efetivação do conceito de Saúde Única. A pesquisa foi realizada por meio do
Google Forms, tendo sido direcionada a indivíduos maiores de dezoito anos, residentes do município de Carpina-PE, e possuindo como objetivo principal apresentar a perspectiva da população acerca da importância do profissional veterinário. Através dos resultados obtidos confirmou-se que embora a medicina veterinária seja uma profissão multidisciplinar, exercendo papel relevante na promoção da saúde humana, ainda persiste um grande entrave quanto à
identificação da sua essencialidade na Saúde Pública, persistindo o estereótipo de uma Medicina Veterinária limitada ao caráter curativo e diagnóstico de cães e gatos. Entretanto, notou-se uma flexibilização na opinião popular no que tange a indispensabilidade do Médico Veterinário no Sistema Único de Saúde.
1 change: 1 addition & 0 deletions dataset/normal/11.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Este estudo ressalta a necessidade de valorizar e incentivar as estudantes do ensino médio na área de tecnologia da informação (TI), buscando combater estereótipos de gênero, promover a igualdade e garantir que suas vozes sejam ouvidas. Para alcançar esses objetivos, é fundamental reexaminar a narrativa histórica, reconhecendo as mulheres que fizeram contribuições significativas no campo da TI. Além disso, é importante apoiar iniciativas inclusivas e remover obstáculos que possam impedir a participação feminina na área tecnológica. A diversidade desempenha um papel fundamental na promoção da inovação e no aproveitamento máximo do potencial do setor de TI, criando assim um futuro digital equitativo e próspero para todos.
22 changes: 22 additions & 0 deletions dataset/normal/12.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Mediante este trabalho propõe-se como uma interface intuitiva pode contribuir para a gestão e
organização de eventos ao ser aplicada os parâmetros de User Interface Design e User
Experience Design. Para tal, foram utilizados os princípios de usabilidade e interatividade,
assim como pontos compreendidos a partir de um breve estudo sobre O Design Centrado no
Ser Humano, dentre alguns deles: User Interface Design, User Experience Design, Branding
Experience Design e Customer Experience Design para assim ser criado uma interface que seja
adaptável e de boa compreensão mesmo para novos usuários. Fora tais tópicos, também foram
observados formas de analisar como tal interface não se tornaria apta para uso a partir da
aplicação do método Cognitive Walkthrough, durante esse teste foram separadas as telas da
interface e assim feitas perguntas com base nos objetivos de cada tela especificamente a partir
das ações que poderiam ser executadas e assim verificar a taxa de aprovação que os usuários
possuiriam com base em como se saíram para realizar cada objetivo, além de analisar os
comentários deixados por eles sobre como poderia corrigir, aperfeiçoar ou adicionar na
interface. A pesquisa foi realizada com alunos de dentro da instituição e antigos visitantes, que
responderam sobre possíveis questões que a interface pode possuir a fim de melhorar sua
usabilidade e contribuir na interação entre usuário e sistema. A partir dos resultados alcançados
o protótipo apesar de uma média alta de aprovação, também obteve pontos negativos a serem
corrigidos, no geral devido a tamanho da fonte ou na cor que não contribuiu no destaque de
algumas informações em duas telas. Após análise, a aplicação possui viabilidade parcialmente
válida levando em conta os resultados obtidos e a implementação de mais algumas
funcionalidades ao protótipo, além da correção de alguns erros e um estudo mais a fundo tendo
como base, aplicações semelhantes ao UniEvents.
1 change: 1 addition & 0 deletions dataset/normal/13.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Este trabalho descreve o desenvolvimento do aplicativo móvel UniPASS, cujo objetivo é simplificar o registro e gerenciamento de atividades de extensão universitária. Por meio da aplicação de métodos de pesquisa e desenvolvimento de software, foi criada uma solução eficiente e intuitiva para os usuários. O UniPASS apresenta uma interface amigável que facilita a busca por cursos de extensão, permitindo que os usuários encontrem rapidamente as atividades de seu interesse. Além disso, o processo de inscrição foi projetado de forma intuitiva, proporcionando uma experiência sem complicações. Destaca-se no UniPASS a facilidade de obtenção de certificados. O aplicativo simplifica esse processo, permitindo que os usuários solicitem e recebam seus certificados de forma rápida e organizada. Essa funcionalidade contribui para a eficiência do registro de cursos e facilita a comprovação das atividades de extensão realizadas. Pesquisas realizadas com os usuários evidenciam que o UniPASS oferece praticidade e facilidade de uso em comparação com os métodos tradicionais de gerenciamento de atividades de extensão. Os usuários relataram uma experiência positiva e sem dificuldades em várias áreas do aplicativo. Em conclusão, o UniPASS é uma solução móvel desenvolvida para otimizar o gerenciamento de atividades de extensão universitária. Sua interface intuitiva e eficiente torna o processo de busca, inscrição e registro de cursos mais prático e organizado. Com o UniPASS, os usuários podem desfrutar de uma experiência simplificada e eficiente, concentrando-se no aproveitamento das atividades de extensão, sem se preocupar com burocracias.
7 changes: 7 additions & 0 deletions dataset/normal/14.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Este trabalho se propõe a descrever conceitos relacionados a integração de
dados, sobretudo ao processo ETL e sua utilidade dentro das organizações. Do ponto de
vista da sua implementação, a veremos através de uma demonstração da ferramenta
Informatica Intelligent Cloud Services (IICS), uma solução de integração de dados em
nuvem. Esse trabalho também traz um comparativo entre a nova tendência de integração
de dados (cloud data integration) e o modelo tradicional de integração de dados (on-premise) de maneira a evidenciar os pontos positivos e negativos da aplicação destes
dois estilos para seu negócio.
2 changes: 2 additions & 0 deletions dataset/normal/15.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Os jogos eletrônicos são um tema de muita importância atualmente, principalmente no meio da computação, pois abrange tanto a economia como a evolução das tecnologias. Este artigo apresentará a evolução dos consoles e atuação da IA dentro do jogo.
O artigo irá apresentar como ocorreu o surgimento do console e suas evoluções, irá falar a importância da indústria para a economia, como ela isso é representada dentro da sociedade e sobre as ações de comando e resposta da IA dentro do jogo.
1 change: 1 addition & 0 deletions dataset/normal/16.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Este trabalho se propõe a abordar um comparativo entre os diferentes tipos de ferramentas baseadas em inteligência artificial ais quais são: luva háptica, óculos sonar e mochila inteligente (Intel AI-Powered Backpack) , cujo é demonstrado cada função que é proposta em cada dispositivo, visando apresentar o funcionamento e a finalidade de cada uma delas, tendo o objetivo em auxiliar na escolha do dispositivo que melhor atender as necessidades enfrentadas pelas pessoas portadoras de deficiência visual na realização de suas tarefas cotidianas. Este comparativo tem como foco destacar os pontos fortes e fracos de cada ferramenta de maneira a evidenciar a mais adequada para esse tipo de serviço, providenciando a opção de escolha mais viável para o público interessado.
Loading

0 comments on commit ac0e3cf

Please sign in to comment.