/// <summary>
        /// Analyse the connection to get the definition back
        /// </summary>
        /// <param name="request">The analysis request paramaters</param>
        /// <returns>The data item definition derived from the connection and object</returns>
        public override DataItemDefinition Analyse(AnalyseRequest <object> request)
        {
            DataItemDefinition result = new DataItemDefinition(); // Empty Response By Default

            // Are we connected and have an object name?
            if ((this.ObjectName ?? String.Empty) != String.Empty &&
                this.Connected)
            {
                // Set up the command to run and select all columns from the object
                using (SqlCommand command =
                           new SqlCommand($"select top {request.SampleSize.ToString()} * from {this.ObjectName}", this.sqlConnection))
                {
                    // Run the command
                    using (SqlDataReader dataReader = command.ExecuteReader())
                    {
                        DataTable tempTable = new DataTable(); // Create a temporary table
                        tempTable.Load(dataReader);            // Run the data reader to load the results
                        result.FromDataTable(tempTable);       // Tell the definition to load itself from the data table provided

                        // Clean up
                        tempTable = null;
                    }
                }
            }

            // Send the result back
            return(result);
        }
示例#2
0
        /// <summary>
        /// Look at the file and try and represent the file as a dataset without a definition
        /// </summary>
        /// <returns>A representation of the data</returns>
        public override DataItemDefinition Analyse(AnalyseRequest <Object> request)
        {
            // Create a blank result data table
            DataItemDefinition result = new DataItemDefinition()
            {
            };
            String rawData = ""; // The data which ultimately will be read from

            // Check to see what can of analysis is being requested
            if ((request.Connection?.ConnectionString ?? String.Empty) != String.Empty)
            {
                // Get the stream of data from the raw file
                rawData = File.ReadAllText(request.Connection.ConnectionStringProcessed);
            }
            else
            {
                // No connection was provided so use the raw data provided instead
                switch (request.Data.GetType().ToShortName())
                {
                case "string":

                    rawData = (String)request.Data;

                    break;

                default:

                    ((Stream)request.Data).Position = 0;     // Reset the stream position

                    // Read the data from the stream
                    StreamReader reader = new StreamReader((Stream)request.Data);
                    rawData = reader.ReadToEnd();

                    // Reset the position again so that it can be re-used
                    ((Stream)request.Data).Position = 0;

                    break;
                }
            }

            // Pass down to the analyse text core function
            AnalyseRequest <String> analyseTextRequest =
                new AnalyseRequest <String>()
            {
                Data       = rawData,
                Connection = request.Connection
            };

            result = DelimitedFileHelper.AnalyseText(analyseTextRequest);

            base.MarkLastAction(); // Tell the provider base class that it did something

            // Send the analysis data table back
            return(result);
        }
示例#3
0
        /// <summary>
        /// Analyses input submitted by user.
        /// </summary>
        /// <param name="request">Analyse request.</param>
        /// <returns>Returns analyse result.</returns>
        public async Task <AnalysisResult> Analyse(AnalyseRequest request)
        {
            var result = new AnalysisResult(request);

            if (request.IsCalculateOccurrencesOfEachWords)
            {
                var splittedString = await SplitWords(request.Input, request.IsRemoveStopWords);

                result.WordsAndCount = await CalculateOccurrences(splittedString, splittedString.Distinct().ToList());
            }

            return(result);
        }
示例#4
0
        /// <summary>
        /// Analyses input from user.
        /// </summary>
        /// <param name="request">Analyse request.</param>
        /// <returns>Analysis results.</returns>
        public async Task <ActionResult> Analyse(AnalyseRequest request)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.Error = "Text or URL is required!";
                return(View("Index", request));
            }

            var isInputUrl = Uri.IsWellFormedUriString(request.Input, UriKind.Absolute);
            var result     = new AnalysisResult(request);

            if (!new bool[]
            {
                request.IsCalculateKeywordsInMetaTags,
                request.IsCalculateNumberOfExternalLinks,
                request.IsCalculateOccurrencesOfEachWords
            }.Any(x => x))
            {
                ViewBag.Warning = "No Analysis Result Type selected!";
                return(View(result));
            }

            if (!isInputUrl && !request.IsCalculateOccurrencesOfEachWords)
            {
                ViewBag.Warning = "'Calculate Occurrences of Each Words?' must be checked when analysing words.";
                return(View(result));
            }

            try
            {
                ISeoAnalyser analyser = isInputUrl ? new HtmlAnalyser(new LinkAnalyser(), new MetaAnalyser(), new WordAnalyser()) as ISeoAnalyser : new WordAnalyser() as ISeoAnalyser;
                result = await analyser.Analyse(request);
            }
            catch (HttpRequestException)
            {
                ViewBag.Error = $"{request.Input} is invalid!";
            }
            catch (Exception)
            {
                ViewBag.Error = $"Unknown error.";
            }

            return(View(result));
        }
示例#5
0
        public void Analyse_BigData_RowCount()
        {
            // Arrange
            TestHelper testHelper = new TestHelper();
            Stream     file       = testHelper.GetResourceStream(
                TestHelper.TestFile_BigFileSalesRecords);
            DataConnection        connection = testHelper.TestConnection();
            DelimitedFileProvider provider   = new DelimitedFileProvider();

            // Act
            AnalyseRequest <Object> analysisRequest = new AnalyseRequest <Object>()
            {
                Data       = file,
                Connection = connection
            };
            DataItemDefinition definition = provider.Analyse(analysisRequest);

            provider.Connect(definition, analysisRequest.Connection, file);
            DataTable data = provider.Read("");

            // Assert
            Assert.Equal(5000, data.Rows.Count);
        }
示例#6
0
        /// <summary>
        /// Fetch and analyses web page from uri submitted by user.
        /// </summary>
        /// <param name="request">Analyse request.</param>
        /// <returns>Returns analyse results.</returns>
        public async Task <AnalysisResult> Analyse(AnalyseRequest request)
        {
            var result   = new AnalysisResult(request);
            var response = await httpClient.GetAsync(request.Input);

            if (response.IsSuccessStatusCode)
            {
                List <string> splittedString = new List <string>();
                var           html           = await response.Content.ReadAsStringAsync();

                if (request.IsCalculateOccurrencesOfEachWords || request.IsCalculateKeywordsInMetaTags)
                {
                    var doc = new HtmlDocument();
                    doc.LoadHtml(html);
                    splittedString = await wordAnalyser.SplitWords(doc.DocumentNode.SelectNodes("//body")?.FirstOrDefault()?.InnerText ?? "", request.IsRemoveStopWords);
                }

                if (request.IsCalculateOccurrencesOfEachWords)
                {
                    result.WordsAndCount = await wordAnalyser.CalculateOccurrences(splittedString, splittedString.Distinct().ToList());
                }

                if (request.IsCalculateKeywordsInMetaTags)
                {
                    var wordsInMetaTags = await metaAnalyser.GetMetaData(html);

                    result.WordsInMetaTagsAndCount = await wordAnalyser.CalculateOccurrences(splittedString, wordsInMetaTags);
                }

                if (request.IsCalculateNumberOfExternalLinks)
                {
                    result.ExternalLinks = await linkAnalyser.GetExternalLinks(html);
                }
            }

            return(result);
        }
 /// <summary>
 /// Analyse the connection to build a data item definition
 /// </summary>
 /// <param name="request">The parameters of the connection request</param>
 /// <returns>A data item definition based on the requested connection</returns>
 public virtual DataItemDefinition Analyse(AnalyseRequest <Object> request)
 => throw new NotImplementedException();