Esempio n. 1
0
        public void SaveAndLoadIndexData()
        {
            var expect = new Dictionary <string, List <int> >
            {
                { "0", new List <int> {
                      1, 2, 4
                  } },
                { "東京", new List <int> {
                      2, 5, 9
                  } },
                { "大阪", new List <int> {
                      4, 8
                  } }
            };
            string saveFilePath =
                Path.Combine(TestSetup.RootDirectory, "TestResult", "Utilties", "IndexUtility", "SaveIndexData",
                             "test.idx");

            var encoding = Encoding.GetEncoding("Shift-JIS");

            IndexUtility.SaveIndexData(saveFilePath, expect, encoding);
            var actual = IndexUtility.LoadIndexData(saveFilePath, encoding);

            CollectionAssert.AreEquivalent(expect, actual);
        }
        /// <summary>
        /// レコードを検索します。
        /// </summary>
        /// <param name="keyword">検索キーワード</param>
        public IEnumerable <string> SearchRecord(string keyword)
        {
            string filePath = FileUtility.GetIndexFilePath(_storageDirectoryPath);

            if (String.IsNullOrEmpty(filePath))
            {
                Console.WriteLine("インデックスがありません。先にインデックスを作成してください。");
                yield break;
            }

            var keywordSplit = IndexUtility.SplitKeyword(keyword, Ngram).ToList();
            var indices      = IndexUtility.LoadIndexData(filePath, FileEncoding, keywordSplit);
            var result       = IndexUtility.SearchKeywordLines(keywordSplit.FirstOrDefault(), indices);

            foreach (var item in keywordSplit.Skip(1))
            {
                var next = IndexUtility.SearchKeywordLines(item, indices).ToList();
                result = result.Intersect(next);
            }

            var resultList = result.ToList();

            string csvFilePath = FileUtility.GetCsvFilePath(_storageDirectoryPath);

            foreach (var text in FileUtility.GetFileLines(resultList, csvFilePath, FileEncoding))
            {
                yield return(text);
            }
        }
Esempio n. 3
0
        public void LoadIndexDataArgumentKeywords()
        {
            var indices = new Dictionary <string, List <int> >
            {
                { "0", new List <int> {
                      1, 2, 4
                  } },
                { "関東", new List <int> {
                      2, 5, 9
                  } },
                { "大阪", new List <int> {
                      4, 8
                  } },
                { "京都", new List <int> {
                      5, 9
                  } }
            };
            var expect   = new Dictionary <string, List <int> >();
            var keywords = new List <string> {
                "東", "京"
            };

            foreach (var index in indices)
            {
                if (keywords.Any(keyword => index.Key.Contains(keyword)))
                {
                    expect.Add(index.Key, index.Value);
                }
            }

            Assert.IsTrue(Directory.Exists(Path.Combine(TestSetup.RootDirectory, "TestResult", "Utilties")));
            string saveFilePath =
                Path.Combine(TestSetup.RootDirectory, "TestResult", "Utilties", "IndexUtility", "SaveIndexData",
                             "test.idx");
            var encoding = Encoding.GetEncoding("Shift-JIS");

            IndexUtility.SaveIndexData(saveFilePath, indices, encoding);
            var actual = IndexUtility.LoadIndexData(saveFilePath, encoding, keywords);

            CollectionAssert.AreEquivalent(expect, actual);
        }