예제 #1
0
        public IActionResult redoElastic()
        {
            ElasticManager em = new ElasticManager();

            em.fill();
            return(Content("redone"));
        }
예제 #2
0
        public IActionResult Search(string search)
        {
            ElasticManager em      = new ElasticManager();
            var            results = em.search(search);

            return(View(results));
        }
        public IActionResult docdatasave(Document data)
        {
            using (var db = new ClassroomContext())
            {
                db.Update(data);
                db.SaveChanges();
                ElasticManager em = new ElasticManager();
                em.addDocument(data);
            }

            return(Content("success"));
        }
예제 #4
0
 /// <summary>
 /// Initializating managers and uOw
 /// </summary>
 public TaskExecuter()
 {
     uOw               = new UnitOfWork();
     elasticuOw        = new ElasticUnitOfWork();
     parsermanager     = new ParserTaskManager(uOw);
     propmanager       = new PropertyManager(uOw);
     goodManager       = new GoodManager(uOw);
     urlManager        = new URLManager(uOw);
     htmlValidator     = new HtmlValidator();
     priceManager      = new PriceManager(uOw);
     elasticManager    = new ElasticManager(elasticuOw);
     goodwizardManager = new GoodDatabasesWizard(elasticuOw, uOw);
     taskinfoManager   = new ExecuteManager(uOw);
 }
        public bool MainRoutine()
        {
            try
            {
                //Load File System Service
                FileSystemManager fileMgr = new FileSystemManager();

                NewElasticService.ServiceWCFClient svc = new ServiceWCFClient();
                bool delete = svc.deleteAllRecommendedJob();

                JobManager jobMgr = new JobManager();
                String[] job_list = jobMgr.selectExpressionNames(); //job_names
                double[] X = jobMgr.selectExpressionDifficulty(); //X
                double[,] new_X = new double[X.Length, 1];
                for (int i = 0; i < X.Length; i++)
                {
                    new_X[i, 0] = X[i];
                }

                //User Profile (just the user ID, I still need the user self rating)
                RecruiteeManager recMgr = new RecruiteeManager();
                String[] recruitee_names = recMgr.selectRecruiteeNames();
                double[] recruitee_skill = recMgr.selectRecruiteeSkills();
                UserProfile[] users_profile = new UserProfile[recruitee_skill.Length];
                for (int i = 0; i < recruitee_skill.Length; i++)
                {
                    users_profile[i] = new UserProfile("", 0);
                    users_profile[i].UserID = recruitee_names[i];
                    users_profile[i].UserRating = recruitee_skill[i];
                }

                //new_Y
                ElasticManager elaMgr = new ElasticManager();
                double[,] Y = elaMgr.selectRatings(job_list, users_profile);

                /////// WRITING VARIABLES IN FILE ////////////
                new Thread(() =>
                {
                    Thread.CurrentThread.IsBackground = true;
                    ////used to insert recommended jobs for a user in the database
                    fileMgr.writeFiles(job_list, new_X, users_profile, Y);
                }).Start();

                //Object to Hold Task Parameters
                TaskDimensions task = new TaskDimensions();
                task.num_features = new_X.GetLength(1); //1 is the number of columns
                task.num_jobs_init = job_list.Length;
                task.num_users_init = recruitee_names.Length;

                //User number to start proccessing
                int user_number = 1;

                //Creating a variable to write in a File the job recommendations and comparisons
                //Load File Writer
                StreamWriter writeTextResult = fileMgr.getResultStreamWriter();
                StreamWriter writeTextAverages = fileMgr.getAverageStreamWriter();
                StreamWriter writeText = fileMgr.getIdandAvgStreamWriter();
                StreamWriter writeTextDiff = fileMgr.getDifficultyStreamWriter();

                double[] users_calculated_raitings = new double[task.num_users_init];

                double total_rating_avg_system = 0;
                double total_similarity_avg_system = 0;
                double total_inaccuracy_system = 0;

                MatlabManager matlabMgr = new MatlabManager();

                while (user_number <= task.num_users_init)
                {
                    double[,] my_ratings = new double[task.num_jobs_init, 1];
                    double[,] new_Y = new double[task.num_jobs_init, task.num_users_init - 1];
                    double[,] R = new double[task.num_jobs_init, task.num_users_init - 1];

                    for (int i = 0; i < job_list.Length; i++)
                    {
                        int k = 0;
                        for (int n = 0; n < users_profile.Length; n++)
                        {
                            if (n != (user_number - 1))
                            {
                                new_Y[i, k] = Y[i, n];
                                if (Y[i, n] != 0)
                                    R[i, k] = 1;
                                else
                                    R[i, k] = 0;
                                k++;
                            }
                            else
                                my_ratings[i, 0] = Y[i, n];
                        }
                    }

                    //Creating a MatLab reference to execute the recommended job script
                    object[] res = matlabMgr.executeFilter(task, job_list, Directory.GetCurrentDirectory() + DirectoryPaths.MATLAB, my_ratings, new_Y, R, new_X);

                    //Each time creates a  to be used to write the recommended jobs in a file
                    List<TopJobData> mylist = fileMgr.writeValuesToFile(writeTextResult, res, job_list, user_number, new_X);

                    //Calculate Averages for Jobs for a User
                    DataResult avgs = new DataResult(mylist, mylist.Count, users_profile[user_number - 1]);
                    avgs.AverageForEachJob();
                    fileMgr.writeAveragesToFile(avgs, writeTextAverages, users_profile[user_number - 1]);

                    total_rating_avg_system += avgs.Rating_total_avg;
                    total_similarity_avg_system += avgs.Percentage_total_avg;
                    total_inaccuracy_system += avgs.Self_inaccuracy;
                    //adding the list at the Dictionary for each user

                    //ID and AVGs file
                    writeText.WriteLine(users_profile[user_number - 1].UserID + "\t" + avgs.Rating_total_avg);

                    users_calculated_raitings[user_number - 1] = avgs.Rating_total_avg;

                    //writing in the difficulty file
                    fileMgr.writeDifficultyToFile(writeTextDiff, avgs);

                    //used to insert recommended jobs for a user in the database
                    new Thread(() =>
                    {
                        Thread.CurrentThread.IsBackground = true;
                        ////used to insert recommended jobs for a user in the database
                        bool result = elaMgr.insertRecommenderJob(avgs);
                    }).Start();

                    user_number++;
                }

                total_rating_avg_system /= task.num_users_init;
                total_similarity_avg_system /= task.num_users_init;
                total_inaccuracy_system /= task.num_users_init;
                //writing some more global information
                fileMgr.writeGlobalAveragesInformation(total_rating_avg_system, total_similarity_avg_system, total_inaccuracy_system,
                    task, writeTextAverages, users_profile, users_calculated_raitings);

                //closing the three files
                writeText.Close();
                writeTextResult.Close();
                writeTextAverages.Close();
                writeTextDiff.Close();

                new Thread(() =>
                {
                    Thread.CurrentThread.IsBackground = true;
                    ////used to insert recommended jobs for a user in the database
                    bool result = elaMgr.updateRanking(DirectoryPaths.FILE_ID_AVG);
                }).Start();

                Console.WriteLine("DONE");
                //Wait until fisnih
                Console.ReadLine();

                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        public IActionResult UploadDocuments(IFormFile file)
        {
            Stream   fileBuffer = file.OpenReadStream();
            var      db         = new ClassroomContext();
            Document doc        = new Document();

            doc.KeyName  = WebUtility.UrlEncode(file.FileName);
            doc.FileName = file.FileName;

            if (file.ContentType.Contains("image"))
            {
                Stream fileBuffer2 = new MemoryStream();
                fileBuffer.CopyTo(fileBuffer2);
                fileBuffer.Seek(0, SeekOrigin.Begin);
                IReadOnlyList <EntityAnnotation> resultText = GoogleMLConnector.ReadImageText(fileBuffer);

                fileBuffer = fileBuffer2;
                fileBuffer.Seek(0, SeekOrigin.Begin);

                IReadOnlyList <EntityAnnotation> resultLabels = GoogleMLConnector.LabelImage(fileBuffer);
                string lang    = "";
                string content = "";
                foreach (var thing in resultText)
                {
                    if (thing.Locale != null)
                    {
                        lang = thing.Locale;
                    }
                    content += thing.Description;
                }

                doc.Content = content;
                content     = "";

                foreach (var thing in resultLabels)
                {
                    content += thing.Description + ", ";
                }
                doc.GoogleTags = content;

                fileBuffer = fileBuffer2;
            }
            else if (textValues.Contains <string>(file.ContentType))
            {
                StreamReader reader = new StreamReader(fileBuffer);
                doc.Content = reader.ReadToEnd();
            }
            else if (file.ContentType.ToLower().Contains("pdf"))
            {
                string           cont               = "";
                PdfFixedDocument pdfdoc             = new PdfFixedDocument(fileBuffer);
                List <PdfVisualImageCollection> img = new List <PdfVisualImageCollection>();
                foreach (PdfPage page in pdfdoc.Pages)
                {
                    PdfContentExtractor ce = new PdfContentExtractor(page);
                    cont += ce.ExtractText();
                    //img.Add(ce.ExtractImages(true));
                }
                doc.Content = cont;
            }
            else
            {
                StreamReader reader = new StreamReader(fileBuffer);
                doc.Content = reader.ReadToEnd();
            }
            var uploadResult = S3Connector.UploadObject(file.FileName, fileBuffer, WebUtility.UrlEncode(file.FileName));

            if (db.Documents.Where(x => x.KeyName == doc.KeyName).Count() == 0)
            {
                db.Documents.Add(doc);
                db.SaveChanges();
                ElasticManager em = new ElasticManager();
                em.addDocument(doc);
            }

            return(Content(doc.Id.ToString()));
        }
예제 #7
0
        public IHttpActionResult Post([FromBody] string data)
        {
            string[] values        = data.Split(',');
            var      searchword    = values[0];
            var      from          = int.Parse(values[1]);
            var      index         = values[2];
            var      searchInBooks = values[3];

            var _elastic        = new ElasticManager();
            var lemmas          = new List <Lemma>();
            var entries         = new List <Entry>();
            var accessFromLemma = new List <GetAccessData>();
            var lemmaIds        = new List <string>();
            var totalHits       = new long();
            var suggestions     = new List <string>();

            #region ---First Search---
            var lemmaResponse = _elastic.LemmaSearchByFullFormAndOrthography(searchword, from, index);
            lemmaResponse.Hits?.ForEach(x => lemmas.Add(x.Source));
            lemmas.ForEach(x => lemmaIds.Add(x.LemmaId));
            //get entries for first search
            if (lemmaResponse.Hits.Any())
            {
                var entryResponse = _elastic.EnrtrySearchInEntryByLemmaId(lemmaIds, index, searchInBooks);
                entryResponse.Hits?.ForEach(y => entries.Add(y.Source));

                totalHits = lemmaResponse.Total;
            }
            #endregion

            #region ---Second and third Search---

            else
            {
                var searchHeadWordExact = _elastic.EntrySearchByHeadWordExact(searchword, from, index, searchInBooks);
                searchHeadWordExact.Hits?.ForEach(x => entries.Add(x.Source));
                searchHeadWordExact.Hits?.ForEach(x => lemmaIds.Add(x.Source.EntryIdLemma.LemmaIdRef));

                if (!searchHeadWordExact.Hits.Any())
                {
                    //third search
                    var searchwordWild = "*" + searchword + "*";
                    //make 2 search - phrase and wildcard
                    var headWordWithPhrase   = _elastic.EntrySearchByHeadWord(searchword, from, index, searchInBooks);
                    var headWordWithWildcard = _elastic.EntrySearchByHeadWordWithWildCard(searchwordWild, from, index,
                                                                                          searchInBooks);

                    //most hits win
                    if (headWordWithPhrase?.Total < headWordWithWildcard?.Total)
                    {
                        headWordWithWildcard?.Hits?.ForEach(x => entries.Add(x.Source));
                        headWordWithWildcard?.Hits?.ForEach(x => lemmaIds.Add(x.Source.EntryIdLemma.LemmaIdRef));

                        var first = headWordWithWildcard?.Suggest?.FirstOrDefault();
                        if (first != null)
                        {
                            var options      = first.Value.Value.SelectMany(x => x.Options);
                            var suggestions2 = options?.Select(x => x.Text);

                            suggestions.AddRange(suggestions2);
                        }
                    }
                    else
                    {
                        headWordWithPhrase?.Hits?.ForEach(x => entries.Add(x.Source));
                        headWordWithPhrase?.Hits?.ForEach(x => lemmaIds.Add(x.Source.EntryIdLemma.LemmaIdRef));

                        var first = headWordWithPhrase?.Suggest?.FirstOrDefault();
                        if (first != null)
                        {
                            var options      = first.Value.Value.SelectMany(x => x.Options);
                            var suggestions2 = options?.Select(x => x.Text);

                            suggestions.AddRange(suggestions2);
                        }
                    }
                }
                //getting lemmas from Entries:
                var getLemmasFromEntries = _elastic.EnrtrySearchInLemmaByIdFromEntry(lemmaIds, index);
                getLemmasFromEntries?.Hits?.ForEach(f => lemmas.Add(f.Source));

                if (getLemmasFromEntries != null)
                {
                    totalHits = getLemmasFromEntries.Total;
                }
            }
            #endregion

            #region ----getting info from accessoryData----
            if (lemmas.Any())
            {
                foreach (var lemma in lemmas)
                {
                    var lemmaFromAccess = new GetAccessData
                    {
                        WordOtrhography = lemma.LemmaOrtography,
                        SynonymsTo      = new List <string>(),
                        StartsWith      = new List <string>(),
                        EndsWith        = new List <string>()
                    };
                    foreach (var accessData in lemma.LemmaAccessoryDatas)
                    {
                        switch (accessData.CategoryDan)
                        {
                        case "synonymer til ¤":
                            foreach (var refs in accessData.LemmaAccessDataReferencesRefs)
                            {
                                lemmaFromAccess.SynonymsTo.Add(refs.LemmaRef + ", " + refs.LemmaPos);
                            }
                            break;

                        case "ord der begynder med ¤":
                            foreach (var refs in accessData.LemmaAccessDataReferencesRefs)
                            {
                                lemmaFromAccess.StartsWith.Add(refs.LemmaRef + ", " + refs.LemmaPos);
                            }
                            break;

                        case "ord der ender på ¤":
                            foreach (var refs in accessData.LemmaAccessDataReferencesRefs)
                            {
                                lemmaFromAccess.EndsWith.Add(refs.LemmaRef + ", " + refs.LemmaPos);
                            }
                            break;

                        default:
                            Console.WriteLine("No AccessoryData found to " + lemma.LemmaOrtography);
                            break;
                        }
                    }
                    accessFromLemma.Add(lemmaFromAccess);
                }
            }
            #endregion


            //set search response
            var searchResponse = new SearchResponse
            {
                Entries        = entries,
                Lemmas         = lemmas,
                GetAccessDatas = accessFromLemma,
                TotalHits      = totalHits,
                Suggestions    = suggestions
            };

            return(Ok(searchResponse));
        }
        public bool MainRoutine()
        {
            try
            {

                //Object to Hold Task Parameters
                TaskDimensions task = new TaskDimensions();

                //User number to start proccessing
                int user_number = 1;

                //Load File System Service
                FileSystemManager fileMgr = new FileSystemManager();

                //Method call to get the number of jobs and users from the file Y
                fileMgr.detectSizeOfJobsColumns(task, Directory.GetCurrentDirectory() + DirectoryPaths.Y);

                //Method call to get the number of features from the file X, and allocating the X matrix
                double[,] X = fileMgr.getNumberOfFeaturesX(Directory.GetCurrentDirectory() + DirectoryPaths.X, task);
                fileMgr.readFeaturesX(X, Directory.GetCurrentDirectory() + DirectoryPaths.X, task);

                //Method call to get the jobs names
                String[] job_list = fileMgr.readJobNames(Directory.GetCurrentDirectory() + DirectoryPaths.EXPRESSIONS, task);

                //method that return the users profile
                UserProfile[] users_profile = fileMgr.readUserProfile(Directory.GetCurrentDirectory() + DirectoryPaths.USER_TABLE, task);

                //Creating a variable to write in a File the job recommendations and comparisons
                //Load File Writer
                StreamWriter writeTextResult = fileMgr.getResultStreamWriter();
                StreamWriter writeTextAverages = fileMgr.getAverageStreamWriter();
                StreamWriter writeText = fileMgr.getIdandAvgStreamWriter();
                StreamWriter writeTextDiff = fileMgr.getDifficultyStreamWriter();

                double[] users_calculated_raitings = new double[task.num_users_init];

                double total_rating_avg_system = 0;
                double total_similarity_avg_system = 0;
                double total_inaccuracy_system = 0;

                ElasticManager elaMgr = new ElasticManager();

                while (user_number <= task.num_users_init)
                {
                    // job rating file for a user
                    double[,] my_ratings = new double[task.num_jobs_init, 1];

                    //Now we read R and Y from theirs files (-1 because I will remove the chosen user from the matrixes)
                    double[,] Y = fileMgr.readTrainingY(Directory.GetCurrentDirectory() + DirectoryPaths.Y, task, my_ratings, user_number);
                    double[,] R = fileMgr.readTrainingR(Directory.GetCurrentDirectory() + DirectoryPaths.R, task, user_number);

                    //Creating a MatLab reference to execute the recommended job script
                    MatlabManager matlabMgr = new MatlabManager();
                    object[] res = matlabMgr.executeFilter(task, job_list, Directory.GetCurrentDirectory() + DirectoryPaths.MATLAB, my_ratings, Y, R, X);

                    //Each time creates a  to be used to write the recommended jobs in a file
                    List<TopJobData> mylist = fileMgr.writeValuesToFile(writeTextResult, res, job_list, user_number, X);

                    //Calculate Averages for Jobs for a User
                    DataResult avgs = new DataResult(mylist, mylist.Count, users_profile[user_number - 1]);
                    avgs.AverageForEachJob();
                    fileMgr.writeAveragesToFile(avgs, writeTextAverages, users_profile[user_number - 1]);

                    total_rating_avg_system += avgs.Rating_total_avg;
                    total_similarity_avg_system += avgs.Percentage_total_avg;
                    total_inaccuracy_system += avgs.Self_inaccuracy;
                    //adding the list at the Dictionary for each user

                    //ID and AVGs file
                    writeText.WriteLine(users_profile[user_number - 1].UserID + "\t" + avgs.Rating_total_avg);

                    users_calculated_raitings[user_number - 1] = avgs.Rating_total_avg;

                    //writing in the difficulty file
                    fileMgr.writeDifficultyToFile(writeTextDiff, avgs);

                    //used to inC:\Users\larissaf\Desktop\FinaleVersionCrowd\recommenderSystems\Driver.cssert recommended jobs for a user in the database

                    new Thread(() =>
                    {
                        Thread.CurrentThread.IsBackground = true;
                        ////used to insert recommended jobs for a user in the database
                        bool result = elaMgr.insertRecommenderJob(avgs);
                    }).Start();

                    user_number++;

                }

                total_rating_avg_system /= task.num_users_init;
                total_similarity_avg_system /= task.num_users_init;
                total_inaccuracy_system /= task.num_users_init;
                //writing some more global information
                fileMgr.writeGlobalAveragesInformation(total_rating_avg_system, total_similarity_avg_system, total_inaccuracy_system,
                     task, writeTextAverages, users_profile, users_calculated_raitings);

                //closing the three files
                writeText.Close();
                writeTextResult.Close();
                writeTextAverages.Close();
                writeTextDiff.Close();

                /*
                 * Used to insert rating for task performed by workers. (User interface need to be built)
                 *
                double[,] full_Y = svc.readFullY(Directory.GetCurrentDirectory() + "/files/Y.txt", task);
                elaMgr.insertRatings(job_list, users_profile, full_Y);
                */

                Console.WriteLine("DONE");
                //Wait until fisnih
                Console.ReadLine();

                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }