コード例 #1
0
        // 검색한 사진 이름 return
        public List <string> Search(List <string> findTerms, List <string> ignoreTerms, out string dogName)
        {
            var dogNames = TableManager.Instance.DogNames;


            // 개 이름이 있는지 검사.
            dogName = string.Empty;
            foreach (var term in findTerms)
            {
                if (dogNames.Contains(term))
                {
                    dogName = term;
                    break;
                }
            }

            if (dogName == string.Empty)
            {
                UIManager.Instance.Alert("경고!! 개 이름을 입력해주세요!!!");
                return(null);
            }

            findTerms.Remove(dogName);

            VectorTable vectorTable = TableManager.Instance.vectorTables[dogName];

            List <int>            dogPhotoIndexes    = new List <int>();
            List <IndexWeightSet> dogIndexWeightSets = new List <IndexWeightSet>();

            // 찾는 검색어가 없다면 해당 개 사진 다 출력
            if (findTerms.Count == 0)
            {
                for (int i = 0; i < vectorTable.Columns.Count; i++)
                {
                    dogPhotoIndexes.Add(i);
                }
            }

            // 검색할 사진의 개 사진 인덱스 추가
            foreach (var term in findTerms)
            {
                if (vectorTable.ColumnTable.TryGetValue(term, out List <float> values))
                {
                    for (int i = 0; i < values.Count; i++)
                    {
                        if (values[i] > 0)
                        {
                            if (!dogPhotoIndexes.Contains(i))
                            {
                                dogIndexWeightSets.Add(new IndexWeightSet(i, values[i]));
                                dogPhotoIndexes.Add(i);
                            }
                            else
                            {
                                // 가중치 더함.
                                dogIndexWeightSets[dogPhotoIndexes.IndexOf(i)].weight += values[i];
                            }
                        }
                    }
                }
            }

            // 무시할 검색어 포함한 사진 인덱스 제거
            foreach (var term in ignoreTerms)
            {
                if (vectorTable.ColumnTable.TryGetValue(term, out List <float> values))
                {
                    for (int i = 0; i < values.Count; i++)
                    {
                        if (values[i] > 0)
                        {
                            if (dogPhotoIndexes.Contains(i))
                            {
                                dogIndexWeightSets.RemoveAt(dogPhotoIndexes.IndexOf(i));
                                dogPhotoIndexes.Remove(i);
                            }
                        }
                    }
                }
            }

            // 내림차순 정렬
            dogIndexWeightSets.Sort();
            dogIndexWeightSets.Reverse();

            List <string> result = new List <string>();

            if (dogIndexWeightSets.Count > 0)
            {
                foreach (var set in dogIndexWeightSets)
                {
                    string photoName = vectorTable.Columns[set.index];
                    result.Add(photoName);
                }
            }
            else
            {
                foreach (var index in dogPhotoIndexes)
                {
                    string photoName = vectorTable.Columns[index];
                    result.Add(photoName);
                }
            }

            return(result);
        }
コード例 #2
0
ファイル: CSVReader.cs プロジェクト: G0DCH/DogAnswerProgram
        public static List <VectorTable> Read(string file)
        {
            List <VectorTable> vectorTables = new List <VectorTable>();
            var datas = Resources.LoadAll <TextAsset>(file);

            foreach (var data in datas)
            {
                VectorTable vectorTable = new VectorTable();
                var         table       = new Dictionary <KeyValuePair <string, string>, float>();

                var lines = Regex.Split(data.text, LINE_SPLIT_RE);
                var rows  = new List <string>();

                Dictionary <string, List <float> > columnTable = new Dictionary <string, List <float> >();
                Dictionary <string, List <float> > rowTable    = new Dictionary <string, List <float> >();

                if (lines.Length <= 1)
                {
                    continue;
                }

                // 헤더 분리
                var header = Regex.Split(lines[0], SPLIT_RE);

                // 헤더 리스트 추가
                List <string> columns = new List <string>(header);
                columns.RemoveAt(0);

                string rowName = string.Empty;
                for (var i = 1; i < lines.Length; i++)
                {
                    List <float> rowValues = new List <float>();
                    // 값 분리
                    var values = Regex.Split(lines[i], SPLIT_RE);
                    if (values.Length == 0 || values[0] == "")
                    {
                        continue;
                    }

                    for (var j = 0; j < header.Length && j < values.Length; j++)
                    {
                        if (j == 0)
                        {
                            rowName = values[j];
                            rows.Add(values[j]);
                            continue;
                        }

                        string value = values[j];
                        value = value.TrimStart(TRIM_CHARS).TrimEnd(TRIM_CHARS).Replace("\\", "");
                        float finalvalue = float.Parse(value);

                        KeyValuePair <string, string> keySet = new KeyValuePair <string, string>(columns[j - 1], rowName);
                        // 테이블에 추가
                        table.Add(keySet, finalvalue);
                        rowValues.Add(finalvalue);

                        // 해당 헤더에 해당하는 값 추가
                        if (rowTable.TryGetValue(header[j], out List <float> columnList))
                        {
                            columnList.Add(finalvalue);
                        }
                        else
                        {
                            rowTable.Add(header[j], new List <float>());
                            rowTable[header[j]].Add(finalvalue);
                        }
                    }

                    columnTable.Add(rowName, rowValues);
                }

                vectorTable.DogName     = data.name;
                vectorTable.Table       = table;
                vectorTable.Rows        = rows;
                vectorTable.Columns     = columns;
                vectorTable.RowTable    = rowTable;
                vectorTable.ColumnTable = columnTable;

                vectorTables.Add(vectorTable);
            }
            return(vectorTables);
        }