public void Execute(Selection selection, string[] args, AbstractTableWriter writer)
        {
            if (args == null || args.Length < 2)
            {
                return;
            }

            var vm = new CooccurrenceSelectiveViewModel
            {
                Selection        = selection,
                LayerDisplayname = args[0]
            };

            var res = new Dictionary <string, Dictionary <string, double[]> >();

            for (var i = 1; i < args.Length; i++)
            {
                vm.LayerQueries = new[] { args[i] };
                vm.Execute();

                res.Add(args[i], vm.FrequencySignificanceDictionary);
            }

            var tbl = new DataTable();

            tbl.Columns.Add(Resources.WordA, typeof(string));
            tbl.Columns.Add(Resources.WordB, typeof(string));
            tbl.Columns.Add(Resources.Frequency, typeof(double));
            tbl.Columns.Add(Resources.Significance, typeof(double));

            tbl.BeginLoadData();
            foreach (var e in res)
            {
                foreach (var v in e.Value)
                {
                    tbl.Rows.Add(e.Key, v.Key, v.Value[0], v.Value[1]);
                }
            }

            tbl.EndLoadData();

            writer.WriteTable(selection.Displayname, tbl);
        }
        public void Execute(Selection selection, string[] args, AbstractTableWriter writer)
        {
            if (args == null || args.Length < 4)
            {
                return;
            }

            var arguments = args.ToList();
            var layer1    = arguments[0];

            arguments.RemoveAt(0);
            var layer1value = arguments[0];

            arguments.RemoveAt(0);
            var layer2 = arguments[0];

            arguments.RemoveAt(0);
            var layer2values = new HashSet <string>(arguments);

            var vm = new CooccurrenceSelectiveViewModel
            {
                Selection        = selection,
                LayerDisplayname = layer1,
                LayerQueries     = new[] { layer1value }
            };

            vm.CorrespondingLayerValueFilter = new CorrespondingLayerValueFilterViewModel
            {
                Layer1Displayname  = layer1,
                Layer2Displayname  = layer2,
                AnyMatch           = true,
                Layer2ValueFilters = layer2values,
                Selection          = selection
            };
            vm.CorrespondingLayerValueFilter.Execute();

            vm.Execute();

            writer.WriteTable(selection.Displayname, vm.GetDataTable());
        }