Compare a similaridade de textos por shingles
Este comparador transforma duas passagens em shingles de palavras consecutivas e apresenta a sobreposição como percentual.
Executar grátis
Você escolhe quantas palavras compõem cada shingle e recebe um índice de Jaccard determinístico, acompanhado das contagens usadas. A normalização elimina diferenças de maiúsculas e pontuação, preservando a identidade e a ordem das palavras. O resultado ajuda autores, estudantes e editores a localizar redação reutilizada, comparar revisões ou priorizar uma leitura cuidadosa. Trata-se de uma estimativa de semelhança textual, não de prova de plágio, autoria, intenção ou irregularidade.
Entenda o que o percentual mede
Um shingle é uma sequência de palavras vizinhas. Com tamanho três, a frase é examinada pelas palavras um a três, depois dois a quatro, e assim por diante até o fim. O comparador cria um conjunto de shingles únicos para cada texto. Ele conta os elementos presentes nos dois conjuntos, divide essa interseção pela união de todos os shingles únicos e multiplica o resultado por cem. Esse cálculo corresponde à similaridade de Jaccard. Cem significa que os conjuntos normalizados são idênticos; zero indica que nenhum elemento é compartilhado. Maiúsculas e pontuação são ignoradas porque esses detalhes superficiais raramente representam uma diferença textual relevante, mas as palavras e sua ordem local são preservadas. Repetições da mesma frase contam apenas uma vez, impedindo que a redundância aumente artificialmente o valor. Considere o percentual uma medida específica de linguagem coincidente, e não um julgamento completo sobre originalidade. Dois textos podem transmitir a mesma ideia com redações diferentes e ter resultado baixo, enquanto citações legítimas, avisos padronizados, terminologia técnica ou instruções de uma tarefa podem gerar sobreposição sem irregularidade. Contexto e análise humana continuam essenciais sempre que o resultado puder afetar alguém.
Escolha um tamanho de shingle útil
O tamanho define quanto uma correspondência precisa ser exata. Shingles pequenos detectam trechos compartilhados curtos e geralmente produzem mais sobreposição. Isso pode ajudar na comparação de rascunhos breves ou na busca de edições leves, mas expressões comuns também podem coincidir por acaso. Shingles maiores exigem sequências mais longas na mesma ordem. Eles são mais específicos e reduzem coincidências acidentais, porém uma única palavra inserida ou substituída pode quebrar vários grupos próximos e diminuir bastante o percentual. De três a cinco palavras costuma ser uma faixa exploratória prática para prosa, mas não existe configuração universal que comprove cópia. Escolha conforme o material, registre a decisão e mantenha o valor constante ao comparar vários pares. Resultados gerados com tamanhos diferentes não são diretamente comparáveis. Cada texto precisa conter pelo menos a quantidade de palavras normalizadas definida no tamanho. Se qualquer passagem for menor, a capacidade retorna erro de entrada porque nenhum conjunto válido pode ser criado. Essa falha explícita é mais segura do que retornar zero, o que poderia sugerir enganosamente que passagens curtas demais foram examinadas e consideradas distintas.
Use o resultado com responsabilidade
Comece com uma pergunta que o valor realmente possa responder, como verificar se uma revisão preserva a redação local exata de um rascunho anterior ou decidir quais pares merecem análise manual primeiro. Envie os dois textos, anote o tamanho e guarde as contagens de interseção e união junto do percentual quando precisar reproduzir o processo. Se o resultado for alto, examine o contexto antes de concluir. Definições, citações, referências, modelos, linguagem jurídica e instruções obrigatórias podem se repetir legitimamente. Se for baixo, não presuma independência: paráfrases, traduções, imitação estrutural e ideias compartilhadas talvez não mantenham palavras consecutivas suficientes. A ferramenta não rastreia URL, não consulta banco oculto, não encontra a fonte original, não determina qual versão surgiu primeiro nem avalia normas de citação. Também não infere intenção. Em educação, publicação, contratação ou conformidade, use-a como sinal de triagem seguido por julgamento humano documentado, nunca como base exclusiva para acusação ou penalidade. Em fluxos automatizados, aplique preparação e configurações consistentes e encaminhe pares incomuns ou muito semelhantes a uma pessoa que possa avaliar procedência, permissões, citações e políticas pertinentes.
Casos de uso
Comparar revisões de rascunhos
Meça quanto da redação local exata permanece depois que um documento foi editado ou reescrito.
Priorizar a revisão editorial
Ordene pares pela sobreposição para que revisores examinem primeiro o material mais semelhante.
Verificar textos enviados
Use uma estimativa reproduzível como sinal cauteloso junto de fontes, citações e análise humana.
Perguntas frequentes
Como o percentual de similaridade é calculado?
Divide-se a quantidade de shingles únicos compartilhados pela união dos shingles únicos dos dois textos e multiplica-se por 100.
O que ocorre quando um texto é menor que o tamanho escolhido?
A solicitação retorna erro de entrada inválida, pois esse texto não consegue formar sequer um shingle.
Um resultado alto comprova plágio?
Não. O valor mede apenas redação consecutiva coincidente. Citações, modelos, termos obrigatórios e expressões comuns exigem contexto.
Pontuação e maiúsculas afetam o resultado?
Não. O comparador normaliza Unicode e caixa antes de extrair as palavras, mantendo a ordem delas.
Quanto custa uma comparação pela API?
Cada comparação pela API custa US$ 0,002. A versão determinística também pode ser usada nesta página.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/life/plagiarism-shingle-compare \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text_a":"Careful research helps writers explain complex subjects with clear evidence and useful examples.","text_b":"Careful research helps authors explain complex subjects with reliable evidence and practical examples.","shingle_size":3}'const res = await fetch("https://api.kit.forhosting.com/life/plagiarism-shingle-compare", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text_a": "Careful research helps writers explain complex subjects with clear evidence and useful examples.",
"text_b": "Careful research helps authors explain complex subjects with reliable evidence and practical examples.",
"shingle_size": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/plagiarism-shingle-compare",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text_a": "Careful research helps writers explain complex subjects with clear evidence and useful examples.",
"text_b": "Careful research helps authors explain complex subjects with reliable evidence and practical examples.",
"shingle_size": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/plagiarism-shingle-compare", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text_a":"Careful research helps writers explain complex subjects with clear evidence and useful examples.","text_b":"Careful research helps authors explain complex subjects with reliable evidence and practical examples.","shingle_size":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text_a":"Careful research helps writers explain complex subjects with clear evidence and useful examples.","text_b":"Careful research helps authors explain complex subjects with reliable evidence and practical examples.","shingle_size":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/plagiarism-shingle-compare", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text_a": "Careful research helps writers explain complex subjects with clear evidence and useful examples.",
"text_b": "Careful research helps authors explain complex subjects with reliable evidence and practical examples.",
"shingle_size": 3
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.plagiarism_shingle_compare",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |