Information Retrieval is een zeer interessante tak van sport: De kunst van het vinden van de juiste content uit een hele grote verzameling op basis van een Query/vraag. Hoe weet Google toch dat als ik artikelen over ‘apple’ zoek ik het computermerk Apple bedoel en niet zo’n stuk fruit?  

Dit begint bij het op een slimme manier indexeren van de content. In dit artikel geeft ik een ‘brute force’ voorbeeld hoe je de belangrijkste sleutelwoorden van een stuk HTML content zou kunnen bepalen.

Stap 1: Bepaal de regels die je wilt hanteren om de relevantie van het document te bepalen’
Er zijn vele theorieen hoe je het beste de relevantie kunt bepalen. Ik geef een voorbeeld van een eigen (onbewezen) eenvoudige methode:
- Ik verwijder alle HTML opmaak
- Ik verwijder alle stopwoorden (bijvoorbeeld: en, de, het, een, onze,…)
- Ik tel hoe vaak alle resterende woorden in de tekst voorkomen
- Woorden die gemarkeerd zijn (vet, header, italic) of zich in de titel bevinden tel ik meerdere keren mee.
- Ik bepaal de (gemiddelde) plaats van het woord in het document.

Ik bepaal de relevantiescore afhankelijk van het aantal keren dat een woord voorkomt, de gemiddelde plaats in het document (eerder is relevanter) en het aantal woorden in de content. Een voorbeeld hoe je de relevantiescore zou kunnen berekenen is:

Relevantiescore = ({Totaal aantal woorden} - {gemiddelde positie van het woord}) * {Aantal keren dat het woord voorkomt}

Het woord met de hoogste relevantiescore is het meest relevant.

Stap 2: Verwijder de HTML
Strip alle HTML-tags uit de HTML pagina zodat alleen de daadwerkelijke tekst overblijft. Vergeet hier niet de javascripts te verwijderen en het commentaar (tussen <!– en –>).
Er zijn verschillende methoden om dit te doen. Ik gebruik hier zelf meestal een reguliere expressie voor (Regex)

Stap 3: Extraheer de inhoud tussen ‘markerende elementen’ uit het document.
Bouw een string op met alle in de content gevonden tekst tussen ‘markerende elementen’, bijvoorbeel <b>, <h1>, <h2>, <i>, <title> achter alkaar geplakt. Begin met de meest belangrijke elementen. Ook hiervoor kun je bijvoorbeeld Reguliere expressies of X-path gebruiken.

Stap 4: Verwijder de stopwoorden
Verwijder alle stopwoorden uit de content. Voorbeelden zijn: de, het, een, onze, hebt, enz..

Stap 5: Tel de woorden
Tel hoe vaak alle woorden voorkomen en bepaal de gemiddelde woordpositie in het document (dus niet op karakterniveau). Doe dit nogmaals voor de in stap 3 gamaakte string en voeg de twee woordenlijstensamen.

Stap 6: Bepaal de relevantiescore
Bepaal de relevantiescore per woord, bijvoorbeeld:

Relevantiescore = ({Totaal aantal woorden} - {gemiddelde positie van het woord}) * {Aantal keren dat het woord voorkomt}

Stap 7: Resultaat
Ik heb een tool gemaakt waarmee je het resultaat zelf kunt uitpoberen: Word analysis tool for webcontent.
Deze tool geeft in volgorde van relevantie de 1000 meest gebruikte woorden in een HTML pagina. Zo krijg je een aardig beeld waarover het artikel gaat en zou je artikelen bijvoorbeeld kunnen categoriseren. Uiteraard is dit niet DE oplossing maar je komt al een heel eind.
Een aantal issues zijn:

  • Woorden in meervoud en enkelfout zouden moeten worden samengevoegd.
  • Veel websites hebben naast relevante content ook heel veel niet-relevante content zoals linklijsten, menus, reacties, enz. Die content zou niet moeten worden meegenomen.
  • Woorden aan het begin van tekst zijn niet altijd relevanter dan woorden aan het eind.
  • Verschillende talen
  • nog veel meer issues

Toepassing
Ik gebruik deze algorithmen op enkele van mijn websites om mijn content slim te indexeren. Ook gebruik ik deze om het hoofdonderwerp van een webpagina te bepalen en deze beter uit te lichten. Ik hoop hiermee hogere relevantiescores te behalen zodra men zoekt op deze woorden in de zoekmachines. Een SEO techniek dus.

Conclusie
Met een vrij gemakkelijk algorithe kan HTML content worden ge-indexeerd zodat deze index kan worden gebruikt voor information retrieval.