Detecção de similaridade de conteúdo: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
m Restaurando referências presentes no artigo original; ajustando datas, traduzindo nome/parâmetro nas citações, outros ajustes usando script
m +links e ajustes
Linha 22:
 
===== Correspondência de ''strings'' =====
A [[correspondência de strings]] é uma abordagem predominante usada na ciência da computação. Quando aplicada ao problema de detecção de plágio, os documentos são comparados para sobreposições exatas de texto. Vários métodos foram propostos para lidar com essa tarefa, alguns dos quais foram adaptados para detecção externa de plágio. Verificar um documento suspeito nesta configuração requer o cálculo e o armazenamento de representações eficientemente comparáveis de todos os documentos na coleção de referência para compará-los aos pares. Geralmente, modelos de documento de sufixo, como [[Árvore de sufixos|árvores de sufixo]] ou vetores de sufixo, foram usados para esta tarefa. No entanto, a correspondência de substring permanece cara do ponto de vista computacional, o que a torna uma solução inviável para verificar grandes coleções de documentos.<ref name=Monostori00/><ref name=Baker93/><ref name=Khmelev03/>
 
===== Saco de palavras =====
Linha 81:
* Tokens - como acontece com strings, mas usando um [[Análise léxica|lexer]] para converter o programa em [[Análise léxica|tokens]] primeiro. Isso descarta espaços em branco, comentários e nomes de identificadores, tornando o sistema mais robusto para substituições de texto simples. A maioria dos sistemas de detecção de plágio acadêmico trabalha nesse nível, usando diferentes algoritmos para medir a similaridade entre sequências de tokens.
* [[Árvore de análise sintática|Árvores de análise]] - construir e comparar árvores de análise. Isso permite que semelhanças de nível superior sejam detectadas. Por exemplo, a comparação de árvore pode normalizar declarações condicionais e detectar construções equivalentes como semelhantes entre si.
* Program[[Grafo Dependencyde GraphsDependência de Programa]] (PDGs) - um PDG captura o fluxo real de controle em um programa e permite que equivalências de nível muito mais alto sejam localizadas, com maior gasto em complexidade e tempo de cálculo.
* Métricas - as métricas capturam 'pontuações' de segmentos de código de acordo com certos critérios; por exemplo, "o número de loops e condicionais" ou "o número de variáveis diferentes usadas". As métricas são simples de calcular e podem ser comparadas rapidamente, mas também podem levar a falsos positivos: dois fragmentos com as mesmas pontuações em um conjunto de métricas podem fazer coisas totalmente diferentes.
* Abordagens híbridas - por exemplo, árvores de análise + árvores de [[Árvore de sufixos|sufixo]] podem combinar a capacidade de detecção de árvores de análise com a velocidade oferecida pelas árvores de sufixo, um tipo de estrutura de dados de correspondência de strings.
 
A classificação anterior foi desenvolvida para [[Refatoração|refatoração de código]], e não para detecção de plágio acadêmico (um objetivo importante da refatoração é evitar código duplicado, conhecido na literatura como [[Código duplicado|clones de código]]). As abordagens acima são eficazes contra diferentes níveis de similaridade; similaridade de baixo nível refere-se a texto idêntico, enquanto similaridade de alto nível pode ser devida a especificações semelhantes. Em um ambiente acadêmico, quando se espera que todos os alunos codifiquem com as mesmas especificações, um código funcionalmente equivalente (com similaridade de alto nível) é inteiramente esperado, e apenas a similaridade de baixo nível é considerada prova de trapaça.
 
== Complicações do uso de software de correspondência de texto para detecção de plágio ==
Linha 94:
== Ver também ==
 
* [[:Categoria:detectores de plágio]]
* [[Comparação de software anti-plágio]]
* [[Hash sensível à localidade]]