Similaridade entre textos
Esta capacidade mede a similaridade semântica entre dois textos e devolve uma nota de 0 a 1: quanto mais perto de 1, mais os textos dizem a mesma coisa, mesmo com palavras diferentes. Feita para deduplicar, casar cadastros e agrupar em escala, via API, paga por par.
Rode online
Rode nos nossos servidores com a sua conta. As ferramentas grátis rodam no seu navegador; esta aqui é descontada do seu saldo do KIT pelo preço acima.
Uma nota de 0 a 1 para cada par
"Furadeira de impacto 750W Bosch" e "Bosch 750 W furadeira c/ impacto" são o mesmo produto escrito por duas mãos — busca por texto exato não enxerga isso; a similaridade semântica dá nota alta ao par. O cálculo usa embeddings: cada texto vira um vetor que representa o significado, e a nota mede a distância entre os dois. Palavras trocadas, abreviações e ordem diferente pesam pouco; sentido diferente pesa muito.
Para que serve na prática
Deduplicação é o uso clássico: encontrar o mesmo cliente, produto ou chamado cadastrado duas vezes com grafias diferentes. Depois vem o casamento de bases — unificar o catálogo de dois fornecedores, casar o extrato com o contas a pagar pela descrição. E o agrupamento: juntar tickets que reclamam da mesma coisa, respostas de pesquisa que dizem o mesmo, páginas do site que competem entre si por serem quase iguais.
Escala: o preço é por par, não por palavra
A cobrança é US$ 0,002 por chamada mais US$ 0,0015 por par comparado — o tamanho dos textos não muda o preço. Cruzar 10.000 pares custa US$ 15,00; conferir um par avulso, US$ 0,0035. Uma chamada pode carregar um lote de pares, então o cruzamento de duas bases roda em poucas chamadas, e o resultado volta como lista de notas pronta para você aplicar o corte que fizer sentido.
O que a nota é — e o que ela não é
A nota mede proximidade de significado, não cópia literal: dois textos podem dizer o mesmo com zero palavras em comum e pontuar alto. Por isso ela não substitui um detector de plágio nem uma comparação jurídica de versões — para saber o que mudou entre dois contratos existe a capacidade irmã de comparação de textos, que explica as diferenças. Aqui a resposta é um número, e números em escala é o que sistemas precisam.
Casos de uso
Unificar catálogos de dois fornecedores
Um e-commerce de autopeças em São Paulo importa catálogos de dois distribuidores: 18.000 itens de um lado, 12.000 do outro, descrições diferentes para as mesmas peças. Cruzando os pares candidatos via API, os produtos idênticos se casam pela nota — e a loja para de anunciar o mesmo filtro duas vezes com dois preços.
Tickets repetidos no suporte
O suporte da TecnoSul Soluções Digitais agrupa os chamados do mês por similaridade: "não consigo emitir a nota", "erro na hora de gerar NFS-e" e "nota fiscal não sai" caem no mesmo grupo com notas acima de 0,8. O relatório mostra que um único bug gerou 40% dos tickets — prioridade definida com dado.
Páginas que competem entre si no Google
Rafael Almeida Costa audita o blog de um cliente com 600 posts. Comparando títulos e aberturas aos pares, encontra 14 duplas de artigos quase iguais disputando a mesma busca. Fundir cada dupla num artigo só resolveu a canibalização — e o tráfego das páginas fundidas subiu.
Respostas abertas de pesquisa NPS
Uma rede de farmácias de Porto Alegre recebe 3.000 comentários livres na pesquisa de satisfação. Agrupando por similaridade, os comentários viram oito temas — fila no caixa, falta de estoque, atendimento — com o tamanho real de cada um. A diretoria decide com números, não com a anedota mais recente.
Perguntas frequentes
O que significa, na prática, uma nota 0,85?
Que os dois textos muito provavelmente falam da mesma coisa. Não existe corte universal: para deduplicar cadastros costuma-se exigir nota alta (0,85+); para agrupar temas, cortes mais baixos funcionam. O ideal é olhar uma amostra dos seus dados e calibrar o corte para o seu caso.
Textos em idiomas diferentes podem ser comparados?
Podem, e pares equivalentes entre idiomas tendem a pontuar alto — mas as notas mais confiáveis vêm de pares no mesmo idioma. Se sua base mistura português e espanhol, vale calibrar o corte separadamente para os pares mistos.
Serve como detector de plágio?
Não é a ferramenta para isso: ela mede proximidade de sentido, não cópia. Uma paráfrase honesta pontua alto, e uma cópia com sinônimos também — a nota não distingue as duas situações, que é justamente o que um caso de plágio exige.
Como comparo duas bases inteiras sem estourar o custo?
Não compare todos contra todos: filtre pares candidatos por um critério barato (mesma categoria, mesma inicial, mesmo prefixo de código) e mande só esses. De 18.000 × 12.000 combinações possíveis, sobram alguns milhares de pares reais — a US$ 0,0015 cada, em dólar.
Qual o custo de um cruzamento típico?
US$ 0,002 por chamada mais US$ 0,0015 por par: 10.000 pares saem por US$ 15,00, e 200 pares por US$ 0,302. O tamanho dos textos não altera o preço — a unidade é o par.
Os textos comparados ficam registrados em algum banco?
São processados para calcular as notas e o resultado volta; não há conta nem base acumulando seus dados. Se os pares contêm dados de clientes, a boa prática da LGPD se aplica: envie os campos necessários à comparação, não a ficha inteira.
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/text/semantic-similarity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/text/semantic-similarity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/semantic-similarity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/semantic-similarity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/semantic-similarity", 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
{
"input": "…"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.semantic_similarity",
"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.
Limites
max_tokens | 20000 |
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. |