Пример #1
0
    private static AhoCorasick BuildAhoCorasick(SqlXml xml, SqlString culture)
    {
        var          xe         = XElement.Load(xml.CreateReader());
        var          words      = xe.Elements().Select(e => e.FirstAttribute.Value);
        var          c          = culture.Value.Split(':');
        var          ignoreCase = c.Length > 1 && c[1] == "i";
        CharComparer cc;

        switch (c[0])
        {
        case "c":
            cc = CharComparer.Create(CultureInfo.CurrentCulture, ignoreCase);
            break;

        case "n":
            cc = CharComparer.Create(CultureInfo.InvariantCulture, ignoreCase);
            break;

        case "o":
        case "":
            cc = ignoreCase ? CharComparer.OrdinalIgnoreCase : CharComparer.Ordinal;
            break;

        default:
            cc = CharComparer.Create(CultureInfo.GetCultureInfo(c[0]), ignoreCase);
            break;
        }
        var ac = new AhoCorasick(cc, words);

        return(ac);
    }
Пример #2
0
        public void OverloadsTest()
        {
            var ac = new AhoCorasick(new List <string> {
                "a"
            });

            CollectionAssert.AreEqual(new WordMatchList {
                { 0, "a" }
            }, ac.Search("a").ToList());
            Assert.AreEqual(0, ac.Search("b").Count());

            ac = new AhoCorasick(CharComparer.OrdinalIgnoreCase, new List <string> {
                "a", "ab", "bab", "bC", "bca", "c", "caa"
            });
            var m        = ac.Search("abCcab").ToList();
            var expected = new WordMatchList {
                { 0, "a" }, { 0, "ab" }, { 1, "bC" }, { 2, "c" }, { 3, "c" }, { 4, "a" }, { 4, "ab" }
            };

            CollectionAssert.AreEqual(expected, m);

            ac = new AhoCorasick();
            ac.Add("a");
            ac.BuildFail();
            CollectionAssert.AreEqual(new WordMatchList {
                { 0, "a" }
            }, ac.Search("a").ToList());
            Assert.AreEqual(0, ac.Search("b").Count());

            ac       = new AhoCorasick(CharComparer.Create(CultureInfo.InvariantCulture, true), "a", "ab", "bab", "bc", "bca", "c", "caa");
            m        = ac.Search("abccab").ToList();
            expected = new WordMatchList {
                { 0, "a" }, { 0, "ab" }, { 1, "bc" }, { 2, "c" }, { 3, "c" }, { 4, "a" }, { 4, "ab" }
            };
            CollectionAssert.AreEqual(expected, m);
        }