Как использовать байесовский фильтр спама в C # Outlook Add-in - PullRequest
0 голосов
/ 12 февраля 2019

Я новичок, когда дело доходит до надстроек C # и Outlook, намного меньше байесовской фильтрации спама.Я создаю надстройку Outlook для обнаружения спам-писем или фишинговых писем для домашнего задания, и у меня есть меньше недели.Я нашел несколько классов с открытым исходным кодом, но не совсем уверен, как реализовать или интегрировать.Был бы признателен за любую форму помощи.Спасибо!

Следующая ссылка, где находятся источники в CodePlex, все кредиты идут к соответствующим создателям: https://www.codeproject.com/Articles/23472/A-Naive-Bayesian-Spam-Filter-for-C, я хотел бы узнать, как использовать и Corpus.cs и SpamFilter.csНиже приведен мой старт надстройки, основанный на других открытых источниках и руководствах, которые я нашел

namespace MajorProject
{

    public partial class ThisAddIn
    {
        Outlook.NameSpace outlookNameSpace;
        Outlook.MAPIFolder inbox;
        Outlook.Items items;

        Outlook.Explorer currentExplorer = null;
        //private SpamFilter _filter;
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
           Outlook.MAPIFolder inbox = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
           //inbox.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);

           currentExplorer = this.Application.ActiveExplorer();
                currentExplorer.SelectionChange += new Outlook
                    .ExplorerEvents_10_SelectionChangeEventHandler
                    (CurrentExplorer_Event);


        }

        private void CurrentExplorer_Event()
            {
                Outlook.MAPIFolder selectedFolder =
                    this.Application.ActiveExplorer().CurrentFolder;


            try
                {
                    if (this.Application.ActiveExplorer().Selection.Count > 0)
                    {
                        Object selected = this.Application.ActiveExplorer().Selection[1];

                        if (selected is Outlook.MailItem)
                        {
                            Outlook.MailItem mailItem =
                                (selected as Outlook.MailItem);

                            Parser.ParseLinks (mailItem.HTMLBody);


                            mailItem.Display(false);

                        }

                    }

                }
                catch (Exception ex)
                {

                }

            }




        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
            // Note: Outlook no longer raises this event. If you have code that 
            //    must run when Outlook shuts down, see https://go.microsoft.com/fwlink/?LinkId=506785
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }





        #endregion

    }



    public class Parser
    {
        readonly Expat.Bayesian.Corpus corpus = new Corpus();
        readonly Expat.Bayesian.SpamFilter spam = new SpamFilter();
        public static readonly Regex HyperlinkRegex = new Regex("http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase);

        //http://weblogs.asp.net/farazshahkhan/regex-to-find-url-within-text-and-make-them-as-link

        public static string ParseLinks(string str)
        {

            //parse through with the regex
            MatchCollection HyperLinkmatches = HyperlinkRegex.Matches(str);
            List<string> LinksList = new List<string>();
            int x = 0;

            foreach (Match match in HyperLinkmatches)
            {

                LinksList.Add(str);     
                str = str.Replace(match.Value, "<a target='_blank' href='" + match.Value + "'>" + match.Value + "</a>");
                string rx = "<a\\s+ .*? href\\s*=\\s*(?:\"|') (?<url>.*?) (?:\"|') .*?> (?<anchorText>.*?) \\</a>";
                Regex regex = new Regex(rx, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
                string regexReplace = "${anchorText} [${url}]";

                string result = regex.Replace(str, regexReplace);

                    x++;


            }


            if (x > 0)
            {

                MessageBox.Show("Link found" );

            }
            else
            {
                MessageBox.Show("Link not found");
            }

            return str;


        }
...