Het analyseren van gegevens heeft vaak als uitgangspunt dat de gegevens goed gestructureerd zijn, het liefst in een database met duidelijke relaties tussen de gegevens. In de praktijk zijn uiteraard niet alle gegevens die je nader wilt analyseren goed gestructureerd beschikbaar. Ook binnen goed gestructureerde dataverzamelingen kunnen teksten zijn opgeslagen die een speciale analyse techniek nodig hebben om de informatie die hierin opgeslagen ligt, eruit te kunnen halen. Deze technieken kunnen gegroepeerd worden onder de term ‘text mining’.
Een bekend voorbeeld van text mining is ‘sentiment analyse’ toegepast op berichten op onder meer sociale media en commentaar op blogs. Het doel is om het gevoel van ‘het publiek’ te bepalen rondom een product of dienst op basis van de gebruikte woorden. Text Mining maakt gebruikt van allerhande statistische methodes om te zoeken naar patronen en trends in de teksten.
In deze blog beschrijven we een eerste stap in de wereld van text mining met behulp van SQL Service Integration Services.
Benodigdheden
In deze blog wordt gebruikt gemaakt van SQL Server Data Tools (SSDT) 2015. Dezelfde systematiek kan zonder meer ook in SSDT 2012 en 2013 worden toegepast.
Voor deze blog maken we gebruik van een dataset van Hotel reviews uit 10 verschillende steden: Dubai, Beijing, London, New York City, New Delhi, San Francisco, Shanghai, Montreal, Las Vegas, Chicago. De dataset heeft de volgende kenmerken:
- Er zijn tussen de 80 en 700 hotels in elke stad
- Beschikbare velden zijn datum, review titel en volledige review
- Totaal aantal review: circa 259.000
Deze dataset is te downloaden via de volgende (externe) link: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/dataset/OpinRankDataset.zip
SSDT: Term Extraction & Term Lookup
In SSDT gaan we gebruik maken van de Term Extraction en Term LookUp taken. Met behulp van de Term Extraction taak worden uit de tekst unieke term gefilterd die in een database kunnen worden opgezocht. De Term LookUp taak biedt vervolgens de mogelijkheid om deze termen op te zoeken in de tekst en de frequentie te bepalen waarmee de termen voorkomen.
Beide taken zijn geoptimaliseerd voor de Engelse taal. Er wordt rekening gehouden met allerlei bijzonderheden in de grammatica die uiteraard voor het Nederlands heel anders kunnen zijn. De performance bij Nederlandse teksten is daarom niet zo goed als bij Engelse teksten, maar is zeker nog wel goed bruikbaar voor een eerste analyse.
Aanmaken Project SQL Server Integration Service
Maak een nieuw project aan in SQL Server Data Tools (SSDT) genaamd TextMining:
Term Extraction
Sleep een Nieuwe Data Flow Task naar de Control Flow:
Voeg een Flat File Source toe aan de Data Flow:
Open de Flat File Source en maak een Nieuwe Flat File Source Connection aan door op de knop New te klikken:
Browse naar de map waarin je de gedownloade dataset met hotelreviews hebt opgeslagen en kies één van de bestanden met hotelreviews.
Voor deze blog kiezen wij voor de hotelreviews van het Hilton in Chicago. Let erop dat je ervoor kiest om alle bestanden (All Files) te laten zien omdat SSDT standaard eerst alleen de .txt bestanden laat zien.
Zet het vinkje bij ‘Column names in first data row’ uit. Er zijn geen kolomnamen in het bestand opgenomen.
Ga naar het tabblad Columns en stel de Column delimiter in op Tab. Klik eventueel op Refresh om het voorbeeld overzicht bij te werken:
Ga naar het tabblad Advanced en geef de volgende kolomnamen op:
- Column0 = Date
- Coumn1 = Title
- Column2 = FullReview
- Column3 = Leeg
Wijzig bij Fullreview het datatype naar Tekst_Stream [DT_TEXT].
Wijzig met de Title het datatype naar lengte 500.
De datatypes bij de andere velden kunnen ongewijzigd blijven string [STR] met lengte 50.
Voeg een Data conversion taak toe en verbind deze met de Flat File Source.
Het Full Review veld moet worden geconverteerd omdat de Term extraction taak alleen met UniCode velden kan omgaan. Converteer de FullReview naar een Unicode Tekst Stream data veld:
Voeg een Term extraction taak aan de data flow toe en verbind deze met de Data Conversion.
Op de Term extraction taak en kies op het eerste tabblad Copy of FullReview als Input column:
Op het tabblad Exclusion kan verbinding worden gemaakt met een tabel waarin termen zijn opgenomen die NIET meegenomen moeten worden in de extractie.
In deze blog maken wij hier geen gebruik van.
Op het tabblad Advanced kunnen nog een aantal instellingen worden gedaan. Voor deze blog laten wij de standaard instellingen staan:
Verbind nu een OLE DB destination taak met de Term Extraction taak.
Voor deze blog hebben wij een Database aangemaakt SSIS_TextMining.
In deze database is een tabel aangemaakt dbo.Terms met twee kolommen:
- [Term] [nvarchar](128)
- [Score] [float]
Configureer de OLE DB Destination zo dat de Input kolommen naar de juiste kolommen in de database mappen.
Start de Dataverwerking op (F5 of Start knop). De dataverwerking leest in totaal 383 reviews uit en genereert op basis hiervan 1.351 termen en schrijft deze weg in de database.
In de database tabel dbo.Terms kunnen we nagaan welke termen allemaal gevonden zijn:
Term Lookup
Nu we een lijst met termen hebben we op basis hiervan dezelfde of andere teksten gaan onderzoeken. Hiervoor gebruikten we de Term Lookup taak.
De eerste stappen zijn het zelfde als bij de term Extraction:
- Sleep een Nieuwe Data Flow Task naar de Control Flow:
- Voeg een Flat File Source toe aan de Data Flow:
- Open de Flat File Source en voeg de eerder aangemaakte Flat File Source Connection toe
- Voeg een Data conversion taak toe en verbind deze met de Flat File Source. Converteer de FullReview naar een Unicode Tekst Stream data veld.
Voeg nu een Term Lookup taak toe:
Open de term Lookup taak en leg op het eerste tabblad Reference Table de verbinding met de Term Extraction taak aangemaakte tabel: dbo.Terms
Koppel op het tabblad term Lookup de Input kolom Copy of Full review met de kolom terms uit de tabel dbo.Terms. Vink de kolom Copy of Full Review ook aan zodat deze kolom ook meegestuurd wordt naar de output. In de tabel wordt dan niet alleen de term opgeslagen maar ook het gedeelte van de tekst waarin deze term gevonden is.
Voeg een OLE DB Destination toe.
Configureer de destination naar een tabel dbo.TermsLookUp in de SSIS_TextMining database met de volgende kolommen:
- [Term] [nvarchar](128)
- [Frequency] [int]
- [Copy of full] [nvarchar](max)
Run de dataverwerking en de 383 reviews zullen worden uitgelezen, de termen worden opgezocht en in combinatie met de review zelf weggeschreven in de database table dbo.termsLookUp.
Als je in de tabel termsLookUp kijkt vind je een overzicht van de gevonden termen en het aantal keer dat deze term in een stuk tekst gevonden is (inclusief de tekst waarin de term gevonden is).
Afsluiting
De Term extraction en Term Lookup taken in SQL Server Data Tools bieden een eerste stap in het brede vakgebied van Text Mining. Op een eenvoudige manier kunnen de belangrijkste termen die in teksten worden gebruikt worden gevonden om vervolgens nader te kunnen analyseren.
In deze blog zijn nog niet alle mogelijkheden gebruikt die SSDT biedt. Andere tools bieden nog uitgebreidere functionaliteiten om teksten te analyseren. Genoeg stof voor een volgende blog in ieder geval.
2 reacties. Leave new
Gideon,
leuke en interessante blogs.
Vooral blijven doen.
Bedankt voor jouw reactie.
En het is zeker de bedoeling om hiermee door te blijven gaan 🙂