コード例 #1
0
        public override async Task <Message> HandleMessage(Message msg)
        {
            ITokenisable bmsg = msg as ITokenisable;

            if (bmsg == null)
            {
                return(msg);
            }

            return(await Task.Run <Message>(() =>
            {
                MessageContext context = new MessageContext(msg, this);
                string bclass = Smart.Format(Class, context);

                if (!Classes.ContainsKey(bclass))
                {
                    return msg;
                }

                var bindex = Classes[bclass];

                var msgTokens = bmsg.Tokens.ToList();

                double likely = Prediction(msgTokens, bindex);

                if (likely > 0.5)
                {
                    Categories.AddToCategory(bclass, msg.ID);
                }

                return msg;
            }));
        }
コード例 #2
0
ファイル: Bayes.cs プロジェクト: cwenham/Meep
        public override async Task <Message> HandleMessage(Message msg)
        {
            ITokenisable bmsg = msg as ITokenisable;

            if (bmsg == null)
            {
                return(msg);
            }

            MessageContext context = new MessageContext(msg, this);

            string dsAgainst = await Against.SelectStringAsync(context);

            if (String.IsNullOrWhiteSpace(dsAgainst))
            {
                throw new ArgumentException("Must specify 'ham' classes to test Against", nameof(Against));
            }

            string dsClass = await Class.SelectStringAsync(context);

            return(await Task.Run <Message>(() =>
            {
                string[] peerNames = null;
                if (!String.IsNullOrWhiteSpace(dsClass))
                {
                    peerNames = dsClass.Split(',');
                }

                if (peerNames is null || peerNames.Length == 0)
                {
                    peerNames = Classes.Keys.ToArray();
                }

                string[] againstNames = null;
                if (!String.IsNullOrWhiteSpace(dsAgainst))
                {
                    againstNames = dsAgainst.Split(',');
                }

                peerNames = peerNames.Except(againstNames).ToArray();

                var peers = (from k in peerNames
                             where Classes.ContainsKey(k)
                             select Classes[k]).ToArray();

                var against = (from k in againstNames
                               where Classes.ContainsKey(k)
                               select Classes[k]).ToArray();

                if (!(peers is null))
                {
                    foreach (var peer in peers)
                    {
                        var msgTokens = bmsg.Tokens.ToList();

                        double likely = Prediction(msgTokens, peer, against);

                        if (likely > 0.5)
                        {
                            Categories.AddToCategory(peer.Name, msg.ID);
                        }
                    }
                }

                return msg;
            }));
        }