Wordcloud n-grams

2018-06-19

Wordclouds zijn in veel gevallen handig om snel een indruk te krijgen van veelgebruikte woorden in lange teksten. Dit kan dus ook gebruikt worden om logfiles, feedback van websites en/of klantklachten te analyseren. In veel gevallen zegt een wordcloud met enkele woorden al genoeg, maar het is vaak interessant om te kijken naar meerdere woorden ipv een enkel woord. We spreken dan over zogenaamde n-grams, een reekds van n woorden achter elkaar. Bij een wordcloud van 1 woord spreek je dan van een n-gram waarbij n=1, ook wel een Unigram genoemt. Als je naar 2 woorden gaat kijken noem je dit Bigram, 3 Trigram, etc..

Bij veel van onze klanten kan het analyseren van logfiles of klantklachten beginnen met een wordcloud, het geeft je een eerste indruk van veelgebruikte woorden. Dit kunnen dus in logfiles waar errors in staan al veel voorkomende errors zijn. In klantklachten kan dit een veelvoorkomend probleem zijn wat klanten tegen komen in de praktijk, erg handig dus om snel inzicht in tekrijgen. Maar nu is de grote vraag, hoe maken we dit nu?

Je kunt wordclouds in Python en R prima maken, ik heb zelf voor R gekozen. Omdat ik niet de data van klant kan/mag gebruiken zal ik gebruik maken van teksten van shakespeare, die online te vinden zijn. Laten we beginnen:

In shakespeare zitten nu 120.000+ regels met teksten van Shakespeare. We gaan verder:

Dit kunnen we vervolgens plotten in een wordcloud:

Resultaat:

 

Nu hebben we 1 woord in onze aantallen meegenomen, als we nu bijvoorbeeld 2 woorden willen moeten we een paar dingen veranderen:

In plaats van Corpus(..) gebruiken we nu VCorpus, anders krijg je alsnog enkele woorden terug in je wordcloud. Nog een wijziging:

Je ziet hierboven dat we met het package RWeka een Bigram tokenizer kunnen maken, speel er zelf maar eens mee, want als je bij min en max andere waarden in geeft, kun je ook Trigrams en verder maken (let wel op, want het kan langer duren en meer rekenkracht kosten). Ik heb voor mijn eigen rekentijd, alleen de eerste 3000 regels gebruikt van de data, daarom zie je lagere aantallen. De rest van de code kan hetzelfde blijven als daarboven, nu krijg je als resultaat:

 

Nogmaals, het kan erg handig zijn om voor verschillende datasets een eerste indruk te krijgen, probeer het maar eens uit! Happy coding!


Bekijk alle posts van Peter