Пример #1
0
        public void TestCreateBasicTrieTreeWithPOSType()
        {
            TrieTree tt = TrieTree.GetInstance();

            tt.AddWord("测试", POSType.D_N);
            tt.AddWord("你好", POSType.UNKNOWN);
            tt.AddWord("我们", POSType.D_R);
            tt.AddWord("你们", POSType.D_R);

            Assert.AreEqual(3, tt.Root.Children.Count);
            TrieTreeNode tn1 = tt.GetNode("你们", (int)POSType.D_N);

            Assert.IsNull(tn1);
            TrieTreeNode tn2 = tt.GetNode("你们", (int)POSType.D_R);

            Assert.IsNotNull(tn2);
            Assert.AreEqual("你们", tn2.Word);
            Assert.IsTrue(tn2.Children.Count == 0);

            Assert.IsNull(tt.GetNode("它们"));

            TrieTreeNode tn = tt.GetNode('你');

            Assert.AreEqual("你", tn.Word);
            Assert.AreEqual(2, tn.Children.Count);

            tn = tt.GetNode('你', (int)POSType.UNKNOWN);
            Assert.AreEqual("你", tn.Word);

            Assert.AreEqual(1, tt.GetNode("我").Children.Count);
        }
Пример #2
0
 public static void Invalidate()
 {
     CachedDbAlbum     = null;
     AlbumSearchTree   = null;
     CachedDbArtist    = null;
     ArtistSearchTree  = null;
     CachedDbMediaFile = null;
     FileSearchTree    = null;
 }
Пример #3
0
        public override void ExecuteCommand(TrieTreeSession session, StringCommandInfo commandInfo)
        {
            logger.Info("receive command RMMFetch, argument: " + commandInfo.Data);
            Stopwatch sw = new Stopwatch();

            sw.Start();
            var tt = TrieTree.GetInstance();

            string[] splits    = commandInfo.Data.Split(new char[] { SOH });
            int      maxlength = 0;
            string   text      = splits[0];
            int      pos       = 0;

            if (splits.Length > 1)
            {
                pos = Int32.Parse(splits[1]);
            }
            maxlength = text.Length;
            string temp = null;

            TrieTreeNode node = null;

            for (int j = 0; j < maxlength; j++)
            {
                temp = text.Substring(j, maxlength - j);
                node = tt.GetNode(temp, pos);
                if (node != null)
                {
                    break;
                }
            }
            sw.Stop();
            logger.InfoFormat("timer: {0} ms", sw.ElapsedMilliseconds);

            string result = null;

            if (node == null)
            {
                result = string.Format("0{0}", SOH);
            }
            else
            {
                result = string.Format("1{0}{1}{0}{2}{0}{3}{0}", SOH, node.Word, node.Frequency, node.POSValue);
            }

            if (node != null)
            {
                logger.InfoFormat("return result: {0}, {1}", node.Word, (POSType)node.POSValue);
            }
            else
            {
                logger.InfoFormat("return result: not found");
            }
            session.SendResponse(result);
        }
Пример #4
0
 public static async Task LoadMediaAsync()
 {
     using (var scope = _scopeFactory.CreateScope())
         using (var context = scope.ServiceProvider
                              .GetRequiredService <MedialibraryDbContext>())
         {
             await Task.Run(() =>
             {
                 var files         = context.MediaFiles.ToArray();
                 FileSearchTree    = files.ToTrieTree(x => x.Title, new CaseInsensitiveCharComparer());
                 CachedDbMediaFile = files;
             });
         }
 }
Пример #5
0
 public static async Task LoadArtistAsync()
 {
     using (var scope = _scopeFactory.CreateScope())
         using (var context = scope.ServiceProvider
                              .GetRequiredService <MedialibraryDbContext>())
         {
             await Task.Run(() =>
             {
                 var artists      = context.Artists.ToArray();
                 ArtistSearchTree = artists.ToTrieTree(x => x.Name, new CaseInsensitiveCharComparer());
                 CachedDbArtist   = artists;
             });
         }
 }
Пример #6
0
        public void TestLoadTrieTreeFromPanguDict()
        {
            var mockPanguProviderSetting = new Mock <IDataProviderSetting>();

            mockPanguProviderSetting.Setup(s => s.Uri).Returns(DictLoadTest.UnitTestProjectFolder + @"\Data\panguDict.dct");
            mockPanguProviderSetting.Setup(s => s.ProviderType).Returns("PanguDictProvider");

            var          panguProvider = new PanguDictProvider(mockPanguProviderSetting.Object);
            TrieTree     tt            = TrieFactory.LoadFromDataProvider(panguProvider);
            TrieTreeNode ttn           = tt.GetNode("测试");

            Assert.IsNotNull(ttn);
            Assert.AreEqual(POSType.D_N, (POSType)ttn.POSValue);
        }
Пример #7
0
        public void TestCreateBasicTrieTree()
        {
            TrieTree tt = TrieTree.GetInstance();

            tt.AddWord("测试");
            tt.AddWord("你好");
            tt.AddWord("我们");
            tt.AddWord("你们");

            Assert.AreEqual(3, tt.Root.Children.Count);
            TrieTreeNode tn1 = tt.GetNode("你们");

            Assert.IsNotNull(tn1);
            Assert.AreEqual("你们", tn1.Word);
            Assert.IsTrue(tn1.Children.Count == 0);
            Assert.IsNull(tt.GetNode("它们"));

            TrieTreeNode tn = tt.GetNode('你');

            Assert.AreEqual("你", tn.Word);
            Assert.AreEqual(2, tn.Children.Count);

            Assert.AreEqual(1, tt.GetNode("我").Children.Count);
        }
Пример #8
0
 public PrefixTree(TrieTreeNode root)
 {
     _root = root;
 }