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); }
public static void Invalidate() { CachedDbAlbum = null; AlbumSearchTree = null; CachedDbArtist = null; ArtistSearchTree = null; CachedDbMediaFile = null; FileSearchTree = null; }
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); }
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; }); } }
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; }); } }
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); }
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); }
public PrefixTree(TrieTreeNode root) { _root = root; }