Exemple #1
0
        public void TestGenerateDAG()
        {
            WordDictionary.Instance.LoadDictWords(@"..\..\test_files\dict2.txt");
            var dags = _dagGenerator.Generate("他来到了浙江省网易杭研大厦");

            Assert.AreEqual(JSON.stringify(dags[0]), JSON.stringify(new List <int>()
            {
                0
            }));
            Assert.AreEqual(JSON.stringify(dags[1]), JSON.stringify(new List <int>()
            {
                1, 2
            }));
            Assert.AreEqual(JSON.stringify(dags[2]), JSON.stringify(new List <int>()
            {
                2
            }));
            Assert.AreEqual(JSON.stringify(dags[3]), JSON.stringify(new List <int>()
            {
                3
            }));
            Assert.AreEqual(JSON.stringify(dags[4]), JSON.stringify(new List <int>()
            {
                4, 5, 6
            }));
            Assert.AreEqual(JSON.stringify(dags[5]), JSON.stringify(new List <int>()
            {
                5
            }));
            Assert.AreEqual(JSON.stringify(dags[6]), JSON.stringify(new List <int>()
            {
                6
            }));
            Assert.AreEqual(JSON.stringify(dags[7]), JSON.stringify(new List <int>()
            {
                7, 8
            }));
            Assert.AreEqual(JSON.stringify(dags[8]), JSON.stringify(new List <int>()
            {
                8
            }));
            Assert.AreEqual(JSON.stringify(dags[9]), JSON.stringify(new List <int>()
            {
                9
            }));
            Assert.AreEqual(JSON.stringify(dags[10]), JSON.stringify(new List <int>()
            {
                10
            }));
            Assert.AreEqual(JSON.stringify(dags[11]), JSON.stringify(new List <int>()
            {
                11, 12
            }));
            Assert.AreEqual(JSON.stringify(dags[12]), JSON.stringify(new List <int>()
            {
                12
            }));
        }
Exemple #2
0
        public Route GetRoutes(string sentence)
        {
            var    dags     = _dagGenerator.Generate(sentence);
            int    len      = sentence.Length;
            double logTotal = Math.Log(_wordDictionary.TotalFrequency);
            var    segments = new Segment[len + 1];

            segments[len] = new Segment(0, 0);
            for (int i = len - 1; i >= 0; i--)
            {
                var segment = new Segment(i, Helper.MinValue);
                foreach (var to in dags[i])
                {
                    double wordLog = Math.Log(_wordDictionary.GetEffectiveFrequency(sentence.Sub(i, to)));
                    if (wordLog - logTotal + segments[to + 1].Weight > segment.Weight)
                    {
                        segment.To     = to;
                        segment.Weight = wordLog - logTotal + segments[to + 1].Weight;
                    }
                }
                segments[i] = segment;
            }
            return(new Route(segments));
        }