public ActionResult Download()
        {
            try
            {
                ArticleGradingInfo articleGradingInfo = TempData["articleInfo"] as ArticleGradingInfo;

                string name, path;
                name = articleGradingInfo.Name == null ? "Article" : articleGradingInfo.Name;
                path = HttpContext.Server.MapPath(string.Format(@"~\{0}.docx", name));

                DocX doc = CreateDocX(articleGradingInfo, path);

                FileStream   docFile   = new FileStream(path, FileMode.Open, FileAccess.Read);
                MemoryStream docMemory = new MemoryStream();
                docFile.Seek(0, SeekOrigin.Begin);
                docFile.CopyTo(docMemory);
                docFile.Close();

                System.IO.File.Delete(path);

                return(File(docMemory.ToArray(), "application/vnd.openxmlformats-officedocument.wordprocessingml.document", string.Format("{0} - Result.docx", name)));
            }
            catch (Exception e)
            {
                Logger.Instance.WriteLine("An error occurred while trying to download Article {0}", e.Message);
                return(RedirectToAction("Error", "HomeController"));
            }
        }
        private DocX CreateDocX(ArticleGradingInfo i_ArticleGradingInfo, string i_Path)
        {
            using (DocX doc = DocX.Create(i_Path))
            {
                Paragraph stat = doc.InsertParagraph("Result:").Font(new System.Drawing.FontFamily("Arial")).FontSize(15D).Bold().UnderlineStyle(UnderlineStyle.singleLine);
                stat.AppendLine(string.Format("Common: {0}%, {1}  \nNormal: {2}%, {3} \nRare: {4}%, {5} \nScore: {6} \nNumber Of Words: {7}\n\n\n"
                                              , Math.Round((double)i_ArticleGradingInfo.CommonWords.Count / i_ArticleGradingInfo.CleanedWords.Count * 100), i_ArticleGradingInfo.CommonWords.Count
                                              , Math.Round((double)i_ArticleGradingInfo.NormalWords.Count / i_ArticleGradingInfo.CleanedWords.Count * 100), i_ArticleGradingInfo.NormalWords.Count
                                              , Math.Round((double)i_ArticleGradingInfo.RareWords.Count / i_ArticleGradingInfo.CleanedWords.Count * 100), i_ArticleGradingInfo.RareWords.Count
                                              , Math.Round(100 - ((i_ArticleGradingInfo.NormalWords.Count * 0.5f + i_ArticleGradingInfo.RareWords.Count) * 100 / i_ArticleGradingInfo.CleanedWords.Count)).ToString()
                                              , i_ArticleGradingInfo.CleanedWords.Count.ToString()));

                stat.FontSize(13D);

                Paragraph wordParagraph = doc.InsertParagraph();

                foreach (string word in i_ArticleGradingInfo.Words)
                {
                    string cleanedWord = TextGrading.CleanWord(word).ToLower();

                    wordParagraph.Append(word);
                    wordParagraph.Font(new System.Drawing.FontFamily("Arial"));
                    wordParagraph.FontSize(12D);
                    wordParagraph.Bold();

                    if (i_ArticleGradingInfo.RareWords.Contains(cleanedWord))
                    {
                        wordParagraph.Color(System.Drawing.Color.Red);
                    }
                    else if (i_ArticleGradingInfo.NormalWords.Contains(cleanedWord))
                    {
                        wordParagraph.Color(System.Drawing.Color.Orange);
                    }
                    else
                    {
                        wordParagraph.Color(System.Drawing.Color.Black);
                    }
                }

                doc.Save();

                return(doc);
            }
        }
        public ActionResult Index(string ContentTA, HttpPostedFileBase ArticleFU)
        {
            ArticleGradingInfo articleGradingInfo = null;
            bool   fileCantBeGraded = false;
            string text             = null;

            if (ArticleFU != null)
            {
                if (ArticleFU.VerifyArticleType())
                {
                    try
                    {
                        string extension = ArticleFU.FileName.ToLower().Substring(ArticleFU.FileName.LastIndexOf('.') + 1);
                        text = TextGrading.LoadTextFromFile(ArticleFU.InputStream, extension);
                        articleGradingInfo      = TextGrading.AnalyzeSingleText(text);
                        articleGradingInfo.Name = ArticleFU.FileName.Substring(0, ArticleFU.FileName.LastIndexOf('.'));

                        Logger.UpdateNumberOfUses(1);
                    }
                    catch
                    {
                        fileCantBeGraded = true;
                    }
                }
                else
                {
                    fileCantBeGraded = true;
                }
            }
            else
            {
                articleGradingInfo = TextGrading.AnalyzeSingleText(ContentTA);
                Logger.UpdateNumberOfUses(1);
            }


            if (fileCantBeGraded)
            {
                articleGradingInfo       = new ArticleGradingInfo();
                articleGradingInfo.Error = "File can not be graded.";
            }

            return(View(articleGradingInfo));
        }
        private List <ArticleGradingInfo> getArticlesGradingInfoList(IEnumerable <HttpPostedFileBase> i_Articles)
        {
            List <ArticleGradingInfo> articlesGradingInfo = new List <ArticleGradingInfo>();
            string text = null, name;

            if (i_Articles != null)
            {
                foreach (var article in i_Articles)
                {
                    ArticleGradingInfo currentArticleInfo = null;

                    if (article.VerifyArticleType())
                    {
                        try
                        {
                            string extension = article.FileName.ToLower().Substring(article.FileName.LastIndexOf('.') + 1);
                            name = article.FileName.ToLower().Substring(0, article.FileName.LastIndexOf('.'));
                            text = TextGrading.LoadTextFromFile(article.InputStream, extension);

                            currentArticleInfo      = TextGrading.AnalyzeSingleText(text);
                            currentArticleInfo.Name = name + extension;
                        }
                        catch
                        {
                            articlesGradingInfo.Clear();
                            break;
                        }
                    }
                    else
                    {
                        articlesGradingInfo.Clear();
                        break;
                    }

                    if (!string.IsNullOrEmpty(text) && currentArticleInfo.Error == null)
                    {
                        articlesGradingInfo.Add(currentArticleInfo);
                    }
                }
            }

            return(articlesGradingInfo);
        }
        public static ArticleGradingInfo AnalyzeSingleText(string i_Text)
        {
            ArticleGradingInfo articleGradingInfo;

            if (string.IsNullOrWhiteSpace(i_Text))
            {
                articleGradingInfo       = new ArticleGradingInfo();
                articleGradingInfo.Error = "Article is empty.";
            }
            else
            {
                if (!m_WordsLoaded)
                {
                    loadWords();
                }

                articleGradingInfo = analyzeArticle(i_Text);
            }

            return(articleGradingInfo);
        }
        private static ArticleGradingInfo analyzeArticle(string i_Article)
        {
            List <string> cleanedWords = getCleanedWords(i_Article);

            ArticleGradingInfo articleGradingInfo = new ArticleGradingInfo();

            articleGradingInfo.Content = i_Article;

            articleGradingInfo.CommonWords = getWordsInRange(cleanedWords, m_Common, int.MaxValue);
            articleGradingInfo.NormalWords = getWordsInRange(cleanedWords, m_Normal, m_Common - 1);
            articleGradingInfo.RareWords   = getWordsInRange(cleanedWords, 0, m_Normal - 1);

            foreach (string splitOption in sr_SplitOptions)
            {
                i_Article = i_Article.Replace(splitOption, "\0" + splitOption + "\0");
            }

            articleGradingInfo.CleanedWords = cleanedWords;
            articleGradingInfo.Words        = i_Article.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);

            articleGradingInfo.Score = cleanedWords.Count;

            return(articleGradingInfo);
        }