Comparer la similarité de textes par shingles
Ce comparateur transforme deux passages en shingles de mots consécutifs et exprime leur recoupement en pourcentage.
Lancer gratuitement
Vous choisissez le nombre de mots de chaque shingle, puis recevez un indice de Jaccard déterministe et les comptes employés. La normalisation efface les différences de casse et de ponctuation tout en préservant les mots et leur ordre. Le résultat aide les auteurs, étudiants et équipes éditoriales à repérer des formulations réutilisées, comparer des versions ou organiser une relecture. Il estime la ressemblance textuelle, sans prouver un plagiat, une paternité, une intention ou une faute.
Comprendre ce que mesure le pourcentage
Un shingle est une suite de mots voisins. Avec une taille de trois, la phrase est examinée des mots un à trois, puis deux à quatre, et ainsi de suite jusqu’à la fin. Le comparateur construit un ensemble de shingles uniques pour chaque texte. Il compte ceux présents dans les deux ensembles, divise cette intersection par l’union de tous les shingles uniques et multiplie le résultat par cent. Il s’agit de la similarité de Jaccard. Cent signifie que les ensembles normalisés sont identiques, tandis que zéro signifie qu’ils ne partagent aucun élément. Le calcul ignore la casse et la ponctuation, car ces détails superficiels constituent rarement une différence textuelle importante, mais il conserve les mots et leur ordre local. La répétition d’une même expression ne compte qu’une fois et ne peut donc pas gonfler artificiellement le résultat. Considérez ce pourcentage comme une mesure ciblée des formulations communes, et non comme un verdict complet sur l’originalité. Deux textes peuvent exprimer la même idée autrement et obtenir un faible score ; inversement, des citations légitimes, mentions standard, termes techniques ou consignes peuvent créer un recoupement sans faute. Le contexte et l’examen humain restent indispensables dès que le résultat peut avoir des conséquences pour une personne.
Choisir une taille de shingle pertinente
La taille détermine le degré d’exactitude exigé. Les petits shingles détectent de courts fragments communs et produisent souvent davantage de recoupement. Ils conviennent aux brouillons brefs ou aux retouches légères, mais des expressions ordinaires peuvent aussi coïncider par hasard. Les grands shingles exigent de longues suites dans le même ordre. Plus spécifiques, ils limitent les correspondances accidentelles, mais un seul mot ajouté ou remplacé peut rompre plusieurs groupes voisins et réduire fortement le pourcentage. Une plage de trois à cinq mots constitue souvent un point de départ pratique pour la prose, sans qu’aucun réglage universel puisse démontrer une copie. Adaptez la taille au document, consignez-la et gardez-la constante pour comparer plusieurs paires. Les scores obtenus avec des tailles différentes ne sont pas directement comparables. Chaque texte doit contenir au moins autant de mots normalisés que la taille choisie. Si l’un est plus court, la capacité renvoie une erreur de saisie, car aucun ensemble valide ne peut être formé. Cet échec explicite est préférable à un zéro trompeur qui laisserait croire que deux passages trop courts ont été réellement comparés.
Exploiter le résultat avec discernement
Commencez par une question à laquelle le score peut réellement répondre : une révision conserve-t-elle les formulations exactes d’un brouillon antérieur, ou quelles paires doivent-elles être relues en priorité ? Envoyez les deux textes, notez la taille et conservez les comptes d’intersection et d’union avec le pourcentage si la reproductibilité est nécessaire. Si le score est élevé, examinez le contexte commun avant toute conclusion. Définitions, citations, références, modèles, clauses juridiques et consignes imposées peuvent légitimement se répéter. S’il est faible, ne présumez pas une indépendance : paraphrases, traductions, imitation de structure et idées communes peuvent ne pas conserver assez de mots consécutifs. L’outil ne parcourt pas les URL, n’interroge aucune base cachée, ne retrouve pas une source originale, ne détermine pas l’antériorité et n’évalue pas les règles de citation. Il ne déduit pas non plus l’intention. Dans l’éducation, l’édition, le recrutement ou la conformité, servez-vous-en comme signal de tri suivi d’un jugement humain documenté, jamais comme fondement unique d’une accusation ou sanction. Pour l’automatisation, appliquez des réglages cohérents et confiez les cas inhabituels ou très proches à une personne capable d’évaluer provenance, autorisations, citations et règles applicables.
Cas d’usage
Comparer les versions d’un brouillon
Mesurez les formulations locales exactes qui subsistent après la modification ou la réécriture d’un document.
Prioriser la relecture éditoriale
Classez les paires par recoupement afin d’examiner en premier les contenus les plus proches.
Contrôler les textes remis
Employez une estimation reproductible avec prudence, en complément des sources, citations et avis humain.
Questions fréquentes
Comment le pourcentage de similarité est-il calculé ?
Le nombre de shingles uniques communs est divisé par l’union des shingles uniques des deux textes, puis multiplié par 100.
Que se passe-t-il si un texte est plus court que la taille choisie ?
La requête renvoie une erreur de saisie, car ce texte ne peut pas former un seul shingle.
Un score élevé prouve-t-il un plagiat ?
Non. Il mesure seulement des suites de mots communes. Citations, modèles, mentions imposées et expressions courantes exigent un examen contextuel.
La ponctuation et la casse influencent-elles le résultat ?
Non. Le comparateur normalise Unicode et la casse avant d’extraire les mots, tout en conservant leur ordre.
Quel est le prix d’une comparaison par API ?
Chaque comparaison par API coûte $0.002. La version déterministe est également accessible sur cette page.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
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)Exemple de requête
{
"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
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.plagiarism_shingle_compare",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |