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; })); }
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; })); }