Text Mining met SQL Server Integration Services

2 reacties

Text Mining met SQL Server Integration Services

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:

textmining1

Term Extraction

Sleep een Nieuwe Data Flow Task naar de Control Flow:

textmining2

Voeg een Flat File Source toe aan de Data Flow:

textmining3

Open de Flat File Source en maak een Nieuwe Flat File Source Connection aan door op de knop New te klikken:

textmining4

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.

textmining6

Zet het vinkje bij ‘Column names in first data row’ uit. Er zijn geen kolomnamen in het bestand opgenomen.

textmining7

Ga naar het tabblad Columns en stel de Column delimiter in op Tab. Klik eventueel op Refresh om het voorbeeld overzicht bij te werken:

textmining8

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].

textmining9
Wijzig met de Title het datatype naar lengte 500.

textmining16
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:

textmining17

Voeg een Term extraction taak aan de data flow toe en verbind deze met de Data Conversion.

textmining10

Op de Term extraction taak en kies op het eerste tabblad Copy of FullReview als Input column:

textmining11

Op het tabblad Exclusion kan verbinding worden gemaakt met een tabel waarin termen zijn opgenomen die NIET meegenomen moeten worden in de extractie.

textmining12

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:

textmining13

Verbind nu een OLE DB destination taak met de Term Extraction taak.

textmining14

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.

textmining15

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.

textmining19

In de database tabel dbo.Terms kunnen we nagaan welke termen allemaal gevonden zijn:

textmining20

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:

textmining21

Open de term Lookup taak en leg op het eerste tabblad Reference Table de verbinding met de Term Extraction taak aangemaakte tabel: dbo.Terms

textmining22

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.

textmining23

Voeg een OLE DB Destination toe.

textmining24

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)

textmining25

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.

textmining26

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).

textmining27

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

Geef een reactie

Uw e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Fill out this field
Fill out this field
Geef alstublieft een geldig e-mailadres op.

Categorieën

Categorieën

Vragen?

Onze specialisten geven graag antwoord op uw vragen!

Geen resultaten