Textanalys med Azure och SSIS

23 januari 2018

Textanalys med AZURE och SSIS – Enklare än du tror

I denna bloggpost ska vi gå igenom hur man snabbt och relativt enkelt kan integrera en av de nya avancerade analysfunktionerna som nu finns tillgängliga i Azure i sitt existerande data warehouse. Vi kommer göra det genom att visa hur man kan få in text- och sentimentanalys i sitt SSIS-flöde. Detta kan t.ex. användas för att förstå om mail eller feedback vi fått från kunder är negativ eller positiv.

Då sätter vi igång! Vi kommer skapa denna lösning i två steg, först kommer vi skapa upp tjänsten vi behöver i Azure och som steg två kommer vi sedan skapa upp ett SSIS flöde med C# kod för att använda Azure-tjänsten.

Azure

Till att börja med ska vi skapa upp en tjänst i Azure som kommer fungera som motor i textanalysen.

  1. Första steget är att logga in på sitt Azure konto och klicka på + Ny

  1. Sedan söker man upp Text Analytics API och i efterföljande meny klickar man på Skapa

 

  1. På nästa sida namnger och väljer man prisnivå och betalningsalternativ på sin tjänst i Azure. Vi väljer nivån F0 vilken är gratis på upp till 5000 förfrågningar per 30 dagar. Dvs vi kommer kunna analysera 5000 texter under 30 dagar. Efter detta är det bara att klicka på Skapa

När tjänsten skapats kan man gå in på dess sida, här kan man följa upp hur många anrop som kommit in och även komma åt de nycklar vi behöver för att kunna anropa vår nya analystjänst. I exemplet nedan väljer vi KEY 1 och klickar på kopiera knappen, denna nyckel kommer vi sedan använda i vår kod.

Nu när vi har vår analystjänst och accessnyckel kan vi ta nästa steg vilket är att implementera det i vårat SSIS-flöde.

SSIS

Inputen till vårt SSIS-flöde kommer för enkelhetens skull vara ett Excel-ark med några enkla texter samt en kolumn som berättar vilket språk det är. Det finns inom Azure även tjänster för att analysera och ta reda på vilket språk en text är skriven på, men det sparar vi till ett annat blogginlägg.

Det sista förberedande steget är nu att vi behöver installera några så kallade DLL:er för att koden i SSIS ska kunna kommunicera med Azure. Här finns en hel del utmaningar i SSIS, men för detta blogginlägg tar jag en genväg och väljer att lägga in DLL:erna direkt i min Visualstudio och SSIS-miljö, i mitt fall C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\SSIS\140\Binn.

Filerna hittar du att ladda ned som en zip här.

Nu är vi tillslut redo för visual studio. Vi börjar genom att skapa ett data flow där vi lägger till vårat excelark som en källa.

När vi gjort det lägger vi till en scriptkomponent av typen Transformation enligt nedan.

Med detta gjort kan vi nu ställa in vilken input respektive output vår komponent kommer att ha. Som input väljer vi alla kolumnerna i vårt excelark.

Som output skapar vi en ny kolumn som vi kallar Sentiment av typen Decimal.

Nästa steg är att gå in i själva scriptet och lägga till koden för att använda sig av Azure-tjänsten.

Väl inne i kodfönstret börjar vi med att lägga till de DLLer vi tidigare installerat som referenser i vår lösning.

Enklast gör man det genom att klicka Add Reference -> Browse -> Browse… och pekar sedan ut våra fyra DLLer enligt nedan och klickar Add.

Vi borde nu se att de dyker upp enligt nedan och vi är redo för lite kod.

I vår kod behöver vi nu lägga till följande kod i funktionen ProcessInputRow och byta ut ENTER KEY HERE mot den nyckel vi tidigare fick fram när vi skapade vår Azure-tjänst.

I koden nedan kopplar vi i det gröna området upp oss till Azure. I det gula området skapar vi en förfrågan till Azure med hjälp av det data SSIS läser från Excel. För att till sist i det gråa området tolka resultatet och skicka tillbaka det till SSIS i fältet Sentiment.

 

När vi nu kör flödet kan vi se att våra rader skickas genom koden och att texten får fältet Sentiment ifyllt. Sentiment kolumnen ges på en skala från 0 – mycket negativt till 1 mycket positivt.

 

Och som vi kan se ovan får ”Sparks är ett fantastiskt gäng!” ett betydligt högre sentiment, 77,8%, än ”SL fungerar inte alls bra när det snöar”, 40,6%.

Hoppas detta visat hur det hyfsat enkelt kan gå att integrera avancerade analysfunktioner från Azure i ett redan etablerat warehouse byggt med SSIS och SQL Server. Nu är det upp dill dig att hitta bra användningsområden.

Som vanligt är det bara höra av er till oss på Sparks om det finns några frågor eller vill veta hur just ni kan applicera detta hos er. Hör av dig till mig om du har specifika frågor om det här inlägget.