Similarité cosinus de textes par fréquence des mots
Mesurez à quel point deux textes emploient les mêmes mots, de 0 s'ils n'en partagent aucun à 1 si leur profil de mots est identique, et voyez quels termes ils ont en commun. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte a
- The quick brown fox jumps over the dog.
- Texte b
- A quick brown dog jumps over the fox.
- Similarité cosinus
- 0,894427191
- Produit scalaire
- 8
- Norme de a
- 3,1622776602
- Norme de b
- 2,8284271247
Ce calculateur transforme chaque passage en vecteur de fréquences lexicales, puis mesure l’angle entre les deux vecteurs. Le score va de 0, sans terme compté commun, à 1, lorsque les profils pointent dans la même direction. Il fournit aussi les nombres de jetons, le vocabulaire, les normes, le produit scalaire et les termes partagés selon un calcul déterministe et vérifiable.
Comment chaque texte devient une liste de comptages
Le calculateur met les deux textes en minuscules, isole les mots formés de lettres ou de chiffres et conserve les apostrophes à l'intérieur des mots. La ponctuation et les espaces ne comptent pas. Chaque mot distinct présent dans l'un ou l'autre texte devient une dimension d'un vocabulaire commun, et son nombre d'apparitions dans chaque texte devient la coordonnée de ce texte : un mot employé trois fois vaut trois, et pas seulement « présent ». Le produit scalaire des deux listes est ensuite divisé par le produit de leurs longueurs. Le résultat dépend ainsi moins de la taille des textes qu'un simple décompte des mots partagés.
Ce que le score dit, et ce qu'il ne dit pas
Un score de 1 signifie que les deux textes emploient les mots dans les mêmes proportions, même si l'un répète tout plus souvent ; 0 signifie qu'ils n'ont aucun mot en commun. Il n'y a ni synonymes, ni racines, ni suppression des mots courants : « marcher » et « marchait » comptent comme deux mots différents, et l'ordre des mots n'entre pas dans le calcul. La mesure offre une base rapide et explicable pour comparer des brouillons, de courtes descriptions ou des exemples en classe, mais elle ne prouve ni l'auteur, ni une copie, ni un même sens. À côté du score, vous voyez le nombre de mots de chaque texte, la taille du vocabulaire et la liste des termes partagés.
Transformez deux passages en vecteurs comparables
Collez un passage dans chaque champ. L’outil met le texte en minuscules, extrait les suites Unicode de lettres ou de chiffres et conserve les apostrophes internes. Chaque terme distinct devient une dimension et son nombre d’occurrences constitue la coordonnée.
Vous pouvez ainsi examiner les termes communs et comprendre le résultat.
Interprétez correctement le score
La similarité cosinus divise le produit scalaire par le produit des normes. La valeur 1 signale des profils relatifs identiques et 0 l’absence de terme commun. Aucun seuil n’est universel : définissez le vôtre avec des documents représentatifs.
Ce score mesure une structure lexicale, sans prouver l’auteur, la copie ni l’équivalence de sens.
Choisissez une comparaison lexicale transparente
Utilisez cette mesure comme référence explicable pour comparer des versions, enseigner les modèles vectoriels ou analyser des descriptions. Contrairement à la distance d’édition, elle ignore l’ordre ; contrairement aux embeddings, elle récompense uniquement les correspondances réelles.
Cas d’usage
Enseigner la similarité vectorielle
Montrez comment fréquences, produit scalaire et normes produisent un score reproductible.
Comparer des versions
Mesurez si deux révisions conservent un vocabulaire proche et examinez leurs termes communs.
Établir une référence lexicale
Créez un repère transparent avant d’évaluer des méthodes sémantiques plus complexes.
Questions fréquentes
Que signifie le score obtenu ?
Il va de 0, sans terme commun, à 1, pour des vecteurs de même direction ; les valeurs intermédiaires indiquent un recouvrement partiel.
La casse ou la ponctuation changent-elles le résultat ?
La casse ne compte pas. La ponctuation sépare les termes, sauf les apostrophes internes.
Les synonymes sont-ils détectés ?
Non. L’outil compare les termes exacts en minuscules et leurs fréquences.
L’ordre des mots est-il pris en compte ?
Non. Le vecteur mémorise le nombre d’occurrences de chaque terme, pas sa position.
À partir de quel score deux textes sont-ils assez proches ?
Il n'existe pas de seuil universel. Les valeurs entre 0 et 1 indiquent un recouvrement partiel des mots : fixez votre propre seuil à partir d'exemples représentatifs de vos documents et appliquez-le de façon constante.
Outils associés
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/edu/cosine-text-similarity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text_a":"The quick brown fox jumps over the dog.","text_b":"A quick brown dog jumps over the fox."}'const res = await fetch("https://api.kit.forhosting.com/edu/cosine-text-similarity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text_a": "The quick brown fox jumps over the dog.",
"text_b": "A quick brown dog jumps over the fox."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/cosine-text-similarity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text_a": "The quick brown fox jumps over the dog.",
"text_b": "A quick brown dog jumps over the fox."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/cosine-text-similarity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text_a":"The quick brown fox jumps over the dog.","text_b":"A quick brown dog jumps over the fox."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text_a":"The quick brown fox jumps over the dog.","text_b":"A quick brown dog jumps over the fox."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/cosine-text-similarity", 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": "The quick brown fox jumps over the dog.",
"text_b": "A quick brown dog jumps over the fox."
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.cosine_text_similarity",
"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.
Limites
max_chars_per_text | 100000 |
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. |
Notes techniques
Choisissez une comparaison lexicale transparente
Une requête API coûte $0.002, sans réseau, hasard ni modèle externe.
Questions techniques
Quel est le tarif d’une requête API ?
Chaque requête API coûte $0.002, sans modèle ni service externe.