예제 #1
0
            fillNumericDefaults(Dictionary <string, dynamic> inputData, string average = "mean")
            {
                foreach (KeyValuePair <string, DataSet.Field> idAndField in _fields)
                {
                    float         default_value;
                    DataSet.Field field   = idAndField.Value;
                    string        fieldId = idAndField.Key;

                    if (summaryFields.IndexOf(fieldId) > -1 &&
                        OptionalFields.Contains <string>(field.Optype.ToString()) &&
                        !inputData.ContainsKey(fieldId))
                    {
                        if (!NumericDefaults.Contains <string>(average))
                        {
                            throw (new System.Exception("The available defaults are: %s" +
                                                        string.Join(",", NumericDefaults)));
                        }

                        if (average == "zero")
                        {
                            default_value = 0;
                        }
                        else
                        {
                            // get property by reflection
                            default_value = (float)field.FieldSummary.GetType().GetProperty(average).GetValue(field.FieldSummary, null);
                        }
                        inputData[fieldId] = default_value;
                    }
                }

                return(inputData);
            }
예제 #2
0
            private Dictionary <string, string> getFieldTermAnalysis(DataSet.Field currentField)
            {
                Dictionary <string, string> options = new Dictionary <string, string>();

                DataSet.Field.Summary.Text textSummary;
                string fieldId, regex;
                int    i, totalOptions;

                fieldId     = currentField.Id;
                textSummary = (DataSet.Field.Summary.Text)currentField.FieldSummary;

                //term options per field
                regex = "";
                foreach (KeyValuePair <string, string[]> termOptions in textSummary.TermForms)
                {
                    regex        = "(\b|_)" + termOptions.Key + "(\b|_)";
                    totalOptions = termOptions.Value.Length;
                    for (i = 0; i < totalOptions; i++)
                    {
                        regex += "|(\b|_)" + termOptions.Value[i] + "(\b|_)";
                    }
                    options.Add(termOptions.Key, regex);
                }

                return(options);
            }
예제 #3
0
            internal LocalModel(JObject jsonObject, Dictionary <string, DataSet.Field> fields)
            {
                Dictionary <string, Dictionary <string, string> > termForms = new Dictionary <string, Dictionary <string, string> >();
                Dictionary <string, string> options;
                Dictionary <string, bool>   caseSensitive = new Dictionary <string, bool>();
                string fieldId;

                DataSet.Field currentField;

                _jsonObject = jsonObject;

                // parse or fill the Fields information
                if (fields != null)
                {
                    _fields = fields;

                    // populate nameToIdDict from 'fields' param
                    foreach (var kv in fields)
                    {
                        fieldId = kv.Key;
                        nameToIdDict.Add(_fields[fieldId].Name, fieldId);

                        //text analysis initialization
                        options = new Dictionary <string, string>();

                        if (_fields[fieldId].OpType == OpType.Text)
                        {
                            currentField = fields[kv.Key];

                            //case sensitive per field
                            caseSensitive.Add(fieldId, (bool)currentField.TermAnalysis["case_sensitive"]);

                            //text analysis initialization
                            options = getFieldTermAnalysis(currentField);
                        }
                        fieldAllowEmpty[fieldId] = _fields[fieldId].OpType.Equals(OpType.Text) || _fields[fieldId].OpType.Equals(OpType.Items);
                        termForms[fieldId]       = options;
                    }
                }
                else
                {
                    _fields = new Dictionary <string, DataSet.Field>();

                    // process each 'field' properties and
                    // populate nameToIdDict from 'fields' param
                    foreach (var kv in _jsonObject["fields"].ToObject <Dictionary <string, JObject> >())
                    {
                        fieldId          = kv.Key;
                        kv.Value["id"]   = fieldId;
                        _fields[fieldId] = new DataSet.Field(kv.Value);
                        if (!nameToIdDict.ContainsKey(_fields[fieldId].Name))
                        {
                            nameToIdDict.Add(_fields[fieldId].Name, fieldId);
                        }

                        //text analysis initialization
                        options = new Dictionary <string, string>();

                        if (_fields[fieldId].OpType == OpType.Text)
                        {
                            currentField = _fields[kv.Key];

                            //case sensitive per field
                            caseSensitive.Add(fieldId, (bool)currentField.TermAnalysis["case_sensitive"]);

                            options = getFieldTermAnalysis(currentField);
                        }

                        fieldAllowEmpty[fieldId] = _fields[fieldId].OpType.Equals(OpType.Text) || _fields[fieldId].OpType.Equals(OpType.Items);
                        termForms[fieldId]       = options;
                    }
                }

                // fill the array with all the fields' names
                modelFieldsNames = new string[nameToIdDict.Keys.Count];
                nameToIdDict.Keys.CopyTo(modelFieldsNames, 0);

                _caseSensitive = caseSensitive;
                _termForms     = termForms;

                if (jsonObject["boosting"] != null)
                {
                    _boosting = _jsonObject["boosting"].ToObject <Dictionary <string, dynamic> >();
                }
            }
예제 #4
0
            public LocalCluster(JObject jsonObject)
            {
                _jsonObject = jsonObject;

                resourceId          = (string)jsonObject["resource"];
                defaultNumericValue = (string)jsonObject["default_numeric_value"];

                summaryFields = new List <string>();
                foreach (JObject oneSummaryField in jsonObject["summary_fields"])
                {
                    summaryFields.Add((string)oneSummaryField);
                }

                centroids = new List <LocalCentroid>();
                foreach (JObject oneCentroid in jsonObject["clusters"]["clusters"])
                {
                    LocalCentroid c = new LocalCentroid(oneCentroid);
                    centroids.Add(c);
                }
                clusterGlobal = (JObject)jsonObject["clusters"]["global"];
                Dictionary <string, dynamic> fields = jsonObject["clusters"]["fields"].ToObject <Dictionary <string, dynamic> >();

                _fields = new Dictionary <string, DataSet.Field>();
                foreach (KeyValuePair <string, dynamic> fieldData in fields)
                {
                    string        fieldId = fieldData.Key;
                    DataSet.Field field   = new DataSet.Field(fieldData.Value);
                    _fields[fieldId] = field;
                    nameToIdDict.Add(_fields[fieldId].Name, fieldId);
                    fieldAllowEmpty[fieldId] = _fields[fieldId].OpType.Equals(OpType.Text) || _fields[fieldId].OpType.Equals(OpType.Items);


                    if (_fields[fieldId].OpType.Equals(OpType.Text))
                    {
                        this.termForms[fieldId] = new Dictionary <string, string[]>();
                        this.termForms[fieldId] = fieldData.Value["summary"]["term_forms"].ToObject <Dictionary <string, string[]> >();
                        List <string> listTags = new List <string>();
                        foreach (var tag in fieldData.Value["summary"]["tag_cloud"])
                        {
                            listTags.Add((string)tag[0]);
                        }
                        this.tagClouds[fieldId]    = listTags.ToArray();
                        this.termAnalysis[fieldId] = new Dictionary <string, dynamic>();
                        this.termAnalysis[fieldId] = field.TermAnalysis;
                    }

                    if (_fields[fieldId].OpType.Equals(OpType.Items))
                    {
                        List <string> listItems = new List <string>();
                        foreach (string item in fieldData.Value["items"])
                        {
                            listItems.Add(item);
                        }
                        this.items[fieldId]        = listItems.ToArray();
                        this.itemAnalysis[fieldId] = new Dictionary <string, dynamic>();
                        this.itemAnalysis[fieldId] = field.ItemAnalysis;
                    }
                }

                scales = jsonObject["scales"].ToObject <Dictionary <string, double> >();
            }