C# 模糊查询

Dear200892 2020-03-04 02:34:10
假如我数据库存在一个字典表,例如a={"集合","脂肪","回苏州吃饭".....}

每一个关键字有且只有一个

有人输入了一段话【这里是脂肪集合点】

如何找到每段话里面包含的关键字?
...全文
193 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dear200892 2020-03-05
引用 9 楼 正怒月神 的回复:
看你的数据体量。 如果是上千万的敏感词,那么你可以使用下面这种方式。 代码不是太困难,从java转到c#应该不是太难 https://yq.aliyun.com/articles/622759
收藏
回复
正怒月神 2020-03-05
看你的数据体量。 如果是上千万的敏感词,那么你可以使用下面这种方式。 代码不是太困难,从java转到c#应该不是太难 https://yq.aliyun.com/articles/622759
回复
Dear200892 2020-03-05
引用 6 楼 Hello World, 的回复:
            var a = new string[] { "集合", "脂肪", "回苏州吃饭" };
            var s = "这里是脂肪的集合点";
            var keys = a.Where(item => s.Contains(item));
应该没有问题,字典总不会很长一串吧
a的数量会很多,s有很多就话,点击按钮需要找到所有s中的关键字
回复
Dear200892 2020-03-05
引用 11 楼 撞墙的蝙蝠 的回复:
希望是你想要的吧
次数可以不用判断
回复
撞墙的蝙蝠 2020-03-05
希望是你想要的吧

 private void button1_Click(object sender, EventArgs e)
        {
            label3.Text = "文字中出现字典中词语有:";
            string Text = richTextBox1.Text.Trim();
            List<string> listS = new List<string>();
            foreach (var item in richTextBox2.Text.Split(','))
            {
                listS.Add(item);
            }
            string s = "";
            for (int i = 0; i < listS.Count; i++)
            {
                if (Text.IndexOf(listS[i]) > -1) {
                   
                    s += listS[i] + "共出现" + SubstringCount(Text, listS[i]) + "次,";
                }
            }
            label3.Text += s.TrimEnd(',');
        }
        /// 计算字符串中子串出现的次数
        /// </summary>
        /// <param name="str">字符串</param>
        /// <param name="substring">子串</param>
        /// <returns>出现的次数</returns>
        private int SubstringCount(string str, string substring)
        {
            if (str.Contains(substring))
            {
                string strReplaced = str.Replace(substring, "");
                return (str.Length - strReplaced.Length) / substring.Length;
            }
            return 0;
        }
回复
牧歌ing 2020-03-04
引用 4 楼 Dear200892 的回复:
[quote=引用 3 楼 Hello World, 的回复:]

            var a = new string[] { "集合", "脂肪", "回苏州吃饭" };
var s = "这里是脂肪的集合点";
var keys = a.Where(item => s.Contains(item));

如果字典数量成千上万,是否还合适[/quote]
如果只是成千上万的没问题
回复
Hello World, 2020-03-04
引用 4 楼 Dear200892 的回复:
[quote=引用 3 楼 Hello World, 的回复:]

            var a = new string[] { "集合", "脂肪", "回苏州吃饭" };
var s = "这里是脂肪的集合点";
var keys = a.Where(item => s.Contains(item));

如果字典数量成千上万,是否还合适[/quote]
应该没有问题,字典总不会很长一串吧
回复
Bridge_go 2020-03-04
这不就是查找算法么
回复
Dear200892 2020-03-04
引用 3 楼 Hello World, 的回复:
            var a = new string[] { "集合", "脂肪", "回苏州吃饭" };
            var s = "这里是脂肪的集合点";
            var keys = a.Where(item => s.Contains(item));
如果字典数量成千上万,是否还合适
回复
Hello World, 2020-03-04

            var a = new string[] { "集合", "脂肪", "回苏州吃饭" };
var s = "这里是脂肪的集合点";
var keys = a.Where(item => s.Contains(item));
回复
Dear200892 2020-03-04
引用 1 楼 Hello World, 的回复:
在数据库里查询可以用like,在C#里遍历可以用contains
我并不知道他的这段话是否有几个关键字
回复
Hello World, 2020-03-04
在数据库里查询可以用like,在C#里遍历可以用contains
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.