准备:

微软官方出了一个专用的汉字转拼音包Microsoft Visual Studio International Pack 1.0 SR1

首先到官网http://www.microsoft.com/zh-cn/download/details.aspx?id=15251下载安装包,下载完后解压vsintlpack1,里面有7个安装包,只需安装CHSPinYinConv(跟拼音相关)和CHTCHSConv(简体和繁体间的转换)这两个包就可以了,安装完毕后,需要在VS里添加引用。

将C:\Program Files\Microsoft Visual Studio International Pack\Simplified Chinese Pin-Yin Conversion Library 和C:\Program Files\Microsoft Visual Studio International Pack\Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool下的dll  拷贝到项目的dll文件夹下(我的是Reference),接下来添加引用

Code:

using Microsoft.International.Converters.PinYinConverter;

#region==模糊搜索==
        private void MistinessSel()
        {
            string selwords = GetFormString("words");

if (selwords != "")
            {
                //判断是汉字还是字母
                string pattern = @"^[A-Za-z]+$";
                Regex regex = new Regex(pattern);
                List<Model.t_category> list = null;
                List<Model.t_category> categorylist = new List<Model.t_category>();
                //字母模糊搜索
                if (regex.IsMatch(selwords))
                {
                    selwords = selwords.ToLower();
                    list = new BLL.t_category().GetModelList(" ParentID!=0 ");

//拼音模糊查询法
                    for (int i = 0; i < list.Count; i++)
                    {
                        //StringBuilder str = new StringBuilder();//定义一个可变长度的字符串
                        //char[] chs; //定义一个字符数组来接收每个汉字的拼音
                        string spells = "";
                        //遍历F_ConnName字段中所有汉字
                        foreach (char c in list[i].Name.ToCharArray())
                        {
                            //验证该汉字是否合法
                            if (ChineseChar.IsValidChar(c))
                            {

ChineseChar CC = new ChineseChar(c);
                                //将该汉字转化为拼音集合
                                ReadOnlyCollection<string> roc = CC.Pinyins;
                                //获取集合中第一个数据即为该汉字的拼音
                                spells += roc[0].ToLower();
                            }
                        }
                        if (spells.Contains(selwords))
                        {
                            categorylist.Add(list[i]);
                        }
                    }
                }
                else
                {
                    categorylist = new BLL.t_category().GetModelList(" ParentID!=0 and Name  LIKE '%" + selwords + "%'"); ;
                }
                ResponseText(Newtonsoft.Json.JsonConvert.SerializeObject(new { res = 1, list = categorylist }));
            }
            else {
                ResponseText(Newtonsoft.Json.JsonConvert.SerializeObject(new { res = 0 }));
            
            }
        }
        #endregion

C#中拼音模糊匹配汉字智能搜索的更多相关文章

  1. dev 中 字符串转中文拼音缩写,对grid列表进行模糊匹配,grid获取焦点行,gridlookupedit控件用拼音模糊匹配下拉选项

    番外篇:. //该方法是将字符串转化为中文拼音的首写字母大写, public static string RemoveSpecialCharacters(string str){try{if (str ...

  2. JDBC 操作预编译语句中LIKE模糊匹配怎么用

    问题描述 在使用JDBC 预编译执行语句时,遇到一个问题,那就是在含有LIKE的查询语句时,我到底怎么使用匹配符%._呢. 如: SELECT * FROM "+LQ_USERS+" ...

  3. pandas 中的模糊匹配

  4. Oracle和Mysql中mybatis模糊匹配查询区别

    1.Oracle AND NAME LIKE '%'||#{name}||'%' 2.Mysql AND NAME LIKE "%"#{name}"%"

  5. orm中 如何模糊匹配某一年的用户和某一事时间段的用户

    导入Q查询

  6. Android自定义模糊匹配搜索控件(二)

    在项目中遇到一个需要通过某个字的值筛选匹配带出其他信息的需求,在这里将实现思路整理出来. 源码地址:https://github.com/whieenz/SearchSelect 先看效果图 上图中的 ...

  7. FuzzyAutocomplete代码模糊匹配智能提示

    下载地址:https://github.com/FuzzyAutocomplete/FuzzyAutocompletePlugin Xcode 7.3.1 中已经对代码模糊匹配智能提示优化,已经不需要 ...

  8. 【搜索引擎】 PostgreSQL 10 实时全文检索和分词、相似搜索、模糊匹配实现类似Google搜索自动提示

    需求分析 要通过PostgreSQL实现类似Google搜索自动提示的功能,例如要实现一个查询海量数据中的商品名字,每次输入就提示用户各种相关搜索选项,例如淘宝.京东等电商查询 思路 这个功能可以用 ...

  9. EasyUI combobox下拉列表实现搜索过滤(模糊匹配)

    项目中的某个下拉列表长达200多个项,这么巨大的数量一个一个找眼镜都得看花,于是就得整了个搜索功能.看网上别人帖子有只能前缀匹配的方案,但只能前缀匹配的话用起来也不是很方便.于是就记录一下模糊匹配的方 ...

随机推荐

  1. boost::regex

    https://blog.51cto.com/liam2199/2108548 正则表达式

  2. EffectiveC++条款04:确定对象被使用前已先被初始化

    不要混淆赋值和初始化,对于大多数类型而言,比起先调用默认构造函数然后调用赋值操作符,只调用一次拷贝构造函数是高效的 对于内置类型,也需要成员初值列(member initialization list ...

  3. evpp心跳机制

    client server xin good

  4. nodejs 遍历目录

    1 var fs = require("fs"), path = require("path"); function walk(dir, callback) { ...

  5. python模块与包的详解

    一模块 1.什么是模块? 常见场景:一个模块包含python定义和声明的文件,文件名就是模块名字加上.py的后缀 2.为何要是用模块 如果你退出python解释器然后重新进入,那么你之前定义的函数或者 ...

  6. CTF Jarvisoj Web(session.upload_progress.name php 上传进度)

    Jarvisoj Web 题目地址:http://web.jarvisoj.com:32784/index.php <?php //A webshell is wait for you ini_ ...

  7. java编写算法题格式(链表和二叉树)

    (1)链表 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; ...

  8. java: Set类及子类:TreeSet有序子类,HashSet无序子类:重复元素

    Set类及子类: TreeSet有序子类: HashSet无序(散列)子类 HashSet子类的内容是没有顺序的,单个元素也不会重复的(对象除外). Set<String> allSet ...

  9. webpack中require.context 用法

    1.require.context(directory, useSubdirectories = false, regExp = /^\.\//) Examples: require.context( ...

  10. 【CF1256F】Equalizing Two Strings(逆序对)

    题意:给定两个长度均为n且由小写字母组成的字符串,可以进行若干次操作,每次从两个串中分别选一个长度相等的子串进行翻转,问是否存在能使两串相等的一系列操作方案 n<=2e5 思路:首先如果每种字母 ...