Hoe je de gelijkenis van teksten controleert met cosinusgelijkenis
Cosinusgelijkenis tussen twee teksten is een percentage dat aangeeft hoeveel woordenschat ze delen, niet hoeveel ze inhoudelijk op elkaar lijken. Een score van 74% betekent dat twee teksten grotendeels dezelfde woorden gebruiken, wat vaak duidt op haastig herschreven content. Een score van 6% kan net zo goed twee teksten zijn die letterlijk hetzelfde zeggen, maar dan met compleet andere woorden. Dat verschil is precies waar dit artikel om draait, met twee concrete voorbeelden en de exacte cijfers die daarbij horen.
Hoe de score wordt berekend
De tool op deze pagina zet elke tekst om in een lijst met woordfrequenties. Eerst wordt alles naar kleine letters omgezet en worden leestekens verwijderd, dan wordt de tekst opgesplitst op spaties. Woorden van één letter en veelvoorkomende stopwoorden (lidwoorden, voorzetsels en dergelijke) vallen daarna af, zodat ze de score niet kunstmatig ophogen. Wat overblijft is per tekst een vector: elk uniek woord met het aantal keer dat het voorkomt.
De cosinusgelijkenis tussen die twee vectoren is het inproduct gedeeld door het product van hun lengtes. In gewone taal: hoe meer dezelfde woorden in ongeveer dezelfde verhouding voorkomen, hoe hoger het percentage. De uitkomst wordt getoond als een score van 0 tot 100%. Belangrijk om te weten: dit is geen embeddingmodel met semantisch begrip, het telt letterlijk gedeelde woorden. Alles gebeurt bovendien volledig in je browser, er wordt niets naar een server gestuurd.
Voorbeeld 1: twee herschreven productteksten
Dit is het scenario waar de meeste mensen de tool voor gebruiken: je hebt een productbeschrijving een beetje herschreven voor een tweede pagina en wilt weten of het nog steeds te veel op het origineel lijkt. Plak deze twee Engelse teksten in de tool hieronder (de tool werkt met tekst in elke taal, Engels is hier alleen het voorbeeld zodat de cijfers overal herleidbaar blijven):
Tekst A: “Buy affordable wireless bluetooth headphones with active noise cancellation and thirty hour battery life. Free shipping on every order today.”
Tekst B: “Shop cheap wireless bluetooth headphones featuring active noise cancellation and a thirty hour battery. Enjoy free shipping on every order this week.”
De tool geeft hier 74% similarity, wat in de “Hoge gelijkenis” band valt. Kijk je naar de woorden zelf, dan zie je waarom:
| Woorden | |
|---|---|
| Gedeeld (13) | active, battery, bluetooth, cancellation, every, free, headphones, hour, noise, order, shipping, thirty, wireless |
| Alleen in A (4) | affordable, buy, life, today |
| Alleen in B (5) | cheap, enjoy, featuring, shop, week |
Van de woorden die overblijven na het strippen van stopwoorden zijn er 13 gedeeld tegenover slechts 4 en 5 unieke woorden per tekst. Beide teksten beschrijven hetzelfde product met dezelfde kenmerken (draadloos, bluetooth, ruisonderdrukking, dertig uur batterij, gratis verzending), alleen zijn een paar synoniemen verwisseld (“buy” naar “shop”, “affordable” naar “cheap”). Voor een menselijke lezer die snel scant lijken het twee verschillende teksten, maar de tool ziet dat het grootste deel van de betekenisdragende woorden identiek is. 74% zit boven de matige band en dicht bij wat de tool zelf als hoge gelijkenis bestempelt, precies het soort resultaat dat je zou moeten zien als een waarschuwing dat je eigen contentpagina’s te veel op elkaar lijken.
Voorbeeld 2: dezelfde tekst, maar volledig geparafraseerd
Nu het tegenovergestelde scenario. Tekst C is identiek aan tekst A hierboven. Tekst D zegt inhoudelijk vrijwel hetzelfde, maar met andere woorden:
Tekst D: “Our over ear audio devices block outside sound automatically and last more than a full day per charge, and delivery costs nothing no matter what you order.”
Een mens die beide teksten leest, ziet meteen dat het over hetzelfde product gaat: een koptelefoon die achtergrondgeluid blokkeert, een hele dag meegaat op een lading, en gratis verzending heeft. Toch geeft de tool hier maar 6% similarity, in de “Lage gelijkenis” band. Het enige gedeelde woord tussen de twee teksten is “order”.
Dat is geen fout van de tool, het is precies de grens van wat woordfrequentie kan meten. Tekst D vermijdt bijna elk woord uit tekst A (“headphones” wordt “audio devices”, “noise cancellation” wordt “block outside sound”, “thirty hour battery” wordt “last more than a full day per charge”) terwijl de betekenis vrijwel gelijk blijft. De tool telt letterlijke overlap, geen synoniemen en geen betekenis, dus een goed geparafraseerde tekst scoort laag ook al is de inhoud in wezen gekopieerd. Onthoud dit verschil: een hoge score is een sterk signaal van overlap, maar een lage score bewijst niet dat een tekst origineel is, het bewijst alleen dat de woordkeuze anders is.
Wat de score betekent
| Score | Band | Betekenis |
|---|---|---|
| 70% en hoger | Hoge gelijkenis | De teksten delen het grootste deel van hun betekenisdragende woorden, sterk signaal van (bijna) duplicatie |
| 40% tot 69% | Matige gelijkenis | Aanzienlijke overlap, vaak twee teksten over hetzelfde onderwerp die gedeeltelijk herschreven zijn |
| 1% tot 39% | Lage gelijkenis | Weinig gedeelde woordenschat, maar zoals voorbeeld 2 laat zien sluit dit inhoudelijke gelijkenis niet uit |
| 0% | Geen gelijkenis | Geen enkel woord na het strippen van stopwoorden komt in beide teksten voor |
Controleer je eigen tekst
Voer beide teksten hierboven in om de gelijkenis te berekenen
TF-cosinusgelijkenis · stopwoorden verwijderd · draait in je browser
Veelgemaakte fouten
Aannemen dat dit een embeddingmodel is dat betekenis begrijpt. Dat is het niet. De tool telt gedeelde woorden na het verwijderen van stopwoorden, meer niet. Voorbeeld 2 hierboven laat precies zien waar dat misgaat: inhoudelijk identieke tekst kan 6% scoren omdat de woordkeuze verschilt.
Een lage score interpreteren als “geen duplicaat”. Een goed geparafraseerde tekst kan bijna 0% scoren en toch in de kern een kopie zijn. Gebruik de score als startpunt voor een controle, niet als eindoordeel. Bij twijfel lees je de tekst zelf, de tool vervangt dat niet.
Een kort fragment vergelijken met een veel langere pagina en verbaasd zijn dat de score laag uitvalt. Zelfs als het fragment woordelijk in de langere pagina voorkomt, verdunt alle extra unieke woordenschat van de langere tekst de score. De cosinusberekening kijkt naar de verhouding tussen beide volledige vectoren, niet naar of het korte stuk ergens letterlijk terug te vinden is.
Vergeten dat stopwoorden eruit worden gefilterd. Een heel korte tekst die voornamelijk uit veelvoorkomende woorden bestaat, kan legitiem op 0% uitkomen, ook al lijken de zinnen op het eerste gezicht op elkaar. Dat is geen bug, dat is precies hoe de berekening bedoeld is: alleen de betekenisdragende woorden tellen mee.
Alleen naar het percentage kijken en niet naar de gedeelde en unieke termen eronder. Twee teksten met dezelfde score kunnen heel verschillende oorzaken hebben, de woordenlijsten laten meteen zien of het om echte overlap gaat of om toeval in veelgebruikte vaktermen.
Veelgestelde vragen
Hoe verschilt dit van een echt embeddingmodel zoals OpenAI’s text-embedding-3? Een embeddingmodel zet tekst om in een vector die betekenis vastlegt, waardoor het synoniemen en parafrases herkent als gelijkend, ook zonder gedeelde woorden. Deze tool doet dat niet: hij telt alleen letterlijke woordoverlap. Vandaar dat voorbeeld 2 hierboven zo laag scoort terwijl de inhoud vrijwel identiek is.
Vanaf welke score moet ik me zorgen maken over dubbele content voor SEO? De band vanaf 70% (“Hoge gelijkenis”) is het punt om serieus te nemen, zoals in voorbeeld 1 met 74%. Neem het percentage nooit als enige bewijs: lees ook de lijst met gedeelde en unieke termen om te zien of het om echte herhaling gaat of om onvermijdelijke vaktaal binnen een niche.
Vangt deze tool ook geparafraseerd plagiaat? Nee. Voorbeeld 2 laat dat expliciet zien: tekst D zegt bijna hetzelfde als tekst A, maar scoort slechts 6% omdat de woordkeuze volledig anders is. Voor het opsporen van goed herschreven plagiaat is deze methode niet geschikt.
Tellen stopwoorden mee in de score? Nee, veelvoorkomende woorden zoals lidwoorden en voorzetsels worden er vooraf uitgefilterd, samen met woorden van één letter. Alleen de betekenisdragende woorden bepalen de uiteindelijke cosinusgelijkenis.
Wordt mijn tekst naar een server gestuurd? Nee. De hele berekening draait client-side in je browser. Er wordt niets opgeslagen of verzonden, ook niet wanneer je de tool hierboven in dit artikel gebruikt.
Kan ik mijn ingevoerde teksten delen via een link? In dit artikel niet: de widget hierboven schrijft niet naar de URL van deze pagina. Open de volledige toolpagina als je een link wilt met je teksten al ingevuld, dat werkt alleen op de eigen pagina van de tool.