├── CHANGELOG.md ├── COMMERCIAL.md ├── LICENSE ├── README.MD ├── composer.json ├── composer.lock ├── src ├── DAO │ └── PDO_sqlite.php ├── Exceptions │ ├── WindException.php │ └── WindPDOException.php ├── Wind.php ├── lib │ ├── Analyzer.php │ ├── Boot.php │ ├── BuildTrie.php │ ├── Cache.php │ ├── Faker.php │ ├── Func.php │ ├── Geohash.php │ ├── TimSort.php │ ├── ZhToFirstChar.php │ └── ZhToPinyin.php ├── plugin │ └── Analyzer │ │ ├── Analyzer.php │ │ └── dic │ │ ├── custom_dic.txt │ │ ├── dic_with_idf.dic │ │ ├── map_dic.dic │ │ └── not_word.txt ├── statistics │ └── dev │ │ └── storage │ │ └── 2025 │ │ └── 2025-02 │ │ └── 2025-02-10 │ │ └── terms └── windIndexCore │ ├── Chinese_character │ ├── Chinese_character.txt │ └── name.txt │ ├── build_word_segment_mapping │ ├── mapping │ └── preg_match.txt │ ├── dic │ ├── custom_dic.txt │ ├── dic_with_idf.dic │ ├── map_dic.dic │ └── not_word.txt │ ├── fileLock │ └── batchWrite │ ├── height_freq_word │ ├── height_freq_word.txt │ ├── height_freq_word_json.txt │ └── height_freq_word_search_diff.txt │ ├── stopword │ ├── stopword_big.txt │ ├── stopword_en.txt │ └── stopword_small.txt │ ├── symbol │ ├── symbol_json.txt │ └── symbol_txt.txt │ └── synonym │ └── source │ ├── synonym.txt │ └── synonymCustom.txt └── vendor ├── autoload.php └── composer ├── ClassLoader.php ├── InstalledVersions.php ├── LICENSE ├── autoload_classmap.php ├── autoload_namespaces.php ├── autoload_psr4.php ├── autoload_real.php ├── autoload_static.php ├── installed.json ├── installed.php └── platform_check.php /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG [v2.0] 2 | 3 | ## 功能新增 4 | 5 | 2.0版本新增“**即用模式**”、“**Faker数据生成”**、“**日期格式化**”。 6 | 7 | ### 即用模式 8 | 9 | 即用模式适合简单搜索场景,即用模式下,导入、搜索等操作更加简单直接,且无需任何配置。即用模式导入、搜索操作的代码示例: 10 | 11 | *导入数据* 12 | 13 | ```php 14 | // 实例化对象 15 | $Wind = new \WindSearch\Index\Wind('test'); //test 当前索引库的名称 16 | // 清空之前的数据(如果之前使用即用模式导入过数据) 17 | $Wind->deleteFastIndex(); 18 | // 批次导入数据 19 | // $res 是从数据库查询的数据 20 | foreach($res as $v){ 21 | $text = $v['title']; 22 | $primarykey = $v['id']; 23 | // $text是需要搜索的具体内容,比如title;$primarykey是主键值,比如id的值 24 | $Wind->fastIndexer($text, $primarykey); 25 | } 26 | //每导入一批数据,就调用此方法进行保存 27 | $Wind->fastBatchWrite(); 28 | 29 | // 所有数据全部导入完成后,接着构建索引(不一定非得紧接着调用,也可以在其它地方单独调用) 30 | $Wind->fastBuildIndex(); 31 | 32 | ``` 33 | 34 | *开始搜索* 35 | 36 | ```php 37 | // 开始搜索 38 | $Wind = new \WindSearch\Index\Wind('test'); 39 | // 调用搜索方法 40 | // $page 第几页 $listRows 每页多少条 41 | $res = $Wind->fastSearch($text,$page,$listRows) 42 | // $res:返回的主键(比如id)集合,你可以使用id集合从MySQL等数据库查询原始数据 43 | ``` 44 | 45 | 46 | 47 | ### Faker数据生成 48 | 49 | *安装导入* 50 | 51 | ```php 52 | // 导入代码都是一样的 53 | require_once 'yourdirname/windsearch/vendor/autoload.php'; 54 | ``` 55 | 56 | *开始生成* 57 | 58 | ```php 59 | // 创建一个Faker对象 60 | $faker = \WindSearch\Core\Faker::create(); 61 | 62 | // 随机生成电子邮件 63 | $email = $faker->email(); // 6099607970@i.com 64 | 65 | // 随机生成中文地址(无逻辑) 66 | $address = $faker->address(); // 窖坦省 躁袱市 急陕县 胳披镇 饮藤村 北翌组 859号 67 | 68 | // 随机生成布尔值 69 | $boolean = $faker->boolean(); // false 70 | 71 | // 随机生成固长度的文本 72 | // 第一个参数支持 zh:中文(无逻辑) en:数字字母,第二个参数代表生成字符长度 73 | $text = $faker->text('zh', 50); // 猖往罢叫阳丹沦颠藉毡 74 | 75 | // 随机生成固定长度的数字字符串 76 | $number = $faker->number(20); // 35366395389404570072 77 | 78 | // 随机生成中国手机号 79 | $phoneNumber = $faker->phoneNumber(); // 80 | 81 | // 随机生成中文人名 82 | $name = $faker->name(); // 刘爱霞 83 | 84 | // 随机生成uuid 85 | $uuid = $faker->uuid(); // 96BE006D-366E-D78A-035D-159205B97B0B 86 | 87 | // 随机生成date日期 支持指定起始、结束日期,例如 '2024-01-01','2025-01-01' 88 | $date = $faker->date(); // 2024-08-20 89 | 90 | // 随机生成颜色值 参数支持:hex rgb rgba hsl 91 | $color = $faker->color(); // #36a847 92 | 93 | // 随机生成工号 第一个参数代表总的长度,第二个参数代表前缀,默认生成随机数字 94 | $employeeID = $faker->employeeID(10, '1101'); // 1101911597 95 | 96 | // 随机生成ip地址 参数支持 'ipv4'或'ipv6',默认'ipv4' 97 | $ip = $faker->ip(); // 235.13.245.196 98 | 99 | // 随机生成用户名 参数支持zh:中文,en:数字字母 100 | $userName = $faker->userName('zh'); // 101 | 102 | // 随机生成中文公司名称 103 | $companyName = $faker->companyName(); // 兰州汽车控股有限公司 104 | ``` 105 | 106 | 107 | 108 | ## 数据格式化 109 | 110 | ### 日期格式化 111 | 112 | WindSearch中,`date`数据类型会强制将**日期数据**转为**时间戳**存储,所以WS也提供了格式化日期的功能 113 | 114 | 任何会返回原始数据的检索模式,都可以配置`formatter` 115 | 116 | ```php 117 | // 搜索单个字段 118 | $query = [ 119 | 'match' => [ 120 | 'field' => [ 121 | 'name' => 'title', 122 | 'query' => $text, 123 | ], 124 | // 自定义返回字段 不设置则返回全部字段 125 | '_source' => ['title', 'phone_number'], 126 | 127 | // 返回结果格式化 128 | 'formatter' => [ 129 | // 日期格式化,time为自设的字段名称 130 | 'time' => [ 131 | // 格式化类型:日期 132 | 'type' => 'date', 133 | // 格式 134 | 'format' => 'Y-m-d' 135 | ], 136 | 137 | ], 138 | // 分页 139 | 'list_rows' => $listRows, //每页多少条数据 140 | 'page' => $page, //第几页 141 | 142 | 143 | ] 144 | 145 | ]; 146 | ``` 147 | 148 | 如果原始数据不存在正确的时间戳字段,则格式化结果会出现错误;如果`format`配置的字段错误,则不会进行任何处理。 149 | 150 | 151 | 152 | ### 数值转中文金额 153 | 154 | 【最新开发版支持】 155 | 156 | WindSearch支持将数值金额转为中文金额(中文金额示例:壹拾贰亿叁仟肆佰伍拾陆万) 157 | 158 | ```php 159 | // 搜索单个字段 160 | $query = [ 161 | 'match' => [ 162 | 'field' => [ 163 | 'name' => 'title', 164 | 'query' => $text, 165 | ], 166 | // 自定义返回字段 不设置则返回全部字段 167 | '_source' => ['title', 'phone_number'], 168 | 169 | // 返回结果格式化 170 | 'formatter' => [ 171 | // money字段 数字金额转中文金额 172 | 'money'=>[ 173 | 'type'=>'chinesemoney' 174 | ], 175 | 176 | ], 177 | // 分页 178 | 'list_rows' => $listRows, //每页多少条数据 179 | 'page' => $page, //第几页 180 | 181 | 182 | ] 183 | 184 | ]; 185 | ``` 186 | 187 | 注意,数字转中文金额的字段,只能是纯数值 188 | -------------------------------------------------------------------------------- /COMMERCIAL.md: -------------------------------------------------------------------------------- 1 | # 授权协议 2 | 3 | --- 4 | 5 | # **WindSearch 软件授权协议 v1.0** 6 | **生效日期:2025年2月5日** 7 | 8 | ## **一、定义** 9 | 10 | 1. **「本软件」**:指包含本协议的WindSearch所有版本及相关组件 11 | 2. **「竞品」**:任何提供全文检索功能的软件或服务(包括但不限于Elasticsearch、Meilisearch等) 12 | 3. **「外包企业」**:以承接第三方软件开发为主营业务的公司 13 | 4. **「小微企业」**:符合国家统计局划型标准(从业人员≤50人且营收≤500万元) 14 | 15 | ## **二、授权模式** 16 | 17 | **本软件采用双重授权模式:** 18 | 19 | 1. 根据AGPLv3协议免费使用,需遵守其全部条款 20 | 2. 或通过支付授权费获得商业许可,免除AGPL限制 21 | 22 | 23 | 您不得同时主张两种授权条款的权益,选择商业授权即自动退出AGPL约束 24 | 25 | **另:** 26 | 27 | 1. 任何个体或组织在AGPLv3协议下使用WindSearch时: 28 | 29 | 禁止移除搜索结果页脚「由WindSearch驱动」标识 30 | 禁止开发衍生品与WindSearch形成直接竞争 31 | 32 | 3. 特殊豁免: 33 | 大学生/残障人士创业:首年免费(需提交创业计划书+身份证明) 34 | 35 | ## **三、签署** 36 | 37 | 用户引入、安装、使用本软件即视为同意本协议全部条款。 -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # WindSearch 2.0 🔍 [![PHP Version](https://img.shields.io/badge/PHP-7.3%2B-brightgreen)]() 2 | 3 | ### 让PHP站内搜索变得像呼吸一样简单(新功能开发中...) 4 | 5 | [![AGPL License](https://img.shields.io/github/license/rock365/windsearch)](LICENSE) [![GitHub Stars](https://img.shields.io/github/stars/rock365/windsearch?style=social)](https://github.com/rock365/windsearch) 6 | 7 | 8 | 9 | 👏 **功能新增** 10 | 11 | 2.0版本新增: 12 | 13 | - [即用模式](https://github.com/rock365/windsearch/blob/main/CHANGELOG.md) 14 | - [Faker数据生成](https://github.com/rock365/windsearch/blob/main/CHANGELOG.md) 15 | - [日期格式化](https://github.com/rock365/windsearch/blob/main/CHANGELOG.md)(最新开发版) 16 | - [数字金额转中文金额](https://github.com/rock365/windsearch/blob/main/CHANGELOG.md)(最新开发版) 17 | 18 | 19 | 20 | 🚀 **一行代码开启极速搜索体验!** 21 | 22 | 使用composer安装: 23 | 24 | ```bash 25 | composer require rock365/windsearch 26 | ``` 27 | 28 | 或 使用Git安装: 29 | 30 | ```bash 31 | git clone git@github.com:rock365/windsearch.git 32 | ``` 33 | 34 | 或 直接在github下载。 35 | 36 | 37 | 38 | 📖 **在线文档** 39 | 40 | [https://rock365.github.io/](https://rock365.github.io/) 偶尔不稳定,多刷新几次就行 41 | 42 | 43 | 44 | 🚀 **PHP开发者苦ES久矣!** 45 | 46 | 还在为Elasticsearch的复杂配置头疼?WindSearch给您: 47 | 48 | - **零依赖**:无需Java环境,告别JVM调优噩梦 49 | - **中文友好**:内置中文分词程序,为中文搜索而生 50 | - **闪电速度**:百万数据毫秒级响应 51 | - **中文优化**:内置20万+专业词库,分词精度超98% 52 | - **内存克星**:小内存也能搜索大数据,内存占用为零 53 | 54 | 55 | 56 | 🚀 **众多优势** 57 | 58 | - ✅ 比数据库LIKE快**300倍**,比ES轻量**90%** 59 | - ✅ 天然适配**Laravel**/**ThinkPHP**等主流框架 60 | - ✅ 支持「全文搜索」「同义词扩展」「字段权重优化」「自定义分词插件」等 61 | - ✅ 支持增量索引合并 62 | - ✅ 支持实时索引、实时搜索 63 | - ✅ 支持搜索过滤 64 | - ✅ 支持int递增主键、uuid主键 65 | 66 | 67 | 68 | 🚀 **快速使用(配合[文档](https://rock365.github.io/)使用更佳)** 69 | 70 | *环境要求:* 71 | 72 | * UTF-8编码 73 | * PHP ≥7.3 74 | * mbstring Extension 75 | * PDO Extension 76 | * SQLite Extension 77 | 78 | 79 | 80 | *引入入口文件:* 81 | 82 | WindSearch安装完成后,引入入口文件,注意具体文件路径 83 | 84 | ```php 85 | require_once 'yourdirname/vendor/autoload.php'; 86 | ``` 87 | 88 | 89 | *建索引库:* 90 | 91 | 复制修改粘贴即可,跟mysql建表差不多 92 | 93 | ```php 94 | $mapping = [ 95 | //设置索引库的名称,比如对应的表名 96 | 'name' => 'test', 97 | // 字段配置 98 | 'field' => [ 99 | [ 100 | 'name' => 'id',// 主键名称 主键必须设置 101 | 'type' => 'primarykey', //数据类型为主键 必须设置 102 | 'primarykey_type' => 'Int_Incremental', // int递增 103 | ], 104 | [ 105 | 'name' => 'title', 106 | 'index' => true, // 是否索引此字段 107 | 'type' => 'text', 108 | 'analyzer' => 'segment', // 配置分词方式 109 | ], 110 | [ 111 | 'name' => 'tags', 112 | 'index' => true, 113 | 'type' => 'keyword', 114 | ] 115 | [ 116 | 'name' => 'score', 117 | 'type' => 'numeric', 118 | ], 119 | [ 120 | 'name' => 'time', 121 | 'type' => 'date' 122 | ], 123 | 124 | [ 125 | 'name' => 'descr', 126 | 'type' => 'text', 127 | ], 128 | 129 | ] 130 | 131 | ]; 132 | 133 | // 实例化对象 134 | $Wind = new \WindSearch\Index\Wind('test'); //test 当前索引库的名称 135 | //检查是否存在此索引库 136 | $is_index = $Wind->checkIndex(); 137 | // 如果存在此索引库 138 | if ($is_index) { 139 | //删除索引库 140 | $Wind->delIndex(); 141 | } 142 | //创建索引库 143 | $Wind->createIndex($mapping); 144 | ``` 145 | 146 | 147 | *导入数据:* 148 | 149 | ```php 150 | //实例化引擎 151 | $Wind = new \WindSearch\Index\Wind('test'); 152 | // 初始化 153 | $Wind->buildIndexInit(); 154 | // 开启分词,导入数据时,加true可加快速度 155 | $Wind->loadAnalyzer(true); 156 | 157 | // 数据量小(内容少于一万条),则可以一次性全部导入 158 | // selectAll... 159 | // $result:一次性查询的所有内容 160 | foreach ($result as $v) { 161 | $Wind->indexer($v); 162 | } 163 | // 批量写入文件保存 164 | $Wind->batchWrite(); 165 | ``` 166 | 167 | 168 | *构建索引:* 169 | 170 | ```php 171 | // 数据导入结束后,接着可立即调用此方法构建索引 172 | // 注意,数据量大时,此步骤会比较耗时 173 | $Wind->buildIndex(); 174 | ``` 175 | 176 | 177 | 178 | *开始搜索:* 179 | 180 | ```php 181 | //实例化引擎 182 | $Wind = new \WindSearch\Index\Wind('test'); 183 | 184 | //开启分词功能 185 | $Wind->loadAnalyzer(); 186 | 187 | //开始搜索 188 | 189 | // 搜索单个字段 190 | $query = [ 191 | 'match' => [ 192 | 'field' => [ 193 | 'name' => 'title', 194 | 'query' => $text, 195 | ], 196 | 'list_rows' => $listRows, //每页多少条数据 197 | 'page' => $page, //第几页 198 | 199 | ] 200 | 201 | ]; 202 | 203 | // 搜索接口 204 | $res = $Wind->search($query, $page, $listRows); 205 | // 返回的最终结果,可直接渲染到前台页面 206 | $resArr = $res['result']['_source']; 207 | ``` 208 | 209 | 210 | 以上流程可以快速实现一个PHP全文检索,当然,这些只是餐前小菜,WindSearch还有更深入、更丰富的搜索功能等你挖掘: 211 | 212 | 在线开发文档:[https://rock365.github.io/](https://rock365.github.io/) 偶尔访问不稳定,多刷新几次即可 213 | 214 | 215 | 216 | ### 👏 让PHP再次伟大! 217 | 218 | 点个star吧亲亲O(∩_∩)O~~谢谢大家! 219 | 220 | *联系方式:* 221 | 222 | 微信:azg555666 223 | 224 | ![](https://github.com/rock365/img/blob/main/afe22e05ee161083cfbd1336f7facd2.jpg) 225 | 226 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rock365/windsearch", 3 | "description": "WindSearch是一个基于中文分词,由纯PHP开发全文检索引擎,可快速搭建PHP站点的站内搜索,他没有任何繁琐的安装配置、不需要维护调优、不占用服务器内存、可与PHP项目完美融合在一起。", 4 | "type": "library", 5 | "license": "AGPL-3.0-or-later", 6 | "autoload": { 7 | "psr-4": { 8 | "WindSearch\\Index\\": "src/", 9 | "WindSearch\\Core\\": "src/lib/", 10 | "WindSearch\\DAO\\": "src/DAO/", 11 | "WindSearch\\Exceptions\\": "src/Exceptions/" 12 | } 13 | }, 14 | "authors": [ 15 | { 16 | "name": "rock365" 17 | } 18 | ], 19 | "require": { 20 | "php": ">=7.3" 21 | } 22 | } -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "d90edd042b43cd76ea3b5c083aeef1b9", 8 | "packages": [], 9 | "packages-dev": [], 10 | "aliases": [], 11 | "minimum-stability": "stable", 12 | "stability-flags": {}, 13 | "prefer-stable": false, 14 | "prefer-lowest": false, 15 | "platform": { 16 | "php": ">=7.3" 17 | }, 18 | "platform-dev": {}, 19 | "plugin-api-version": "2.6.0" 20 | } 21 | -------------------------------------------------------------------------------- /src/DAO/PDO_sqlite.php: -------------------------------------------------------------------------------- 1 | _obj = new \PDO('sqlite:' . $dbname); 29 | } catch (\PDOException $e) { 30 | $msg = 'PHP的pdo_sqlite扩展未开启'; 31 | $code = 0; 32 | throw new WindException($msg, $code); 33 | } 34 | } 35 | 36 | /** 37 | * 初始化各种表 38 | */ 39 | public function init($IndexName, $primarykey, $primarykeyType) 40 | { 41 | // 删除表的SQL语句 42 | $dropTableSql = "DROP TABLE IF EXISTS $IndexName"; 43 | // 执行SQL语句删除表 44 | $this->_obj->exec($dropTableSql); 45 | 46 | // 主键类型为整型递增,则索引存储结构为bitmap跟postlist 47 | if ($primarykeyType == 'Int_Incremental') { 48 | // 创建表 49 | // wind_sys_id 系统自增id,强制 50 | // $primarykey 用户自定义的主键 非强制 51 | $res = $this->_obj->exec("CREATE TABLE IF NOT EXISTS $IndexName ( 52 | wind_sys_id INTEGER PRIMARY KEY, 53 | $primarykey INTEGER, 54 | doc TEXT 55 | )"); 56 | // 对用户int主键字段创建唯一索引 57 | $sql_index = "CREATE UNIQUE INDEX IF NOT EXISTS idx_" . $primarykey . " ON " . $IndexName . "($primarykey);"; 58 | $this->_obj->exec($sql_index); 59 | } else { 60 | // 创建表 61 | $res = $this->_obj->exec("CREATE TABLE IF NOT EXISTS $IndexName ( 62 | wind_sys_id INTEGER PRIMARY KEY, 63 | $primarykey TEXT, 64 | doc TEXT 65 | )"); 66 | // 对用户UUID主键字段创建唯一索引 67 | $sql_index = "CREATE UNIQUE INDEX IF NOT EXISTS idx_" . $primarykey . " ON " . $IndexName . "($primarykey);"; 68 | $this->_obj->exec($sql_index); 69 | } 70 | 71 | if ((int)$res !== 0) { 72 | $msg = 'sqlite创建基础数据表失败(请检查<自定义主键>的名称是否为系统关键字,或进行其它检查)'; 73 | $code = 0; 74 | throw new WindException($msg, $code); 75 | } 76 | } 77 | 78 | /** 79 | * 开始事务 80 | */ 81 | public function beginTransaction() 82 | { 83 | $this->_obj->beginTransaction(); 84 | } 85 | 86 | /** 87 | * 提交事务 88 | */ 89 | public function commit() 90 | { 91 | $this->_obj->commit(); 92 | } 93 | 94 | /** 95 | * 运行语句 无数据返回 96 | */ 97 | public function exec($query) 98 | { 99 | $result = $this->_obj->exec($query); 100 | return $result; 101 | } 102 | 103 | /** 104 | * 查询单行数据 105 | */ 106 | public function getRow($query) 107 | { 108 | $resRow = false; 109 | $res = $this->_obj->query($query); 110 | if ($res) { 111 | $resRow = $res->fetch(\PDO::FETCH_ASSOC); 112 | } 113 | return $resRow; 114 | } 115 | 116 | 117 | /** 118 | * 查询多行数据 119 | */ 120 | public function getAll($query) 121 | { 122 | $resList = false; 123 | $res = $this->_obj->query($query); 124 | 125 | if ($res) { 126 | $resList = $res->fetchAll(\PDO::FETCH_ASSOC); 127 | } 128 | return $resList; 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /src/Exceptions/WindException.php: -------------------------------------------------------------------------------- 1 | 13 |

WindSearch全文检索中间件异常报告

14 |

' . $e->getMessage() . '

15 |

位于 '.$e->getFile().' ['.$e->getLine().'行]'.'

16 | '; 17 | // echo '

['.$e->getCode().']'.$e->getMessage().'

'; 18 | // echo '位于 '.$e->getFile().' ['.$e->getLine().'行]'; 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Exceptions/WindPDOException.php: -------------------------------------------------------------------------------- 1 | 12 |

WindSearch全文检索中间件PDO异常报告

13 |

' . $e->getMessage() . '

14 | '; 15 | 16 | // echo '

['.$e->getCode().']'.$e->getMessage().'

'; 17 | // echo '位于 '.$e->getFile().' ['.$e->getLine().'行]'; 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/lib/Boot.php: -------------------------------------------------------------------------------- 1 | render($e); 27 | } 28 | // 未被自定义的异常类捕获 29 | else { 30 | // die($e); 31 | echo '
32 |

WindSearch全文检索中间件异常报告

33 |

' . $e->getMessage() . '

34 |

位于 '.$e->getFile().' ['.$e->getLine().'行]'.'

35 |
'; 36 | exit; 37 | } 38 | } 39 | 40 | /** 41 | * 错误处理程序 42 | * 例如运行时错误:notice warning error 43 | */ 44 | public static function appError($errno, $errstr, $errfile = '', $errline = 0) 45 | { 46 | $mapping = [ 47 | 1 => ['E_ERROR', '致命错误'], 48 | 2 => ['E_WARNING', '警告'], 49 | 3 => ['E_NOTICE', '通知'], 50 | 4 => ['E_PARSE', '编译解析错误'], 51 | 5 => ['E_CORE_ERROR', '启动时内核初始化错误'], 52 | 6 => ['E_CORE_WARNING', '启动时内核初始化非致命错误'], 53 | 7 => ['E_COMPILE_ERROR', '编译致命错误'], 54 | 8 => ['E_COMPILE_WARNING', '编译警告'], 55 | 9 => ['E_USER_ERROR', '致命错误'], 56 | 10 => ['E_USER_WARNING', '警告'], 57 | 11 => ['E_USER_NOTICE', '通知'], 58 | 12 => ['E_STRICT', '编码标准化警告'], 59 | 13 => ['E_RECOVERABLE_ERROR', '接受到可恢复的致命错误'], 60 | 12 => ['E_STRICT', '编码标准化警告'], 61 | ]; 62 | $error = $mapping[$errno][0] . '[' . $mapping[$errno][1] . ']: ' . $errstr . ''; 63 | $error2 = " $errfile on line $errline"; 64 | echo '
65 |

PHP全文检索中间件错误报告

66 |

' . $error . '

' . $error2 . '

67 |
'; 68 | // exit; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/lib/BuildTrie.php: -------------------------------------------------------------------------------- 1 | trieDataDir = $dir . $fileName; 17 | } 18 | 19 | 20 | public function insert($str) 21 | { 22 | $str = trim($str); 23 | $str = preg_replace("/\s+|\|/", "", $str); 24 | $str = strtolower($str); 25 | // 递归插入 26 | $this->insert_recursion($this->trieArr, $str); 27 | } 28 | 29 | private function insert_recursion(&$res, $str) 30 | { 31 | $sub = mb_substr($str, 0, 1); 32 | if ($sub) { 33 | if (!isset($res[$sub])) { 34 | $res[$sub] = []; 35 | } 36 | } 37 | $sub2 = mb_substr($str, 1); 38 | if ($sub2) { 39 | $this->insert_recursion($res[$sub], $sub2); 40 | } else { 41 | $res[$sub]['end'] = true; 42 | } 43 | return $res; 44 | } 45 | 46 | public function storage() 47 | { 48 | return file_put_contents($this->trieDataDir, json_encode($this->trieArr)); 49 | } 50 | 51 | private function check(&$trie, $str) 52 | { 53 | 54 | $sub = mb_substr($str, 0, 1); 55 | if ($sub) { 56 | if (isset($trie[$sub])) { 57 | // 存在,则返回true 58 | if (isset($trie[$sub]['end'])) { 59 | return true; 60 | } else { 61 | $sub2 = mb_substr($str, 1); 62 | if ($sub2) { 63 | 64 | return $this->check($trie[$sub], $sub2); 65 | } else { 66 | // 存在,则返回true 67 | // if (isset($trie[$sub]['end'])) { 68 | 69 | // return true; 70 | // } else { 71 | // return false; 72 | // } 73 | return false; 74 | } 75 | } 76 | } else { 77 | return false; 78 | } 79 | } else { 80 | return false; 81 | } 82 | } 83 | 84 | 85 | public function checkSensitive($word) 86 | { 87 | $this->loadData(); 88 | 89 | $len = mb_strlen($word); 90 | // $cutLen = ($len >= 10) ? 10 : $len; 91 | 92 | // 从第一个字开始遍历 93 | // for ($i = 0; $i < $len; ++$i) { 94 | // for ($n = 1; $n <= ($len - $i); ++$n) { 95 | // $sub = mb_substr($word, $i, $n); 96 | // if ($obj->search($sub)) { 97 | // return true; 98 | // }else{ 99 | // break; 100 | // } 101 | // } 102 | // } 103 | 104 | for ($i = 0; $i < $len; ++$i) { 105 | // 截取全部 106 | $sub = mb_substr($word, $i, $len - $i); 107 | 108 | if ($this->search($sub)) { 109 | return true; 110 | } 111 | } 112 | return false; 113 | } 114 | 115 | 116 | private static $allSensitiveWord = []; 117 | private static $tempSensitiveWord = ''; 118 | 119 | private function checkGet(&$trie, $str) 120 | { 121 | 122 | 123 | $sub = mb_substr($str, 0, 1); 124 | 125 | if ($sub) { 126 | 127 | if (isset($trie[$sub])) { 128 | 129 | self::$tempSensitiveWord .= $sub; 130 | // 存在,则返回true 131 | if (isset($trie[$sub]['end'])) { 132 | self::$allSensitiveWord[] = self::$tempSensitiveWord; 133 | } 134 | 135 | $sub2 = mb_substr($str, 1); 136 | 137 | if ($sub2) { 138 | return $this->checkGet($trie[$sub], $sub2); 139 | } else { 140 | return false; 141 | } 142 | } else { 143 | return false; 144 | } 145 | } else { 146 | return false; 147 | } 148 | } 149 | 150 | 151 | /** 152 | * 获取字符串内所有的敏感词 153 | */ 154 | public function checkSensitiveReplace($word, $replace = '**') 155 | { 156 | $this->loadData(); 157 | 158 | $len = mb_strlen($word); 159 | 160 | for ($i = 0; $i < $len; ++$i) { 161 | // 截取全部 162 | $sub = mb_substr($word, $i, $len - $i); 163 | $this->search_replace($sub); 164 | self::$tempSensitiveWord = ''; 165 | } 166 | if (!empty(self::$allSensitiveWord)) { 167 | $len = count(self::$allSensitiveWord); 168 | $replace_str = $replace; 169 | $comb_replace_str = array_pad([], $len, $replace_str); 170 | 171 | $comb = array_combine(self::$allSensitiveWord, $comb_replace_str); 172 | return strtr($word, $comb); 173 | } 174 | } 175 | 176 | /** 177 | * 获取所有敏感词 178 | */ 179 | public function getAllSensitiveWords($word) 180 | { 181 | 182 | $this->loadData(); 183 | 184 | $len = mb_strlen($word); 185 | 186 | for ($i = 0; $i < $len; ++$i) { 187 | // 截取全部 188 | $sub = mb_substr($word, $i, $len - $i); 189 | $this->search_replace($sub); 190 | self::$tempSensitiveWord = ''; 191 | } 192 | return self::$allSensitiveWord; 193 | } 194 | 195 | 196 | 197 | private function loadData() 198 | { 199 | if (empty($this->trieArr)) { 200 | if (is_file($this->trieDataDir)) { 201 | $this->trieArr = (array)json_decode(file_get_contents($this->trieDataDir), true); 202 | } 203 | } 204 | } 205 | 206 | 207 | /** 208 | * 搜索是否存在敏感词 209 | */ 210 | public function search($word) 211 | { 212 | return $this->check($this->trieArr, $word); 213 | } 214 | 215 | /** 216 | * 搜索替换敏感词 217 | */ 218 | public function search_replace($word) 219 | { 220 | return $this->checkGet($this->trieArr, $word); 221 | } 222 | } 223 | -------------------------------------------------------------------------------- /src/lib/Cache.php: -------------------------------------------------------------------------------- 1 | exec("CREATE TABLE IF NOT EXISTS cache ( 36 | id INTEGER PRIMARY KEY, 37 | search_key TEXT, 38 | content TEXT)"); 39 | // 对term字段创建唯一索引 40 | $sql = "CREATE UNIQUE INDEX IF NOT EXISTS idx_cache_cache ON cache(search_key);"; 41 | $pdo->exec($sql); 42 | } 43 | 44 | 45 | /** 46 | * 设置搜索结果缓存 47 | * @param $timeOut 缓存过期时间 秒 48 | */ 49 | public function setCache($key, $values, $cachetimeout, $indexname, $redisObj = false) 50 | { 51 | if (is_object($redisObj)) { 52 | $key = $indexname . '_' . $key; 53 | $values = base64_encode(gzdeflate($values)); 54 | $redisObj->setex($key, $cachetimeout, $values); 55 | } else { 56 | 57 | $this->initCache(); 58 | 59 | if ($key) { 60 | 61 | $key = $indexname . '_' . $key; 62 | 63 | $currDir = dirname(__FILE__); 64 | $dir = $currDir . '/../cache/cache.db'; 65 | 66 | $pdo = new PDO_sqlite($dir); 67 | 68 | $values = [ 69 | 'settime' => time(), 70 | 'timeout' => $cachetimeout, 71 | 'content' => $values, 72 | ]; 73 | 74 | $values = base64_encode(gzdeflate(json_encode($values))); 75 | 76 | $sql = "insert into cache (search_key,content)values('$key','$values');"; 77 | $pdo->exec($sql); 78 | } 79 | } 80 | } 81 | 82 | 83 | /** 84 | * 获取缓存 85 | */ 86 | public function getCache($key, $indexname, $redisObj = false) 87 | { 88 | if (is_object($redisObj)) { 89 | $key = $indexname . '_' . $key; 90 | $content = $redisObj->get($key); 91 | $res = json_decode(gzinflate(base64_decode($content)), true); 92 | return $res; 93 | } else { 94 | 95 | $this->initCache(); 96 | 97 | if ($key) { 98 | 99 | $key = $indexname . '_' . $key; 100 | 101 | $currDir = dirname(__FILE__); 102 | $dir = $currDir . '/../cache/cache.db'; 103 | 104 | $dbname = $dir; 105 | $pdo = new PDO_sqlite($dbname); 106 | 107 | 108 | $sql = "select id,content from cache where search_key='$key';"; 109 | $res = $pdo->getRow($sql); 110 | 111 | if ($res) { 112 | $content = isset($res['content']) ? $res['content'] : ''; 113 | $id = isset($res['id']) ? $res['id'] : ''; 114 | 115 | if ($content != '') { 116 | $res = json_decode(gzinflate(base64_decode($content)), true); 117 | 118 | $timeout = $res['timeout']; 119 | $content = $res['content']; 120 | $settime = $res['settime']; 121 | 122 | // 判断过期 123 | if ((int)$timeout > 0) { 124 | // 过期 125 | if ((time() - $settime) > $timeout) { 126 | // 删除过期缓存 127 | $sql = "delete from cache where id='$id';"; 128 | $pdo->exec($sql); 129 | $content = false; 130 | } 131 | } 132 | } 133 | } else { 134 | $content = false; 135 | } 136 | 137 | 138 | return $content; 139 | } else { 140 | return false; 141 | } 142 | } 143 | } 144 | 145 | 146 | /** 147 | * 删除整个缓存文件夹 148 | */ 149 | public function delCache() 150 | { 151 | // $currDir = dirname(__FILE__); 152 | // $dir = $currDir . '/../cache/cache.db'; 153 | // $dbname = $dir; 154 | // $pdo = new PDO_sqlite($dbname); 155 | 156 | // $sql = "DROP TABLE IF EXISTS cache;"; 157 | // $pdo->exec($sql); 158 | 159 | $currDir = dirname(__FILE__); 160 | $dir = $currDir . '/../cache/'; 161 | 162 | $this->del_dir($dir); 163 | } 164 | 165 | 166 | /** 167 | * 删除文件夹及其文件夹下所有文件 168 | * @param $dir 要删除的文件夹路径 169 | */ 170 | private static function del_dir($dir) 171 | { 172 | if (substr($dir, -1) != '/') { 173 | $dir = $dir . '/'; 174 | } 175 | if (!is_dir($dir)) { 176 | return; 177 | } 178 | 179 | $fileList = scandir($dir); 180 | 181 | foreach ($fileList as $file) { 182 | 183 | if (($file != ".") && ($file != "..")) { 184 | $fullpath = $dir . $file; 185 | 186 | if (!is_dir($fullpath)) { 187 | 188 | unlink($fullpath); 189 | } else { 190 | self::del_chilren_dir($fullpath); 191 | } 192 | } 193 | } 194 | //删除当前文件夹 195 | rmdir($dir); 196 | } 197 | 198 | 199 | private static function del_chilren_dir($dir) 200 | { 201 | $fileList = scandir($dir); 202 | foreach ($fileList as $file) { 203 | 204 | if (($file != ".") && ($file != "..")) { 205 | $fullpath = $dir . '/' . $file; 206 | 207 | if (!is_dir($fullpath)) { 208 | unlink($fullpath); 209 | } else { 210 | self::del_chilren_dir($fullpath); 211 | } 212 | } 213 | } 214 | //删除当前文件夹: 215 | rmdir($dir); 216 | } 217 | } 218 | -------------------------------------------------------------------------------- /src/lib/Faker.php: -------------------------------------------------------------------------------- 1 | firstNameMale[array_rand($this->firstNameMale)]; 45 | } 46 | 47 | // 生成随机女性名字 48 | public function firstNameFemale() 49 | { 50 | return $this->firstNameFemale[array_rand($this->firstNameFemale)]; 51 | } 52 | 53 | // 生成随机姓氏 54 | public function lastName() 55 | { 56 | return $this->lastName[array_rand($this->lastName)]; 57 | } 58 | 59 | // 生成随机全名(可选性别) 60 | public function fullName($gender = null) 61 | { 62 | $firstName = ($gender === 'male') ? self::firstNameMale() : (($gender === 'female') ? self::firstNameFemale() : (self::firstNameMale() || self::firstNameFemale())); 63 | $lastName = self::lastName(); 64 | return "$firstName $lastName"; 65 | } 66 | 67 | 68 | private $nameList = []; 69 | // 生成随机中文人名 70 | public function name($gender = 'mix') 71 | { 72 | if ($gender == 'mix') { 73 | if (!isset($this->nameList['mix'])) { 74 | $this->nameList['mix'] = array_filter(explode(PHP_EOL, file_get_contents(__DIR__ . '/../windIndexCore/Chinese_character/name.txt'))); 75 | } 76 | } else if ($gender == 'male') { 77 | if (!isset($this->nameList['male'])) { 78 | $this->nameList['male'] = array_filter(explode(PHP_EOL, file_get_contents(__DIR__ . '/../windIndexCore/Chinese_character/name.txt'))); 79 | } 80 | } else if ($gender == 'female') { 81 | if (!isset($this->nameList['female'])) { 82 | $this->nameList['female'] = array_filter(explode(PHP_EOL, file_get_contents(__DIR__ . '/../windIndexCore/Chinese_character/name.txt'))); 83 | } 84 | } 85 | return $this->nameList[$gender][array_rand($this->nameList[$gender])]; 86 | } 87 | 88 | // 生成随机长度数字 89 | public function number($len = 10) 90 | { 91 | $first = random_int(1, 9); 92 | $randomNumber = ''; 93 | for ($i = 0; $i < ($len - 1); ++$i) { 94 | $randomNumber .= random_int(0, 9); 95 | } 96 | return $first . $randomNumber; 97 | } 98 | 99 | // 生成随机手机号 100 | public function phoneNumber($len = 11) 101 | { 102 | $beg = ['138', '139', '176', '178', '158', '159', '188', '189']; 103 | $randomNumber = ''; 104 | for ($i = 0; $i < ($len - 3); ++$i) { 105 | $randomNumber .= random_int(0, 9); 106 | } 107 | return $beg[array_rand($beg)] . $randomNumber; 108 | } 109 | 110 | // 生成随机电子邮件 111 | public function email() 112 | { 113 | // $firstName = self::firstNameMale() || self::firstNameFemale(); 114 | // $lastName = self::lastName(); 115 | // $domain = $this->domains[array_rand($this->domains)]; 116 | // return strtolower("$firstName.$lastName@$domain"); 117 | 118 | $domain = $this->domains[array_rand($this->domains)]; 119 | return self::number(10) . '@' . $domain; 120 | } 121 | 122 | // 生成随机地址 123 | public function address() 124 | { 125 | // $streetNames = ["Main", "Oak", "Pine", "Maple", "Birch"]; 126 | // $streetTypes = ["St", "Ave", "Blvd", "Ln", "Rd"]; 127 | // $cityNames = ["Springfield", "Shelbyville", "Bedrock", "Gotham", "Metropolis"]; 128 | // $states = ["AL", "AK", "AZ", "AR", "CA"]; // 仅作为示例,仅列出几个州 129 | 130 | // $streetName = $streetNames[array_rand($streetNames)]; 131 | // $streetType = $streetTypes[array_rand($streetTypes)]; 132 | // $streetNumber = rand(100, 999); 133 | // $cityName = $cityNames[array_rand($cityNames)]; 134 | // $state = $states[array_rand($states)]; 135 | // $zipCode = rand(10000, 99999); 136 | 137 | // return "$streetNumber $streetName $streetType, $cityName, $state $zipCode"; 138 | 139 | $arr = explode(PHP_EOL, file_get_contents(__DIR__ . '/../windIndexCore/Chinese_character/Chinese_character.txt')); 140 | shuffle($arr); 141 | $characters = implode('', $arr); 142 | $len = mb_strlen($characters); 143 | $res = []; 144 | for ($i = 0; $i < 6; ++$i) { 145 | $res[] = mb_substr($characters, rand(0, $len - 10), 2); 146 | } 147 | $division = ['省', '市', '县', '镇', '村', '组']; 148 | $adress = ''; 149 | foreach ($res as $v) { 150 | $curr = array_shift($division); 151 | $adress .= $v . $curr . ' '; 152 | } 153 | return $adress . rand(100, 999) . '号'; 154 | } 155 | 156 | // 生成随机布尔值 157 | public function boolean() 158 | { 159 | return rand(0, 1) === 1; 160 | } 161 | 162 | private $Chinese_character = []; 163 | // 生成随机文本 164 | public function text($type = 'zh', $length = 100) 165 | { 166 | if ($type == 'zh') { 167 | if (!isset($this->Chinese_character['zh'])) { 168 | $this->Chinese_character['zh'] = trim(str_replace(PHP_EOL, '', file_get_contents(__DIR__ . '/../windIndexCore/Chinese_character/Chinese_character.txt'))); 169 | } 170 | 171 | $connector = ''; 172 | } else if ($type == 'en') { 173 | if (!isset($this->Chinese_character['en'])) { 174 | $this->Chinese_character['en'] = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; 175 | } 176 | $connector = ''; 177 | } else { 178 | if (!isset($this->Chinese_character['zh'])) { 179 | $this->Chinese_character['zh'] = trim(str_replace(PHP_EOL, '', file_get_contents(__DIR__ . '/../windIndexCore/Chinese_character/Chinese_character.txt'))); 180 | } 181 | 182 | $connector = ''; 183 | } 184 | 185 | $len = mb_strlen($this->Chinese_character[$type]); 186 | $text = ''; 187 | for ($i = 0; $i < $length; $i++) { 188 | $text .= mb_substr($this->Chinese_character[$type], rand(0, $len - 1), 1); 189 | } 190 | $res = ''; 191 | while (strlen($text) > 0) { 192 | $cutlen = rand(3, 7); 193 | $res .= $connector . mb_substr($text, 0, $cutlen); 194 | $text = mb_substr($text, $cutlen); 195 | } 196 | $res = trim($res); 197 | $res = trim($res, ','); 198 | return $res; 199 | } 200 | 201 | // 生成随机uuid 202 | public function uuid() 203 | { 204 | 205 | //根据当前时间(微秒计)生成唯一id 206 | $charid = strtoupper(md5(uniqid(rand(), true))); 207 | // 连接符 208 | $hyphen = '-'; 209 | 210 | $uuid = substr($charid, 0, 8) . $hyphen . substr($charid, 8, 4) . $hyphen . substr($charid, 12, 4) . $hyphen . substr($charid, 16, 4) . $hyphen . substr($charid, 20, 12); 211 | 212 | return $uuid; 213 | } 214 | 215 | // 生成随机日期 216 | public function date($start = '1970-01-01', $end = '') 217 | { 218 | // 定义起始日期和结束日期 219 | $startDate = $start; 220 | $endDate = ($end == '') ? date('Y-m-d', time()) : $end; 221 | 222 | // 将起始日期和结束日期转换为时间戳 223 | $startTimestamp = strtotime($startDate); 224 | $endTimestamp = strtotime($endDate); 225 | 226 | // 生成一个位于起始时间戳和结束时间戳之间的随机时间戳 227 | $randomTimestamp = $startTimestamp + rand(0, $endTimestamp - $startTimestamp); 228 | 229 | // 将随机时间戳格式化为日期 230 | $randomDate = date('Y-m-d', $randomTimestamp); 231 | 232 | return $randomDate; 233 | } 234 | 235 | 236 | private function getRandomHexColor($includeAlpha = false) 237 | { 238 | $hex = '#'; 239 | if ($includeAlpha) { 240 | // 8位十六进制,包括alpha通道 241 | $hex .= dechex(rand(0, 0xFFFFFFFF) & 0xFFFFFFFF); 242 | // 确保长度是8位(可能需要填充前导零) 243 | $hex = substr($hex, 0, 9); // 保留#号和一个字符,然后截取到8位 244 | } else { 245 | // 6位十六进制 246 | $hex .= dechex(rand(0, 0xFFFFFF) & 0xFFFFFF); 247 | // 确保长度是6位(可能需要填充前导零) 248 | $hex = substr($hex, 0, 7); // 保留#号和六个字符 249 | } 250 | return $hex; 251 | } 252 | 253 | private function getRandomRGBColor() 254 | { 255 | return sprintf('rgb(%d, %d, %d)', rand(0, 255), rand(0, 255), rand(0, 255)); 256 | } 257 | 258 | private function getRandomRGBAColor() 259 | { 260 | $alpha = rand(0, 100) / 100.0; // 生成0到1之间的浮点数 261 | return sprintf('rgba(%d, %d, %d, %.2f)', rand(0, 255), rand(0, 255), rand(0, 255), $alpha); 262 | } 263 | private function getRandomHSLColor() 264 | { 265 | $hue = rand(0, 360); // 色调:0到360度 266 | $saturation = rand(0, 100); // 饱和度:0%到100% 267 | $lightness = rand(0, 100); // 亮度:0%到100% 268 | return sprintf('hsl(%d, %d, %d)', $hue, $saturation, $lightness); 269 | } 270 | // 生成随机颜色值 271 | public function color($type = 'hex') 272 | { 273 | 274 | if ($type == 'hex') { 275 | return self::getRandomHexColor(); // 例如: #3e2f1b true:#3e2f1b22 276 | } else if ($type == 'rgb') { 277 | return self::getRandomRGBColor(); 278 | } else if ($type == 'rgba') { 279 | return self::getRandomRGBAColor(); 280 | } else if ($type == 'hsl') { 281 | return self::getRandomHSLColor(); 282 | } else { 283 | return self::getRandomHexColor(); // 例如: #3e2f1b true:#3e2f1b22 284 | } 285 | } 286 | 287 | // 生成随机工号 288 | public function employeeID($length = 10, $prefix = '') 289 | { 290 | 291 | $len = $length - mb_strlen($prefix); 292 | return $prefix . self::number($len); 293 | // 生成随机字节 294 | $randomBytes = random_bytes(ceil($length / 2)); 295 | // 转换为十六进制字符串 296 | $hexString = bin2hex($randomBytes); 297 | // 截取指定长度的字符串 298 | $employeeID = substr($hexString, 0, $length); 299 | 300 | // 如果长度不足,则继续补充随机字符(可选) 301 | if (strlen($employeeID) < $length) { 302 | $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 303 | $charactersLength = strlen($characters); 304 | for ($i = strlen($employeeID); $i < $length; $i++) { 305 | $employeeID .= $characters[rand(0, $charactersLength - 1)]; 306 | } 307 | } 308 | 309 | // 返回生成的唯一工号 310 | return $employeeID; 311 | } 312 | 313 | 314 | private function generateRandomIPv4() 315 | { 316 | return implode('.', array_map(function () { 317 | return rand(0, 255); 318 | }, range(1, 4))); 319 | } 320 | 321 | private function generateRandomIPv6() 322 | { 323 | $hexChars = '0123456789abcdef'; 324 | $ipv6 = []; 325 | for ($i = 0; $i < 8; $i++) { 326 | $segment = ''; 327 | for ($j = 0; $j < 4; $j++) { 328 | $segment .= $hexChars[rand(0, 15)]; 329 | } 330 | $ipv6[] = $segment; 331 | } 332 | return implode(':', $ipv6); 333 | } 334 | 335 | // 生成随机ip 336 | public function ip($type = 'ipv4') 337 | { 338 | if ($type == 'ipv4') { 339 | return self::generateRandomIPv4(); 340 | } else if ($type == 'ipv6') { 341 | return self::generateRandomIPv6(); 342 | } else { 343 | return self::generateRandomIPv4(); 344 | } 345 | } 346 | 347 | 348 | // 生成随机用户名 349 | public function userName($type = 'zh', $length = 6) 350 | { 351 | $rep = [ 352 | ' ' => '', 353 | ',' => '', 354 | ]; 355 | return strtr(self::text($type, $length), $rep); 356 | } 357 | 358 | // 生成随机公司名称 359 | public function companyName() 360 | { 361 | // 定义地点 362 | $locations = [ 363 | "哈尔滨", // 黑龙江省省会 364 | "长春", // 吉林省省会 365 | "沈阳", // 辽宁省省会 366 | "石家庄", // 河北省省会 367 | "郑州", // 河南省省会 368 | "济南", // 山东省省会 369 | "太原", // 山西省省会 370 | "合肥", // 安徽省省会 371 | "武汉", // 湖北省省会 372 | "长沙", // 湖南省省会 373 | "南京", // 江苏省省会 374 | "成都", // 四川省省会 375 | "贵阳", // 贵州省省会 376 | "昆明", // 云南省省会 377 | "西安", // 陕西省省会 378 | "兰州", // 甘肃省省会 379 | "南昌", // 江西省省会 380 | "杭州", // 浙江省省会 381 | "广州", // 广东省省会 382 | "福州", // 福建省省会 383 | "海口", // 海南省省会 384 | "南宁", // 广西壮族自治区首府 385 | "呼和浩特", // 内蒙古自治区首府 386 | "拉萨", // 西藏自治区首府 387 | "银川", // 宁夏回族自治区首府 388 | "乌鲁木齐", // 新疆维吾尔自治区首府 389 | "西宁", // 青海省省会 390 | "台北", // 台湾省省会 391 | "北京" // 首都 392 | ]; 393 | // 名称 394 | $adjectives = [ 395 | "创新", 396 | "智慧", 397 | "科技", 398 | "金融", 399 | "教育", 400 | "健康", 401 | "环保", 402 | "能源", 403 | "信息", 404 | "传媒", 405 | "网络", 406 | "国际", 407 | "投资", 408 | "发展", 409 | "管理", 410 | "咨询", 411 | "服务", 412 | "制造", 413 | "建设", 414 | "设计", 415 | "软件", 416 | "硬件", 417 | "生物", 418 | "文化", 419 | "旅游", 420 | "物流", 421 | "电子", 422 | "商务", 423 | "农业", 424 | "食品", 425 | "医药", 426 | "汽车", 427 | "通信", 428 | "互联网", 429 | "大数据", 430 | "云计算", 431 | "人工智能", 432 | "物联网", 433 | "区块链", 434 | "新能源", 435 | "新材料", 436 | "智能制造", 437 | "智慧城市", 438 | "绿色", 439 | "数字" 440 | ]; 441 | // 后缀 442 | $suffixs = ['集团', '有限公司', '公司', '集团股份有限公司', '控股有限公司']; 443 | 444 | // 从每个列表中随机选择一个或多个词汇(这里每个列表只选一个) 445 | $adjective = $adjectives[array_rand($adjectives)]; 446 | 447 | $location = $locations[array_rand($locations)]; 448 | $suffix = $suffixs[array_rand($suffixs)]; 449 | // 组合成公司名称(这里不加入地点名词,如果需要可以加上) 450 | $companyName = $location . $adjective . $suffix; 451 | // 如果需要地点名词,可以这样组合:$companyName = $location . $adjective . $noun; 452 | 453 | // 返回生成的随机公司名称 454 | return $companyName; 455 | } 456 | } 457 | -------------------------------------------------------------------------------- /src/lib/Func.php: -------------------------------------------------------------------------------- 1 | primarykeyType = $param; 14 | } 15 | 16 | 17 | /** 18 | * 双指针求交集 19 | */ 20 | public function doublepointer_intersection($arr1, $arr2) 21 | { 22 | 23 | // 系统交集函数 24 | if ($this->primarykeyType == 'UUID') { 25 | return array_intersect($arr1, $arr2); 26 | } 27 | 28 | sort($arr1); 29 | sort($arr2); 30 | 31 | $result = []; 32 | $count1 = count($arr1); 33 | $count2 = count($arr2); 34 | $i = $j = 0; 35 | 36 | while ($i < $count1 && $j < $count2) { 37 | if ($arr1[$i] < $arr2[$j]) { 38 | $i++; 39 | } elseif ($arr1[$i] > $arr2[$j]) { 40 | $j++; 41 | } else { 42 | $result[] = $arr1[$i]; 43 | $i++; 44 | $j++; 45 | } 46 | } 47 | 48 | return $result; 49 | } 50 | 51 | /** 52 | * 双指针求交集 支持多个数组 53 | */ 54 | public function multi_doublepointer_intersection($array1 = []) 55 | { 56 | 57 | // 获取传入的所有参数 58 | $arrays = func_get_args(); 59 | 60 | // 系统交集函数 61 | if ($this->primarykeyType == 'UUID') { 62 | return array_intersect(...$arrays); 63 | } 64 | 65 | // 对每个int数组排序成递增形式 66 | $arrays = array_map(function ($p) { 67 | // 升序排列,且索引值从0开始 68 | sort($p); 69 | return $p; 70 | }, $arrays); 71 | 72 | // 踢出第一个数组,并保存,作为比对基础 73 | $result = array_shift($arrays); 74 | // 再依次拿出剩下的数组进行比对 75 | while (!empty($arrays)) { 76 | $next = array_shift($arrays); 77 | 78 | $tempResult = []; 79 | $count1 = count($result); 80 | $count2 = count($next); 81 | $i = $j = 0; 82 | 83 | while ($i < $count1 && $j < $count2) { 84 | if ($result[$i] < $next[$j]) { 85 | $i++; 86 | } elseif ($result[$i] > $next[$j]) { 87 | $j++; 88 | } else { 89 | $tempResult[] = $result[$i]; 90 | $i++; 91 | $j++; 92 | } 93 | } 94 | 95 | $result = $tempResult; 96 | } 97 | 98 | return $result; 99 | } 100 | 101 | 102 | /** 103 | * 跳步求交集 104 | */ 105 | public function skip_intersection($arr1, $arr2) 106 | { 107 | 108 | // 系统交集函数 109 | if ($this->primarykeyType == 'UUID') { 110 | return array_intersect($arr1, $arr2); 111 | } 112 | 113 | sort($arr1); 114 | sort($arr2); 115 | $result = []; 116 | $count1 = count($arr1); 117 | $count2 = count($arr2); 118 | $i = $j = 0; 119 | $step = 1000; 120 | $count = 0; 121 | 122 | while (($i < $count1) && ($j < $count2)) { 123 | 124 | if ($arr1[$i] == $arr2[$j]) { 125 | 126 | $result[] = $arr1[$i]; 127 | $i++; 128 | $j++; 129 | $count++; 130 | } else if ($arr1[$i] < $arr2[$j]) { 131 | if (($i + $step) < $count1) { 132 | if ($arr1[$i + $step] < $arr2[$j]) { 133 | $i = $i + $step; 134 | $count++; 135 | } else { 136 | $i++; 137 | $count++; 138 | } 139 | } else { 140 | $i++; 141 | $count++; 142 | } 143 | } else if ($arr1[$i] > $arr2[$j]) { 144 | if (($j + $step) < $count2) { 145 | if ($arr2[$j + $step] < $arr1[$i]) { 146 | $j = $j + $step; 147 | $count++; 148 | } else { 149 | $j++; 150 | $count++; 151 | } 152 | } else { 153 | $j++; 154 | $count++; 155 | } 156 | } 157 | } 158 | 159 | 160 | return $result; 161 | } 162 | 163 | 164 | /** 165 | * 跳步求交集 支持多个数组 166 | * 对int类型的多个数组求交集,效率比系统函数快太多 167 | */ 168 | public function multi_skip_intersection($array1 = []) 169 | { 170 | 171 | // 获取传入的所有参数 172 | $arrays = func_get_args(); 173 | 174 | 175 | return $this->multi_intersection(...$arrays); 176 | 177 | // 系统交集函数 178 | if ($this->primarykeyType === 'UUID') { 179 | return array_intersect(...$arrays); 180 | } else { 181 | return array_intersect(...$arrays); 182 | } 183 | 184 | // 对每个int数组排序成递增形式 185 | $arrays = array_map(function ($p) { 186 | // 升序排列,且索引值从0开始 187 | sort($p); 188 | return $p; 189 | }, $arrays); 190 | 191 | // 踢出第一个数组,并保存,作为比对基础 192 | $result = array_shift($arrays); 193 | // 再依次拿出剩下的数组进行比对 194 | while (!empty($arrays)) { 195 | $next = array_shift($arrays); 196 | 197 | $tempResult = []; 198 | $count1 = count($result); 199 | $count2 = count($next); 200 | $i = $j = 0; 201 | $step = 1000; 202 | $count = 0; 203 | 204 | while (($i < $count1) && ($j < $count2)) { 205 | 206 | if ($result[$i] == $next[$j]) { 207 | 208 | $tempResult[] = $result[$i]; 209 | $i++; 210 | $j++; 211 | $count++; 212 | } else if ($result[$i] < $next[$j]) { 213 | if (($i + $step) < $count1) { 214 | if ($result[$i + $step] < $next[$j]) { 215 | $i = $i + $step; 216 | $count++; 217 | } else { 218 | $i++; 219 | $count++; 220 | } 221 | } else { 222 | $i++; 223 | $count++; 224 | } 225 | } else if ($result[$i] > $next[$j]) { 226 | if (($j + $step) < $count2) { 227 | if ($next[$j + $step] < $result[$i]) { 228 | $j = $j + $step; 229 | $count++; 230 | } else { 231 | $j++; 232 | $count++; 233 | } 234 | } else { 235 | $j++; 236 | $count++; 237 | } 238 | } 239 | } 240 | 241 | $result = $tempResult; 242 | } 243 | 244 | return $result; 245 | } 246 | 247 | 248 | /** 249 | * int 多个数组,取交集,强制升序排序 250 | * 适合多个大数组 251 | */ 252 | public function multi_skip_intersection_bigdata($array1 = []) 253 | { 254 | 255 | // 获取传入的所有参数 256 | $arrays = func_get_args(); 257 | 258 | return $this->multi_intersection(...$arrays); 259 | 260 | 261 | // 系统交集函数 262 | if ($this->primarykeyType === 'UUID') { 263 | return array_intersect(...$arrays); 264 | } 265 | 266 | // 对每个int数组排序成递增形式 267 | $arrays = array_map(function ($p) { 268 | // 升序排列,且索引值从0开始 269 | sort($p); 270 | return $p; 271 | }, $arrays); 272 | 273 | // 踢出第一个数组,并保存,作为比对基础 274 | $result = array_shift($arrays); 275 | // 再依次拿出剩下的数组进行比对 276 | while (!empty($arrays)) { 277 | $next = array_shift($arrays); 278 | 279 | $tempResult = []; 280 | $count1 = count($result); 281 | $count2 = count($next); 282 | $i = $j = 0; 283 | $step = 200; 284 | $count = 0; 285 | 286 | while (($i < $count1) && ($j < $count2)) { 287 | 288 | if ($result[$i] == $next[$j]) { 289 | 290 | $tempResult[] = $result[$i]; 291 | $i++; 292 | $j++; 293 | $count++; 294 | } else if ($result[$i] < $next[$j]) { 295 | if (($i + $step) < $count1) { 296 | if ($result[$i + $step] < $next[$j]) { 297 | $i = $i + $step; 298 | $count++; 299 | } else { 300 | $i++; 301 | $count++; 302 | } 303 | } else { 304 | $i++; 305 | $count++; 306 | } 307 | } else if ($result[$i] > $next[$j]) { 308 | if (($j + $step) < $count2) { 309 | if ($next[$j + $step] < $result[$i]) { 310 | $j = $j + $step; 311 | $count++; 312 | } else { 313 | $j++; 314 | $count++; 315 | } 316 | } else { 317 | $j++; 318 | $count++; 319 | } 320 | } 321 | } 322 | 323 | $result = $tempResult; 324 | } 325 | 326 | return $result; 327 | } 328 | 329 | /** 330 | * 方法重写 key相同,其值则合并为一个数组 331 | * 无论key是字符串还是int,只要key相同,都会被合并 332 | */ 333 | public function array_merge_recursive($array1 = []) 334 | { 335 | $arrays = func_get_args(); 336 | 337 | $result = array_shift($arrays); 338 | 339 | while (!empty($arrays)) { 340 | $next = array_shift($arrays); 341 | foreach ($next as $key => $value) { 342 | if (isset($result[$key])) { 343 | if (!is_array($result[$key]) && !is_array($value)) { 344 | $result[$key] = [$result[$key], $value]; 345 | } else if (is_array($result[$key]) && !is_array($value)) { 346 | $result[$key][] = $value; 347 | } else if (!is_array($result[$key]) && is_array($value)) { 348 | $result[$key] = ($value[] = $result[$key]); 349 | } else if (is_array($result[$key]) && is_array($value)) { 350 | $result[$key] = $this->array_merge_recursive($result[$key], $value); 351 | } 352 | } else { 353 | $result[$key] = $value; 354 | } 355 | } 356 | } 357 | 358 | return $result; 359 | } 360 | 361 | 362 | /** 363 | * 一维数组 按键值进行排序 倒序,值相同时,保持原顺序 364 | */ 365 | public function uasort_val($array) 366 | { 367 | // 自定义比较函数,当值相同时返回0,表示保持原顺序 368 | uasort($array, function ($a, $b) { 369 | if ($a === $b) { 370 | return 0; 371 | } 372 | return ($a < $b) ? 1 : -1; 373 | }); 374 | 375 | return $array; 376 | } 377 | 378 | /** 379 | * 二维数组 按照某个字段值排序,值相同时,保持原顺序 380 | */ 381 | public function usortRes($items, $field = '', $sort = 'desc') 382 | { 383 | 384 | 385 | // 创建一个关联数组来跟踪原始顺序 386 | $order = []; 387 | foreach ($items as $index => $item) { 388 | $order[$index] = $item[$field]; 389 | } 390 | 391 | // 自定义比较函数 392 | function compareItems($a, $b, $order, $field, $sort) 393 | { 394 | // 如果id相同,则按照原始顺序排序 395 | if ($a[$field] == $b[$field]) { 396 | return array_search($a[$field], $order) <=> array_search($b[$field], $order); 397 | } 398 | if ($sort == 'desc') { 399 | // 否则按照id降序排序 400 | return $b[$field] <=> $a[$field]; 401 | } else { 402 | // 升序 403 | return $a[$field] <=> $b[$field]; 404 | } 405 | } 406 | 407 | // 使用usort进行排序 408 | usort($items, function ($a, $b) use ($order, $field, $sort) { 409 | return compareItems($a, $b, $order, $field, $sort); 410 | }); 411 | 412 | return $items; 413 | } 414 | 415 | 416 | 417 | /** 418 | * 判断字符串日期格式是否正确 419 | */ 420 | public function isValidDateString($date) 421 | { 422 | 423 | // 正则表达式匹配 YYYY-MM-DD 格式 424 | $pattern1 = '/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/'; 425 | // 正则表达式匹配 DD-MM-YYYY 格式 426 | $pattern2 = '/^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-\d{4}$/'; 427 | 428 | // 正则表达式匹配 YYYY-MM-DD HH:MM:SS 格式 429 | $pattern3 = '/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/'; 430 | // 正则表达式匹配 DD-MM-YYYY HH:MM:SS 格式 431 | $pattern4 = '/^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-\d{4} ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/'; 432 | 433 | // 检查日期字符串是否匹配任一模式 434 | if (preg_match($pattern1, $date) || preg_match($pattern2, $date) || preg_match($pattern3, $date) || preg_match($pattern4, $date)) { 435 | return true; 436 | } else { 437 | return false; 438 | } 439 | } 440 | 441 | /** 442 | * 判断字符串日期格式是否只有年月日 443 | */ 444 | public function isNYRDateString($date) 445 | { 446 | 447 | // 正则表达式匹配 YYYY-MM-DD 格式 448 | $pattern1 = '/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/'; 449 | // 正则表达式匹配 DD-MM-YYYY 格式 450 | $pattern2 = '/^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-\d{4}$/'; 451 | 452 | 453 | // 检查日期字符串是否匹配任一模式 454 | if (preg_match($pattern1, $date) || preg_match($pattern2, $date)) { 455 | return true; 456 | } else { 457 | return false; 458 | } 459 | } 460 | 461 | 462 | /** 463 | * yield读取文件 464 | */ 465 | public function yield_fread_row() 466 | { 467 | return function ($dir) { 468 | $file = fopen($dir, "r"); 469 | while ($line = fgets($file)) { 470 | yield $line; 471 | } 472 | }; 473 | } 474 | 475 | 476 | /** 477 | * 生成指定范围的hash值 478 | */ 479 | public function get_hash($key, $max) 480 | { 481 | $l = strlen($key); 482 | $h = 0x238f13af; 483 | while ($l--) { 484 | $h += ($h << 5); 485 | $h ^= ord(substr($key, $l, 1)); 486 | $h &= 0x7fffffff; 487 | } 488 | 489 | return ($h % $max); 490 | } 491 | 492 | 493 | public function substr_before($str, $find, $is_contain = false) 494 | { 495 | 496 | if (!$is_contain) { 497 | $pos = stripos($str, $find); 498 | if ($pos !== false) { 499 | return substr($str, 0, $pos); 500 | } else { 501 | return $str; 502 | } 503 | } 504 | //包含 查找的内容 505 | else { 506 | $pos = stripos($str, $find); 507 | if ($pos !== false) { 508 | return substr($str, 0, stripos($str, $find) + strlen($find)); 509 | } else { 510 | return $str; 511 | } 512 | } 513 | } 514 | 515 | 516 | private static function manualIntersection($array1, $array2) 517 | { 518 | $intersection = []; 519 | $hashMap = []; 520 | 521 | // 将第一个数组的元素存入哈希表 522 | foreach ($array1 as $value) { 523 | $hashMap[$value] = true; 524 | } 525 | // $hashMap = array_flip($array1); 526 | 527 | // 检查第二个数组中的元素是否在哈希表中 528 | foreach ($array2 as $value) { 529 | if (isset($hashMap[$value])) { 530 | $intersection[] = $value; 531 | } 532 | } 533 | unset($hashMap); 534 | return $intersection; 535 | } 536 | 537 | 538 | 539 | public function multi_intersection($array1 = []) 540 | { 541 | 542 | $arrays = func_get_args(); 543 | $result = array_shift($arrays); 544 | while (!empty($arrays)) { 545 | $next = array_shift($arrays); 546 | $result = self::manualIntersection($result, $next); 547 | } 548 | 549 | return $result; 550 | } 551 | 552 | 553 | public function new_base64_encode($text) 554 | { 555 | $res = base64_encode($text); 556 | $res = str_replace('+', '-', $res); 557 | $res = str_replace('/', '_', $res); 558 | $res = str_replace('=', '*', $res); 559 | return $res; 560 | } 561 | 562 | public function new_base64_decode($text) 563 | { 564 | $text = str_replace('-', '+', $text); 565 | $text = str_replace('_', '/', $text); 566 | $text = str_replace('*', '=', $text); 567 | $res = base64_decode($text); 568 | 569 | return $res; 570 | } 571 | 572 | 573 | 574 | 575 | public function numToChineseMoney($num) 576 | { 577 | 578 | $num = (float)$num; 579 | // 验证输入是否为数字 580 | if (!is_numeric($num)) { 581 | return "输入不是有效的数字"; 582 | } 583 | 584 | // 固定汉字 585 | $cnums = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; 586 | $cnyUnits = ["圆", "角", "分"]; 587 | $intUnits = ["", "拾", "佰", "仟"]; 588 | $intSections = ["", "万", "亿", "万亿"]; 589 | 590 | // 将数字格式化为两位小数,并拆分为整数和小数部分 591 | $num = round($num, 2); // 保留两位小数,四舍五入 592 | $parts = explode('.', sprintf('%.2f', $num)); 593 | $intPart = $parts[0]; // 整数部分 594 | $decPart = isset($parts[1]) ? $parts[1] : ''; // 小数部分 595 | 596 | $chineseMoney = ""; 597 | 598 | // 处理整数部分 599 | if ($intPart > 0) { 600 | $intLen = strlen($intPart); 601 | $zeroFlag = false; // 用于标记是否需要插入“零” 602 | for ($i = 0; $i < $intLen; $i++) { 603 | $n = $intPart[$i]; 604 | $p = $intLen - $i - 1; // 当前数字的位置(从右到左) 605 | $unitPos = $p % 4; // 当前节内的位置 606 | $sectionPos = intval($p / 4); // 当前属于第几节 607 | 608 | if ($n == "0") { 609 | $zeroFlag = true; 610 | } else { 611 | if ($zeroFlag) { 612 | $chineseMoney .= $cnums[0]; // 补零 613 | $zeroFlag = false; 614 | } 615 | $chineseMoney .= $cnums[$n] . $intUnits[$unitPos]; 616 | } 617 | 618 | // 每节结束时添加节单位(万、亿等),但避免最后一节多余的单位 619 | if ($unitPos == 0 && $sectionPos > 0) { 620 | $chineseMoney .= $intSections[$sectionPos]; 621 | } 622 | } 623 | $chineseMoney .= $cnyUnits[0]; // 添加“圆” 624 | } else { 625 | $chineseMoney .= $cnums[0] . $cnyUnits[0]; // 零圆 626 | } 627 | 628 | // 处理小数部分 629 | if ($decPart > 0) { 630 | $decLen = strlen($decPart); 631 | for ($i = 0; $i < $decLen; $i++) { 632 | $n = $decPart[$i]; 633 | if ($n != "0") { 634 | $chineseMoney .= $cnums[$n] . $cnyUnits[$i + 1]; 635 | } 636 | } 637 | } else { 638 | $chineseMoney .= "整"; // 如果没有小数部分,添加“整” 639 | } 640 | 641 | return $chineseMoney; 642 | } 643 | } 644 | -------------------------------------------------------------------------------- /src/lib/Geohash.php: -------------------------------------------------------------------------------- 1 | $latMax) { 28 | throw new WindException('纬度范围在-90到90之间', 0); 29 | } 30 | 31 | if ($lon < $lonMin || $lon > $lonMax) { 32 | throw new WindException('经度范围在-180到180之间', 0); 33 | } 34 | 35 | if (($precision !== null) && ($precision < $precisionMin || $precision > $precisionMax)) { 36 | throw new WindException('精度必须在1到12之间', 0); 37 | } 38 | 39 | // 如果没有设置精确度,则会不停逼近,直到与原始经纬度相同为止 40 | // 如果有精度参数,则只会逼近固定次数 41 | if ($precision === null) { 42 | // 得到经纬度小数位的长度 43 | $latDecimals = self::numberOfDecimals($lat); 44 | $lonDecimals = self::numberOfDecimals($lon); 45 | // 精度由低到高,使生成的值不断逼近输入经纬度的值 46 | foreach (range(1, 12) as $targetPrecision) { 47 | $hash = self::encode($lat, $lon, $targetPrecision); 48 | // 解码 用于跟原始经纬度比对 49 | $position = self::decode($hash); 50 | 51 | $latPosition = $position['lat']; 52 | $lonPosition = $position['lon']; 53 | // 保留固定小数位 54 | $latPosition = (float) number_format($latPosition, $latDecimals); 55 | $lonPosition = (float) number_format($lonPosition, $lonDecimals); 56 | // 直到精度与输入的值完全相同,返回编码结果 57 | if ($lat === $latPosition && $lon === $lonPosition) { 58 | return $hash; 59 | } 60 | 61 | $precision = 12; // 精度 62 | } 63 | } 64 | 65 | $idx = 0; // 它的值对应着base32字符串的固定位置,用于构成geohash字符串 66 | $bit = 0; // 逼近次数,每逼近5次,生成1位(geohash由多个位构成) 67 | $evenBit = true; //状态用于切换处理 68 | $geohash = ''; //最终的hash字符串 69 | $geohashLength = 0; //最终的geohash字符串的长度 70 | // 逼近操作 71 | while ($geohashLength < $precision) { 72 | if ($evenBit) { 73 | // 平分 东-西 经度 74 | $lonMid = ($lonMin + $lonMax) / 2; 75 | 76 | if ($lon >= $lonMid) { 77 | $idx = ($idx * 2) + 1; 78 | $lonMin = $lonMid; 79 | } else { 80 | $idx *= 2; 81 | $lonMax = $lonMid; 82 | } 83 | } else { 84 | // 平分 南-北 纬度 85 | $latMid = ($latMin + $latMax) / 2; 86 | 87 | if ($lat >= $latMid) { 88 | $idx = $idx * 2 + 1; 89 | $latMin = $latMid; 90 | } else { 91 | $idx *= 2; 92 | $latMax = $latMid; 93 | } 94 | } 95 | 96 | $evenBit = !$evenBit; 97 | 98 | 99 | if (++$bit === 5) { 100 | // 每5位,生成一个字符 101 | $geohash .= self::$base32[$idx]; 102 | // geohash字符串长度加1 103 | $geohashLength++; 104 | $bit = 0; 105 | $idx = 0; 106 | } 107 | } 108 | 109 | return $geohash; 110 | } 111 | 112 | 113 | public static function encodeLatLon($lat, $lon) 114 | { 115 | 116 | $latMin = -90.0; 117 | $latMax = 90.0; 118 | $lonMin = -180.0; 119 | $lonMax = 180.0; 120 | 121 | $precision = 12; //精度 12位编码 122 | $idx = 0; // 它的值对应着base32字符串的固定位置,用于构成geohash字符串 123 | $bit = 0; // 逼近次数,每逼近5次,生成1位(geohash由多个位构成) 124 | $evenBit = true; //状态用于切换处理 125 | $geohash = ''; //最终的hash字符串 126 | $geohashLength = 0; //最终的geohash字符串的长度 127 | // 逼近操作 128 | while ($geohashLength < $precision) { 129 | if ($evenBit) { 130 | // 平分 东-西 经度 131 | $lonMid = ($lonMin + $lonMax) / 2; 132 | 133 | if ($lon >= $lonMid) { 134 | 135 | $idx = ($idx * 2) + 1; 136 | $lonMin = $lonMid; 137 | } else { 138 | $idx *= 2; 139 | $lonMax = $lonMid; 140 | } 141 | } else { 142 | // 平分 南-北 纬度 143 | $latMid = ($latMin + $latMax) / 2; 144 | 145 | if ($lat >= $latMid) { 146 | $idx = $idx * 2 + 1; 147 | $latMin = $latMid; 148 | } else { 149 | $idx *= 2; 150 | $latMax = $latMid; 151 | } 152 | } 153 | 154 | $evenBit = !$evenBit; 155 | 156 | 157 | if (++$bit === 5) { 158 | // 每5位,生成一个字符 159 | $geohash .= self::$base32[$idx]; 160 | 161 | // geohash字符串长度加1 162 | $geohashLength++; 163 | $bit = 0; 164 | $idx = 0; 165 | } 166 | } 167 | 168 | return $geohash; 169 | } 170 | 171 | 172 | public static function decode($geohash) 173 | { 174 | $bounds = self::bounds($geohash); 175 | 176 | $latMin = $bounds['sw']['lat']; 177 | $lonMin = $bounds['sw']['lon']; 178 | $latMax = $bounds['ne']['lat']; 179 | $lonMax = $bounds['ne']['lon']; 180 | 181 | // cell centre 182 | $lat = ($latMin + $latMax) / 2; 183 | $lon = ($lonMin + $lonMax) / 2; 184 | 185 | // round to close to centre without excessive precision: ⌊2-log10(Δ°)⌋ decimal places 186 | $latPrecision = floor(2 - log10($latMax - $latMin)); 187 | $lonPrecision = floor(2 - log10($lonMax - $lonMin)); 188 | 189 | $latString = number_format($lat, (int) $latPrecision); 190 | $lonString = number_format($lon, (int) $lonPrecision); 191 | 192 | return [ 193 | 'lat' => (float) $latString, 194 | 'lon' => (float) $lonString, 195 | ]; 196 | } 197 | 198 | 199 | public static function bounds($geohash) 200 | { 201 | $geohash = strtolower($geohash); 202 | 203 | $evenBit = true; 204 | $latMin = -90.0; 205 | $latMax = 90.0; 206 | $lonMin = -180.0; 207 | $lonMax = 180.0; 208 | 209 | $geohashLength = strlen($geohash); 210 | 211 | for ($i = 0; $i < $geohashLength; $i++) { 212 | $char = $geohash[$i]; 213 | $idx = strpos(self::$base32, $char); 214 | 215 | for ($n = 4; $n >= 0; $n--) { 216 | $bitN = $idx >> $n & 1; 217 | 218 | if ($evenBit) { 219 | // longitude 220 | $lonMid = ($lonMin + $lonMax) / 2; 221 | if ($bitN === 1) { 222 | $lonMin = $lonMid; 223 | } else { 224 | $lonMax = $lonMid; 225 | } 226 | } else { 227 | // latitude 228 | $latMid = ($latMin + $latMax) / 2; 229 | 230 | if ($bitN === 1) { 231 | $latMin = $latMid; 232 | } else { 233 | $latMax = $latMid; 234 | } 235 | } 236 | 237 | $evenBit = !$evenBit; 238 | } 239 | } 240 | 241 | return [ 242 | 'sw' => ['lat' => $latMin, 'lon' => $lonMin], 243 | 'ne' => ['lat' => $latMax, 'lon' => $lonMax], 244 | ]; 245 | } 246 | 247 | public static function adjacent($geohash, $direction) 248 | { 249 | $geohash = strtolower($geohash); 250 | $direction = strtolower($direction); 251 | 252 | $neighbor = [ 253 | 'n' => ['p0r21436x8zb9dcf5h7kjnmqesgutwvy', 'bc01fg45238967deuvhjyznpkmstqrwx'], 254 | 's' => ['14365h7k9dcfesgujnmqp0r2twvyx8zb', '238967debc01fg45kmstqrwxuvhjyznp'], 255 | 'e' => ['bc01fg45238967deuvhjyznpkmstqrwx', 'p0r21436x8zb9dcf5h7kjnmqesgutwvy'], 256 | 'w' => ['238967debc01fg45kmstqrwxuvhjyznp', '14365h7k9dcfesgujnmqp0r2twvyx8zb'], 257 | ]; 258 | 259 | $border = [ 260 | 'n' => ['prxz', 'bcfguvyz'], 261 | 's' => ['028b', '0145hjnp'], 262 | 'e' => ['bcfguvyz', 'prxz'], 263 | 'w' => ['0145hjnp', '028b'], 264 | ]; 265 | 266 | $lastChar = substr($geohash, -1); 267 | $parent = substr($geohash, 0, -1); 268 | 269 | $type = strlen($geohash) % 2; 270 | 271 | // 检查不共享公共前缀的边缘情况 272 | if ($parent !== '' && strpos($border[$direction][$type], $lastChar) !== false) { 273 | $parent = self::adjacent($parent, $direction); 274 | } 275 | 276 | return $parent . self::$base32[strpos($neighbor[$direction][$type], $lastChar)]; 277 | } 278 | 279 | 280 | public static function neighbors($geohash) 281 | { 282 | $n = self::adjacent($geohash, 'n'); 283 | $s = self::adjacent($geohash, 's'); 284 | 285 | return [ 286 | 'n' => $n, 287 | 'ne' => self::adjacent($n, 'e'), 288 | 'e' => self::adjacent($geohash, 'e'), 289 | 'se' => self::adjacent($s, 'e'), 290 | 's' => $s, 291 | 'sw' => self::adjacent($s, 'w'), 292 | 'w' => self::adjacent($geohash, 'w'), 293 | 'nw' => self::adjacent($n, 'w'), 294 | ]; 295 | } 296 | 297 | /** 298 | * 返回小数位的长度 299 | */ 300 | private static function numberOfDecimals($value) 301 | { 302 | // 保留14位小数 位数四舍五入 303 | $string = number_format($value, 14); 304 | // 小数点的位置 305 | $point = strpos($string, '.'); 306 | 307 | // 截取小数点后面的数字 308 | $decimals = substr($string, $point + 1); 309 | 310 | // 删除右边的 0 311 | $decimals = rtrim($decimals, '0'); 312 | // 返回剩下内容的长度 313 | return strlen($decimals); 314 | } 315 | 316 | 317 | 318 | 319 | /** 320 | * 判断点是否在多边形内部(使用射线法) 321 | * 322 | * @param array $polygon 多边形顶点数组,每个顶点是一个包含纬度和经度的数组 323 | * @param float $pointLat 待判断点的纬度 324 | * @param float $pointLon 待判断点的经度 325 | * @return bool 是否在多边形内部 326 | */ 327 | public static function isPointInPolygon($polygon, $pointLat, $pointLon) 328 | { 329 | $numVertices = count($polygon); 330 | $j = $numVertices - 1; // 多边形的最后一个顶点的索引 331 | $oddNodes = false; // 用于记录射线与多边形边界的交点数量的奇偶性 332 | 333 | for ($i = 0; $i < $numVertices; $i++) { 334 | $vertexLat = $polygon[$i][0]; // 当前顶点的纬度 335 | $vertexLon = $polygon[$i][1]; // 当前顶点的经度 336 | $nextVertexLat = $polygon[$j][0]; // 下一个顶点的纬度 337 | $nextVertexLon = $polygon[$j][1]; // 下一个顶点的经度 338 | 339 | // 检查射线是否与当前边相交 340 | if (($pointLon < max($vertexLon, $nextVertexLon)) && 341 | ($pointLon > min($vertexLon, $nextVertexLon)) && 342 | ($pointLat < ($nextVertexLat - $vertexLat) * ($pointLon - $vertexLon) / ($nextVertexLon - $vertexLon) + $vertexLat) 343 | ) { 344 | $oddNodes = !$oddNodes; // 如果相交,则改变奇偶性 345 | } 346 | 347 | $j = $i; // 移动到下一个顶点 348 | } 349 | 350 | return $oddNodes; // 如果交点数量为奇数,则点在多边形内部 351 | } 352 | 353 | 354 | 355 | /************************************判断多边形相交*************************************** */ 356 | 357 | /** 358 | * 判断线段是否与多边形相交 359 | * 360 | * @param array $polygon 多边形顶点数组,每个顶点是一个包含纬度和经度的数组 361 | * @param array $line 线段的两个端点,每个端点是一个包含纬度和经度的数组 362 | * @return bool 是否相交 363 | */ 364 | private static function doLineIntersectPolygon($polygon, $line) 365 | { 366 | $numVertices = count($polygon); 367 | for ($i = 0, $j = $numVertices - 1; $i < $numVertices; $j = $i++) { 368 | if (self::doLineIntersectLine($polygon[$i], $polygon[$j], $line[0], $line[1])) { 369 | return true; 370 | } 371 | } 372 | return false; 373 | } 374 | 375 | /** 376 | * 判断两条线段是否相交 377 | * 378 | * @param array $p1 线段1的第一个端点(纬度,经度) 379 | * @param array $p2 线段1的第二个端点(纬度,经度) 380 | * @param array $p3 线段2的第一个端点(纬度,经度) 381 | * @param array $p4 线段2的第二个端点(纬度,经度) 382 | * @return bool 是否相交 383 | */ 384 | private static function doLineIntersectLine($p1, $p2, $p3, $p4) 385 | { 386 | // 计算方向 387 | $o1 = self::orientation($p1, $p2, $p3); 388 | $o2 = self::orientation($p1, $p2, $p4); 389 | $o3 = self::orientation($p3, $p4, $p1); 390 | $o4 = self::orientation($p3, $p4, $p2); 391 | 392 | // 一般情况 393 | if ($o1 != $o2 && $o3 != $o4) { 394 | return true; 395 | } 396 | 397 | // 特殊情况:共线但不相交 398 | if ($o1 == 0 && self::onSegment($p1, $p3, $p2)) return true; 399 | if ($o2 == 0 && self::onSegment($p1, $p4, $p2)) return true; 400 | if ($o3 == 0 && self::onSegment($p3, $p1, $p4)) return true; 401 | if ($o4 == 0 && self::onSegment($p3, $p2, $p4)) return true; 402 | 403 | return false; 404 | } 405 | 406 | /** 407 | * 计算三点的方向 408 | * 409 | * @param array $p 起点(纬度,经度) 410 | * @param array $q 中间点(纬度,经度) 411 | * @param array $r 终点(纬度,经度) 412 | * @return int 方向:0表示共线,-1表示顺时针,1表示逆时针 413 | */ 414 | private static function orientation($p, $q, $r) 415 | { 416 | $val = ($q[0] - $p[0]) * ($r[1] - $q[1]) - ($q[1] - $p[1]) * ($r[0] - $q[0]); 417 | if ($val == 0) return 0; // 共线 418 | return ($val > 0) ? 1 : 2; // 顺时针或逆时针,这里简化为1和2,实际代码中可以用-1和1表示 419 | } 420 | 421 | /** 422 | * 判断点是否在线段上 423 | * 424 | * @param array $p 线段的起点 425 | * @param array $q 线段的终点 426 | * @param array $r 待判断的点 427 | * @return bool 是否在线段上 428 | */ 429 | private static function onSegment($p, $q, $r) 430 | { 431 | return $q[0] >= min($p[0], $r[0]) && $q[0] <= max($p[0], $r[0]) && 432 | $q[1] >= min($p[1], $r[1]) && $q[1] <= max($p[1], $r[1]); 433 | } 434 | 435 | /** 436 | * 判断两个多边形是否存在相交 437 | * 438 | * @param array $polygon1 第一个多边形的顶点数组 439 | * @param array $polygon2 第二个多边形的顶点数组 440 | * @return bool 是否相交 441 | */ 442 | public static function doPolygonsIntersect($polygon1, $polygon2) 443 | { 444 | // 检查polygon1的每条边是否与polygon2相交 445 | $numEdges1 = count($polygon1); 446 | for ($i = 0; $i < $numEdges1; $i++) { 447 | $edge = [$polygon1[$i], $polygon1[($i + 1) % $numEdges1]]; 448 | if (self::doLineIntersectPolygon($polygon2, $edge)) { 449 | return true; 450 | } 451 | } 452 | 453 | // 检查polygon2的每条边是否与polygon1相交(理论上这一步是多余的,因为相交是对称的,但为了代码的清晰性还是加上) 454 | // 在实际应用中,可以根据需要省略这一步 455 | $numEdges2 = count($polygon2); 456 | for ($i = 0; $i < $numEdges2; $i++) { 457 | $edge = [$polygon2[$i], $polygon2[($i + 1) % $numEdges2]]; 458 | // 注意:这里实际上不需要再次检查与polygon1的相交,因为上面的循环已经做过了 459 | // 这里只是为了展示如何遍历polygon2的边,实际代码中应该省略这个循环或将其注释掉 460 | } 461 | 462 | // 如果没有发现相交,则返回false 463 | return false; 464 | } 465 | } 466 | -------------------------------------------------------------------------------- /src/lib/TimSort.php: -------------------------------------------------------------------------------- 1 | MIN_MERGE) { 17 | $this->insertionSort($array, $i, min($i + $this->MIN_MERGE - 1, $n - 1)); 18 | } 19 | 20 | // Merge the sorted chunks 21 | for ($size = $this->MIN_MERGE; $size < $n; $size = 2 * $size) { 22 | for ($left = 0; $left < $n; $left += 2 * $size) { 23 | $mid = min($n - 1, $left + $size - 1); 24 | $right = min($n - 1, $left + 2 * $size - 1); 25 | if ($mid < $right) { 26 | $this->merge($array, $left, $mid, $right); 27 | } 28 | } 29 | } 30 | } 31 | 32 | private function insertionSort(&$array, $left, $right) { 33 | for ($i = $left + 1; $i <= $right; $i++) { 34 | $temp = $array[$i]; 35 | $j = $i - 1; 36 | while ($j >= $left && $array[$j] > $temp) { 37 | $array[$j + 1] = $array[$j]; 38 | $j--; 39 | } 40 | $array[$j + 1] = $temp; 41 | } 42 | } 43 | 44 | private function merge(&$array, $left, $mid, $right) { 45 | $temp = []; 46 | $i = $left; 47 | $j = $mid + 1; 48 | $k = 0; 49 | 50 | while ($i <= $mid && $j <= $right) { 51 | if ($array[$i] <= $array[$j]) { 52 | $temp[$k++] = $array[$i++]; 53 | } else { 54 | $temp[$k++] = $array[$j++]; 55 | } 56 | } 57 | 58 | while ($i <= $mid) { 59 | $temp[$k++] = $array[$i++]; 60 | } 61 | 62 | while ($j <= $right) { 63 | $temp[$k++] = $array[$j++]; 64 | } 65 | 66 | for ($p = 0; $p < $k; $p++) { 67 | $array[$left + $p] = $temp[$p]; 68 | } 69 | } 70 | } 71 | 72 | 73 | -------------------------------------------------------------------------------- /src/lib/ZhToFirstChar.php: -------------------------------------------------------------------------------- 1 | = ord("A") and $fchar <= ord("z")) return strtoupper($s0[0]); 13 | $s1 = iconv("UTF-8", "gb2312", $s0); 14 | $s2 = iconv("gb2312", "UTF-8", $s1); 15 | if ($s2 == $s0) { 16 | $s = $s1; 17 | } else { 18 | $s = $s0; 19 | } 20 | $asc = ord($s[0]) * 256 + ord($s[1]) - 65536; 21 | if ($asc >= -20319 and $asc <= -20284) return "A"; 22 | if ($asc >= -20283 and $asc <= -19776) return "B"; 23 | if ($asc >= -19775 and $asc <= -19219) return "C"; 24 | if ($asc >= -19218 and $asc <= -18711) return "D"; 25 | if ($asc >= -18710 and $asc <= -18527) return "E"; 26 | if ($asc >= -18526 and $asc <= -18240) return "F"; 27 | if ($asc >= -18239 and $asc <= -17923) return "G"; 28 | if ($asc >= -17922 and $asc <= -17418) return "H"; 29 | if ($asc >= -17922 and $asc <= -17418) return "I"; 30 | if ($asc >= -17417 and $asc <= -16475) return "J"; 31 | if ($asc >= -16474 and $asc <= -16213) return "K"; 32 | if ($asc >= -16212 and $asc <= -15641) return "L"; 33 | if ($asc >= -15640 and $asc <= -15166) return "M"; 34 | if ($asc >= -15165 and $asc <= -14923) return "N"; 35 | if ($asc >= -14922 and $asc <= -14915) return "O"; 36 | if ($asc >= -14914 and $asc <= -14631) return "P"; 37 | if ($asc >= -14630 and $asc <= -14150) return "Q"; 38 | if ($asc >= -14149 and $asc <= -14091) return "R"; 39 | if ($asc >= -14090 and $asc <= -13319) return "S"; 40 | if ($asc >= -13318 and $asc <= -12839) return "T"; 41 | if ($asc >= -12838 and $asc <= -12557) return "W"; 42 | if ($asc >= -12556 and $asc <= -11848) return "X"; 43 | if ($asc >= -11847 and $asc <= -11056) return "Y"; 44 | if ($asc >= -11055 and $asc <= -10247) return "Z"; 45 | return "U"; 46 | } 47 | 48 | public function Pinyin($zh) 49 | { //获取整条字符串汉字拼音首字母 50 | $ret = ""; 51 | $s1 = iconv("UTF-8", "gb2312", $zh); 52 | $s2 = iconv("gb2312", "UTF-8", $s1); 53 | if ($s2 == $zh) { 54 | $zh = $s1; 55 | } 56 | $zhLen = strlen($zh); 57 | for ($i = 0; $i < $zhLen; $i++) { 58 | $s1 = substr($zh, $i, 1); 59 | $p = ord($s1); 60 | if ($p > 127) { 61 | $s2 = substr($zh, $i++, 2); 62 | $ret .= $this->getfirstchar($s2); 63 | } else { 64 | $ret .= $s1; 65 | } 66 | } 67 | return $ret; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/lib/ZhToPinyin.php: -------------------------------------------------------------------------------- 1 | > 6); 14 | $_String .= chr(0x80 | $_C & 0x3F); 15 | } elseif ($_C < 0x10000) { 16 | $_String .= chr(0xE0 | $_C >> 12); 17 | $_String .= chr(0x80 | $_C >> 6 & 0x3F); 18 | $_String .= chr(0x80 | $_C & 0x3F); 19 | } elseif ($_C < 0x200000) { 20 | $_String .= chr(0xF0 | $_C >> 18); 21 | $_String .= chr(0x80 | $_C >> 12 & 0x3F); 22 | $_String .= chr(0x80 | $_C >> 6 & 0x3F); 23 | $_String .= chr(0x80 | $_C & 0x3F); 24 | } 25 | return iconv('UTF-8', 'GB2312', $_String); 26 | } 27 | 28 | public function Pinyin($_String) 29 | { 30 | $_Code = '1'; 31 | $_String = strtolower($_String); 32 | 33 | $_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha" . 34 | "|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|" . 35 | "cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er" . 36 | "|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui" . 37 | "|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang" . 38 | "|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang" . 39 | "|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue" . 40 | "|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne" . 41 | "|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen" . 42 | "|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang" . 43 | "|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|" . 44 | "she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|" . 45 | "tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu" . 46 | "|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you" . 47 | "|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|" . 48 | "zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo"; 49 | 50 | $_DataValue = "-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990" . 51 | "|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725" . 52 | "|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263" . 53 | "|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003" . 54 | "|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697" . 55 | "|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211" . 56 | "|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922" . 57 | "|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468" . 58 | "|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664" . 59 | "|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407" . 60 | "|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959" . 61 | "|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652" . 62 | "|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369" . 63 | "|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128" . 64 | "|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914" . 65 | "|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645" . 66 | "|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149" . 67 | "|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087" . 68 | "|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658" . 69 | "|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340" . 70 | "|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888" . 71 | "|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585" . 72 | "|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847" . 73 | "|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055" . 74 | "|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780" . 75 | "|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274" . 76 | "|-10270|-10262|-10260|-10256|-10254"; 77 | $_TDataKey = explode('|', $_DataKey); 78 | $_TDataValue = explode('|', $_DataValue); 79 | 80 | $_Data = (PHP_VERSION >= '5.0') ? array_combine($_TDataKey, $_TDataValue) : $this->_Array_Combine($_TDataKey, $_TDataValue); 81 | arsort($_Data); 82 | reset($_Data); 83 | 84 | if ($_Code != 'gb2312') $_String = $this->_U2_Utf8_Gb($_String); 85 | $_Res = ''; 86 | $_StringLen = strlen($_String); 87 | for ($i = 0; $i < $_StringLen; $i++) { 88 | $_P = ord(substr($_String, $i, 1)); 89 | if ($_P > 127) { 90 | $_Q = ord(substr($_String, ++$i, 1)); 91 | $_P = $_P * 256 + $_Q - 65536; 92 | } 93 | $_Res .= $this->_Pinyin($_P, $_Data); 94 | } 95 | 96 | // return preg_replace("/[^a-z0-9]*/", '', $_Res); 97 | return $_Res; 98 | } 99 | 100 | public function _Pinyin($_Num, $_Data) 101 | { 102 | if ($_Num > 0 && $_Num < 127) return chr($_Num); 103 | elseif ($_Num < -20319 || $_Num > -10247) return ''; 104 | else { 105 | foreach ($_Data as $k => $v) { 106 | if ($v <= $_Num) break; 107 | } 108 | return $k; 109 | } 110 | } 111 | 112 | 113 | 114 | public function _Array_Combine($_Arr1, $_Arr2) 115 | { 116 | for ($i = 0; $i < count($_Arr1); $i++) { 117 | 118 | $_Res[$_Arr1[$i]] = $_Arr2[$i]; 119 | } 120 | 121 | return $_Res; 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /src/plugin/Analyzer/dic/custom_dic.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rock365/windsearch/890f2fd79dca7bafd9971e906b9ece719e6dd989/src/plugin/Analyzer/dic/custom_dic.txt -------------------------------------------------------------------------------- /src/plugin/Analyzer/dic/dic_with_idf.dic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rock365/windsearch/890f2fd79dca7bafd9971e906b9ece719e6dd989/src/plugin/Analyzer/dic/dic_with_idf.dic -------------------------------------------------------------------------------- /src/plugin/Analyzer/dic/not_word.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rock365/windsearch/890f2fd79dca7bafd9971e906b9ece719e6dd989/src/plugin/Analyzer/dic/not_word.txt -------------------------------------------------------------------------------- /src/statistics/dev/storage/2025/2025-02/2025-02-10/terms: -------------------------------------------------------------------------------- 1 | 关注 2 | 互联网 3 | 技术 4 | 关注 5 | 互联网 6 | 技术 7 | 关注 8 | 互联网 9 | 技术 10 | 关注 11 | 互联网 12 | 技术 13 | 关注 14 | 互联网 15 | 技术 16 | 关注 17 | 互联网 18 | 技术 19 | 关注 20 | 互联网 21 | 技术 22 | 关注 23 | 互联网 24 | 技术 25 | 关注 26 | 互联网 27 | 技术 28 | 关注 29 | 互联网 30 | 技术 31 | 关注 32 | 互联网 33 | 技术 34 | 关注 35 | 互联网 36 | 技术 37 | 关注 38 | 互联网 39 | 技术 40 | 关注 41 | 互联网 42 | 技术 43 | 关注 44 | 互联网 45 | 技术 46 | 关注 47 | 互联网 48 | 技术 49 | 关注 50 | 互联网 51 | 技术 52 | 关注 53 | 互联网 54 | 技术 55 | 关注 56 | 互联网 57 | 技术 58 | 关注 59 | 互联网 60 | 技术 61 | 关注 62 | 互联网 63 | 技术 64 | 关注 65 | 互联网 66 | 技术 67 | 关注 68 | 互联网 69 | 技术 70 | 关注 71 | 互联网 72 | 技术 73 | 关注 74 | 互联网 75 | 技术 76 | 关注 77 | 互联网 78 | 技术 79 | -------------------------------------------------------------------------------- /src/windIndexCore/Chinese_character/Chinese_character.txt: -------------------------------------------------------------------------------- 1 | 啊 2 | 阿 3 | 埃 4 | 挨 5 | 哎 6 | 唉 7 | 哀 8 | 皑 9 | 癌 10 | 蔼 11 | 矮 12 | 艾 13 | 碍 14 | 爱 15 | 隘 16 | 鞍 17 | 氨 18 | 安 19 | 俺 20 | 按 21 | 暗 22 | 岸 23 | 胺 24 | 案 25 | 肮 26 | 昂 27 | 盎 28 | 凹 29 | 敖 30 | 熬 31 | 翱 32 | 袄 33 | 傲 34 | 奥 35 | 懊 36 | 澳 37 | 芭 38 | 捌 39 | 扒 40 | 叭 41 | 吧 42 | 笆 43 | 八 44 | 疤 45 | 巴 46 | 拔 47 | 跋 48 | 靶 49 | 把 50 | 耙 51 | 坝 52 | 霸 53 | 罢 54 | 爸 55 | 白 56 | 柏 57 | 百 58 | 摆 59 | 佰 60 | 败 61 | 拜 62 | 稗 63 | 斑 64 | 班 65 | 搬 66 | 扳 67 | 般 68 | 颁 69 | 板 70 | 版 71 | 扮 72 | 拌 73 | 伴 74 | 瓣 75 | 半 76 | 办 77 | 绊 78 | 邦 79 | 帮 80 | 梆 81 | 榜 82 | 膀 83 | 绑 84 | 棒 85 | 磅 86 | 蚌 87 | 镑 88 | 傍 89 | 谤 90 | 苞 91 | 胞 92 | 包 93 | 褒 94 | 剥 95 | 薄 96 | 雹 97 | 保 98 | 堡 99 | 饱 100 | 宝 101 | 抱 102 | 报 103 | 暴 104 | 豹 105 | 鲍 106 | 爆 107 | 杯 108 | 碑 109 | 悲 110 | 卑 111 | 北 112 | 辈 113 | 背 114 | 贝 115 | 钡 116 | 倍 117 | 狈 118 | 备 119 | 惫 120 | 焙 121 | 被 122 | 奔 123 | 苯 124 | 本 125 | 笨 126 | 崩 127 | 绷 128 | 甭 129 | 泵 130 | 蹦 131 | 迸 132 | 逼 133 | 鼻 134 | 比 135 | 鄙 136 | 笔 137 | 彼 138 | 碧 139 | 蓖 140 | 蔽 141 | 毕 142 | 毙 143 | 毖 144 | 币 145 | 庇 146 | 痹 147 | 闭 148 | 敝 149 | 弊 150 | 必 151 | 辟 152 | 壁 153 | 臂 154 | 避 155 | 陛 156 | 鞭 157 | 边 158 | 编 159 | 贬 160 | 扁 161 | 便 162 | 变 163 | 卞 164 | 辨 165 | 辩 166 | 辫 167 | 遍 168 | 标 169 | 彪 170 | 膘 171 | 表 172 | 鳖 173 | 憋 174 | 别 175 | 瘪 176 | 彬 177 | 斌 178 | 濒 179 | 滨 180 | 宾 181 | 摈 182 | 兵 183 | 冰 184 | 柄 185 | 丙 186 | 秉 187 | 饼 188 | 炳 189 | 病 190 | 并 191 | 玻 192 | 菠 193 | 播 194 | 拨 195 | 钵 196 | 波 197 | 博 198 | 勃 199 | 搏 200 | 铂 201 | 箔 202 | 伯 203 | 帛 204 | 舶 205 | 脖 206 | 膊 207 | 渤 208 | 泊 209 | 驳 210 | 捕 211 | 卜 212 | 哺 213 | 补 214 | 埠 215 | 不 216 | 布 217 | 步 218 | 簿 219 | 部 220 | 怖 221 | 擦 222 | 猜 223 | 裁 224 | 材 225 | 才 226 | 财 227 | 睬 228 | 踩 229 | 采 230 | 彩 231 | 菜 232 | 蔡 233 | 餐 234 | 参 235 | 蚕 236 | 残 237 | 惭 238 | 惨 239 | 灿 240 | 苍 241 | 舱 242 | 仓 243 | 沧 244 | 藏 245 | 操 246 | 糙 247 | 槽 248 | 曹 249 | 草 250 | 厕 251 | 策 252 | 侧 253 | 册 254 | 测 255 | 层 256 | 蹭 257 | 插 258 | 叉 259 | 茬 260 | 茶 261 | 查 262 | 碴 263 | 搽 264 | 察 265 | 岔 266 | 差 267 | 诧 268 | 拆 269 | 柴 270 | 豺 271 | 搀 272 | 掺 273 | 蝉 274 | 馋 275 | 谗 276 | 缠 277 | 铲 278 | 产 279 | 阐 280 | 颤 281 | 昌 282 | 猖 283 | 场 284 | 尝 285 | 常 286 | 长 287 | 偿 288 | 肠 289 | 厂 290 | 敞 291 | 畅 292 | 唱 293 | 倡 294 | 超 295 | 抄 296 | 钞 297 | 朝 298 | 嘲 299 | 潮 300 | 巢 301 | 吵 302 | 炒 303 | 车 304 | 扯 305 | 撤 306 | 掣 307 | 彻 308 | 澈 309 | 郴 310 | 臣 311 | 辰 312 | 尘 313 | 晨 314 | 忱 315 | 沉 316 | 陈 317 | 趁 318 | 衬 319 | 撑 320 | 称 321 | 城 322 | 橙 323 | 成 324 | 呈 325 | 乘 326 | 程 327 | 惩 328 | 澄 329 | 诚 330 | 承 331 | 逞 332 | 骋 333 | 秤 334 | 吃 335 | 痴 336 | 持 337 | 匙 338 | 池 339 | 迟 340 | 弛 341 | 驰 342 | 耻 343 | 齿 344 | 侈 345 | 尺 346 | 赤 347 | 翅 348 | 斥 349 | 炽 350 | 充 351 | 冲 352 | 虫 353 | 崇 354 | 宠 355 | 抽 356 | 酬 357 | 畴 358 | 踌 359 | 稠 360 | 愁 361 | 筹 362 | 仇 363 | 绸 364 | 瞅 365 | 丑 366 | 臭 367 | 初 368 | 出 369 | 橱 370 | 厨 371 | 躇 372 | 锄 373 | 雏 374 | 滁 375 | 除 376 | 楚 377 | 础 378 | 储 379 | 矗 380 | 搐 381 | 触 382 | 处 383 | 揣 384 | 川 385 | 穿 386 | 椽 387 | 传 388 | 船 389 | 喘 390 | 串 391 | 疮 392 | 窗 393 | 幢 394 | 床 395 | 闯 396 | 创 397 | 吹 398 | 炊 399 | 捶 400 | 锤 401 | 垂 402 | 春 403 | 椿 404 | 醇 405 | 唇 406 | 淳 407 | 纯 408 | 蠢 409 | 戳 410 | 绰 411 | 疵 412 | 茨 413 | 磁 414 | 雌 415 | 辞 416 | 慈 417 | 瓷 418 | 词 419 | 此 420 | 刺 421 | 赐 422 | 次 423 | 聪 424 | 葱 425 | 囱 426 | 匆 427 | 从 428 | 丛 429 | 凑 430 | 粗 431 | 醋 432 | 簇 433 | 促 434 | 蹿 435 | 篡 436 | 窜 437 | 摧 438 | 崔 439 | 催 440 | 脆 441 | 瘁 442 | 粹 443 | 淬 444 | 翠 445 | 村 446 | 存 447 | 寸 448 | 磋 449 | 撮 450 | 搓 451 | 措 452 | 挫 453 | 错 454 | 搭 455 | 达 456 | 答 457 | 瘩 458 | 打 459 | 大 460 | 呆 461 | 歹 462 | 傣 463 | 戴 464 | 带 465 | 殆 466 | 代 467 | 贷 468 | 袋 469 | 待 470 | 逮 471 | 怠 472 | 耽 473 | 担 474 | 丹 475 | 单 476 | 郸 477 | 掸 478 | 胆 479 | 旦 480 | 氮 481 | 但 482 | 惮 483 | 淡 484 | 诞 485 | 弹 486 | 蛋 487 | 当 488 | 挡 489 | 党 490 | 荡 491 | 档 492 | 刀 493 | 捣 494 | 蹈 495 | 倒 496 | 岛 497 | 祷 498 | 导 499 | 到 500 | 稻 501 | 悼 502 | 道 503 | 盗 504 | 德 505 | 得 506 | 的 507 | 蹬 508 | 灯 509 | 登 510 | 等 511 | 瞪 512 | 凳 513 | 邓 514 | 堤 515 | 低 516 | 滴 517 | 迪 518 | 敌 519 | 笛 520 | 狄 521 | 涤 522 | 翟 523 | 嫡 524 | 抵 525 | 底 526 | 地 527 | 蒂 528 | 第 529 | 帝 530 | 弟 531 | 递 532 | 缔 533 | 颠 534 | 掂 535 | 滇 536 | 碘 537 | 点 538 | 典 539 | 靛 540 | 垫 541 | 电 542 | 佃 543 | 甸 544 | 店 545 | 惦 546 | 奠 547 | 淀 548 | 殿 549 | 碉 550 | 叼 551 | 雕 552 | 凋 553 | 刁 554 | 掉 555 | 吊 556 | 钓 557 | 调 558 | 跌 559 | 爹 560 | 碟 561 | 蝶 562 | 迭 563 | 谍 564 | 叠 565 | 丁 566 | 盯 567 | 叮 568 | 钉 569 | 顶 570 | 鼎 571 | 锭 572 | 定 573 | 订 574 | 丢 575 | 东 576 | 冬 577 | 董 578 | 懂 579 | 动 580 | 栋 581 | 侗 582 | 恫 583 | 冻 584 | 洞 585 | 兜 586 | 抖 587 | 斗 588 | 陡 589 | 豆 590 | 逗 591 | 痘 592 | 都 593 | 督 594 | 毒 595 | 犊 596 | 独 597 | 读 598 | 堵 599 | 睹 600 | 赌 601 | 杜 602 | 镀 603 | 肚 604 | 度 605 | 渡 606 | 妒 607 | 端 608 | 短 609 | 锻 610 | 段 611 | 断 612 | 缎 613 | 堆 614 | 兑 615 | 队 616 | 对 617 | 墩 618 | 吨 619 | 蹲 620 | 敦 621 | 顿 622 | 囤 623 | 钝 624 | 盾 625 | 遁 626 | 掇 627 | 哆 628 | 多 629 | 夺 630 | 垛 631 | 躲 632 | 朵 633 | 跺 634 | 舵 635 | 剁 636 | 惰 637 | 堕 638 | 蛾 639 | 峨 640 | 鹅 641 | 俄 642 | 额 643 | 讹 644 | 娥 645 | 恶 646 | 厄 647 | 扼 648 | 遏 649 | 鄂 650 | 饿 651 | 恩 652 | 而 653 | 儿 654 | 耳 655 | 尔 656 | 饵 657 | 洱 658 | 二 659 | 贰 660 | 发 661 | 罚 662 | 筏 663 | 伐 664 | 乏 665 | 阀 666 | 法 667 | 珐 668 | 藩 669 | 帆 670 | 番 671 | 翻 672 | 樊 673 | 矾 674 | 钒 675 | 繁 676 | 凡 677 | 烦 678 | 反 679 | 返 680 | 范 681 | 贩 682 | 犯 683 | 饭 684 | 泛 685 | 坊 686 | 芳 687 | 方 688 | 肪 689 | 房 690 | 防 691 | 妨 692 | 仿 693 | 访 694 | 纺 695 | 放 696 | 菲 697 | 非 698 | 啡 699 | 飞 700 | 肥 701 | 匪 702 | 诽 703 | 吠 704 | 肺 705 | 废 706 | 沸 707 | 费 708 | 芬 709 | 酚 710 | 吩 711 | 氛 712 | 分 713 | 纷 714 | 坟 715 | 焚 716 | 汾 717 | 粉 718 | 奋 719 | 份 720 | 忿 721 | 愤 722 | 粪 723 | 丰 724 | 封 725 | 枫 726 | 蜂 727 | 峰 728 | 锋 729 | 风 730 | 疯 731 | 烽 732 | 逢 733 | 冯 734 | 缝 735 | 讽 736 | 奉 737 | 凤 738 | 佛 739 | 否 740 | 夫 741 | 敷 742 | 肤 743 | 孵 744 | 扶 745 | 拂 746 | 辐 747 | 幅 748 | 氟 749 | 符 750 | 伏 751 | 俘 752 | 服 753 | 浮 754 | 涪 755 | 福 756 | 袱 757 | 弗 758 | 甫 759 | 抚 760 | 辅 761 | 俯 762 | 釜 763 | 斧 764 | 脯 765 | 腑 766 | 府 767 | 腐 768 | 赴 769 | 副 770 | 覆 771 | 赋 772 | 复 773 | 傅 774 | 付 775 | 阜 776 | 父 777 | 腹 778 | 负 779 | 富 780 | 讣 781 | 附 782 | 妇 783 | 缚 784 | 咐 785 | 噶 786 | 嘎 787 | 该 788 | 改 789 | 概 790 | 钙 791 | 盖 792 | 溉 793 | 干 794 | 甘 795 | 杆 796 | 柑 797 | 竿 798 | 肝 799 | 赶 800 | 感 801 | 秆 802 | 敢 803 | 赣 804 | 冈 805 | 刚 806 | 钢 807 | 缸 808 | 肛 809 | 纲 810 | 岗 811 | 港 812 | 杠 813 | 篙 814 | 皋 815 | 高 816 | 膏 817 | 羔 818 | 糕 819 | 搞 820 | 镐 821 | 稿 822 | 告 823 | 哥 824 | 歌 825 | 搁 826 | 戈 827 | 鸽 828 | 胳 829 | 疙 830 | 割 831 | 革 832 | 葛 833 | 格 834 | 蛤 835 | 阁 836 | 隔 837 | 铬 838 | 个 839 | 各 840 | 给 841 | 根 842 | 跟 843 | 耕 844 | 更 845 | 庚 846 | 羹 847 | 埂 848 | 耿 849 | 梗 850 | 工 851 | 攻 852 | 功 853 | 恭 854 | 龚 855 | 供 856 | 躬 857 | 公 858 | 宫 859 | 弓 860 | 巩 861 | 汞 862 | 拱 863 | 贡 864 | 共 865 | 钩 866 | 勾 867 | 沟 868 | 苟 869 | 狗 870 | 垢 871 | 构 872 | 购 873 | 够 874 | 辜 875 | 菇 876 | 咕 877 | 箍 878 | 估 879 | 沽 880 | 孤 881 | 姑 882 | 鼓 883 | 古 884 | 蛊 885 | 骨 886 | 谷 887 | 股 888 | 故 889 | 顾 890 | 固 891 | 雇 892 | 刮 893 | 瓜 894 | 剐 895 | 寡 896 | 挂 897 | 褂 898 | 乖 899 | 拐 900 | 怪 901 | 棺 902 | 关 903 | 官 904 | 冠 905 | 观 906 | 管 907 | 馆 908 | 罐 909 | 惯 910 | 灌 911 | 贯 912 | 光 913 | 广 914 | 逛 915 | 瑰 916 | 规 917 | 圭 918 | 硅 919 | 归 920 | 龟 921 | 闺 922 | 轨 923 | 鬼 924 | 诡 925 | 癸 926 | 桂 927 | 柜 928 | 跪 929 | 贵 930 | 刽 931 | 辊 932 | 滚 933 | 棍 934 | 锅 935 | 郭 936 | 国 937 | 果 938 | 裹 939 | 过 940 | 哈 941 | 骸 942 | 孩 943 | 海 944 | 氦 945 | 亥 946 | 害 947 | 骇 948 | 酣 949 | 憨 950 | 邯 951 | 韩 952 | 含 953 | 涵 954 | 寒 955 | 函 956 | 喊 957 | 罕 958 | 翰 959 | 撼 960 | 捍 961 | 旱 962 | 憾 963 | 悍 964 | 焊 965 | 汗 966 | 汉 967 | 夯 968 | 杭 969 | 航 970 | 壕 971 | 嚎 972 | 豪 973 | 毫 974 | 郝 975 | 好 976 | 耗 977 | 号 978 | 浩 979 | 呵 980 | 喝 981 | 荷 982 | 菏 983 | 核 984 | 禾 985 | 和 986 | 何 987 | 合 988 | 盒 989 | 貉 990 | 阂 991 | 河 992 | 涸 993 | 赫 994 | 褐 995 | 鹤 996 | 贺 997 | 嘿 998 | 黑 999 | 痕 1000 | 很 1001 | 狠 1002 | 恨 1003 | 哼 1004 | 亨 1005 | 横 1006 | 衡 1007 | 恒 1008 | 轰 1009 | 哄 1010 | 烘 1011 | 虹 1012 | 鸿 1013 | 洪 1014 | 宏 1015 | 弘 1016 | 红 1017 | 喉 1018 | 侯 1019 | 猴 1020 | 吼 1021 | 厚 1022 | 候 1023 | 后 1024 | 呼 1025 | 乎 1026 | 忽 1027 | 瑚 1028 | 壶 1029 | 葫 1030 | 胡 1031 | 蝴 1032 | 狐 1033 | 糊 1034 | 湖 1035 | 弧 1036 | 虎 1037 | 唬 1038 | 护 1039 | 互 1040 | 沪 1041 | 户 1042 | 花 1043 | 哗 1044 | 华 1045 | 猾 1046 | 滑 1047 | 画 1048 | 划 1049 | 化 1050 | 话 1051 | 槐 1052 | 徊 1053 | 怀 1054 | 淮 1055 | 坏 1056 | 欢 1057 | 环 1058 | 桓 1059 | 还 1060 | 缓 1061 | 换 1062 | 患 1063 | 唤 1064 | 痪 1065 | 豢 1066 | 焕 1067 | 涣 1068 | 宦 1069 | 幻 1070 | 荒 1071 | 慌 1072 | 黄 1073 | 磺 1074 | 蝗 1075 | 簧 1076 | 皇 1077 | 凰 1078 | 惶 1079 | 煌 1080 | 晃 1081 | 幌 1082 | 恍 1083 | 谎 1084 | 灰 1085 | 挥 1086 | 辉 1087 | 徽 1088 | 恢 1089 | 蛔 1090 | 回 1091 | 毁 1092 | 悔 1093 | 慧 1094 | 卉 1095 | 惠 1096 | 晦 1097 | 贿 1098 | 秽 1099 | 会 1100 | 烩 1101 | 汇 1102 | 讳 1103 | 诲 1104 | 绘 1105 | 荤 1106 | 昏 1107 | 婚 1108 | 魂 1109 | 浑 1110 | 混 1111 | 豁 1112 | 活 1113 | 伙 1114 | 火 1115 | 获 1116 | 或 1117 | 惑 1118 | 霍 1119 | 货 1120 | 祸 1121 | 击 1122 | 圾 1123 | 基 1124 | 机 1125 | 畸 1126 | 稽 1127 | 积 1128 | 箕 1129 | 肌 1130 | 饥 1131 | 迹 1132 | 激 1133 | 讥 1134 | 鸡 1135 | 姬 1136 | 绩 1137 | 缉 1138 | 吉 1139 | 极 1140 | 棘 1141 | 辑 1142 | 籍 1143 | 集 1144 | 及 1145 | 急 1146 | 疾 1147 | 汲 1148 | 即 1149 | 嫉 1150 | 级 1151 | 挤 1152 | 几 1153 | 脊 1154 | 己 1155 | 蓟 1156 | 技 1157 | 冀 1158 | 季 1159 | 伎 1160 | 祭 1161 | 剂 1162 | 悸 1163 | 济 1164 | 寄 1165 | 寂 1166 | 计 1167 | 记 1168 | 既 1169 | 忌 1170 | 际 1171 | 妓 1172 | 继 1173 | 纪 1174 | 嘉 1175 | 枷 1176 | 夹 1177 | 佳 1178 | 家 1179 | 加 1180 | 荚 1181 | 颊 1182 | 贾 1183 | 甲 1184 | 钾 1185 | 假 1186 | 稼 1187 | 价 1188 | 架 1189 | 驾 1190 | 嫁 1191 | 歼 1192 | 监 1193 | 坚 1194 | 尖 1195 | 笺 1196 | 间 1197 | 煎 1198 | 兼 1199 | 肩 1200 | 艰 1201 | 奸 1202 | 缄 1203 | 茧 1204 | 检 1205 | 柬 1206 | 碱 1207 | 拣 1208 | 捡 1209 | 简 1210 | 俭 1211 | 剪 1212 | 减 1213 | 荐 1214 | 槛 1215 | 鉴 1216 | 践 1217 | 贱 1218 | 见 1219 | 键 1220 | 箭 1221 | 件 1222 | 健 1223 | 舰 1224 | 剑 1225 | 饯 1226 | 渐 1227 | 溅 1228 | 涧 1229 | 建 1230 | 僵 1231 | 姜 1232 | 将 1233 | 浆 1234 | 江 1235 | 疆 1236 | 蒋 1237 | 桨 1238 | 奖 1239 | 讲 1240 | 匠 1241 | 酱 1242 | 降 1243 | 蕉 1244 | 椒 1245 | 礁 1246 | 焦 1247 | 胶 1248 | 交 1249 | 郊 1250 | 浇 1251 | 骄 1252 | 娇 1253 | 嚼 1254 | 搅 1255 | 铰 1256 | 矫 1257 | 侥 1258 | 脚 1259 | 狡 1260 | 角 1261 | 饺 1262 | 缴 1263 | 绞 1264 | 剿 1265 | 教 1266 | 酵 1267 | 轿 1268 | 较 1269 | 叫 1270 | 窖 1271 | 揭 1272 | 接 1273 | 皆 1274 | 秸 1275 | 街 1276 | 阶 1277 | 截 1278 | 劫 1279 | 节 1280 | 桔 1281 | 杰 1282 | 捷 1283 | 睫 1284 | 竭 1285 | 洁 1286 | 结 1287 | 解 1288 | 姐 1289 | 戒 1290 | 藉 1291 | 芥 1292 | 界 1293 | 借 1294 | 介 1295 | 疥 1296 | 诫 1297 | 届 1298 | 巾 1299 | 筋 1300 | 斤 1301 | 金 1302 | 今 1303 | 津 1304 | 襟 1305 | 紧 1306 | 锦 1307 | 仅 1308 | 谨 1309 | 进 1310 | 靳 1311 | 晋 1312 | 禁 1313 | 近 1314 | 烬 1315 | 浸 1316 | 尽 1317 | 劲 1318 | 荆 1319 | 兢 1320 | 茎 1321 | 睛 1322 | 晶 1323 | 鲸 1324 | 京 1325 | 惊 1326 | 精 1327 | 粳 1328 | 经 1329 | 井 1330 | 警 1331 | 景 1332 | 颈 1333 | 静 1334 | 境 1335 | 敬 1336 | 镜 1337 | 径 1338 | 痉 1339 | 靖 1340 | 竟 1341 | 竞 1342 | 净 1343 | 炯 1344 | 窘 1345 | 揪 1346 | 究 1347 | 纠 1348 | 玖 1349 | 韭 1350 | 久 1351 | 灸 1352 | 九 1353 | 酒 1354 | 厩 1355 | 救 1356 | 旧 1357 | 臼 1358 | 舅 1359 | 咎 1360 | 就 1361 | 疚 1362 | 鞠 1363 | 拘 1364 | 狙 1365 | 疽 1366 | 居 1367 | 驹 1368 | 菊 1369 | 局 1370 | 咀 1371 | 矩 1372 | 举 1373 | 沮 1374 | 聚 1375 | 拒 1376 | 据 1377 | 巨 1378 | 具 1379 | 距 1380 | 踞 1381 | 锯 1382 | 俱 1383 | 句 1384 | 惧 1385 | 炬 1386 | 剧 1387 | 捐 1388 | 鹃 1389 | 娟 1390 | 倦 1391 | 眷 1392 | 卷 1393 | 绢 1394 | 撅 1395 | 攫 1396 | 抉 1397 | 掘 1398 | 倔 1399 | 爵 1400 | 觉 1401 | 决 1402 | 诀 1403 | 绝 1404 | 均 1405 | 菌 1406 | 钧 1407 | 军 1408 | 君 1409 | 峻 1410 | 俊 1411 | 竣 1412 | 浚 1413 | 郡 1414 | 骏 1415 | 喀 1416 | 咖 1417 | 卡 1418 | 咯 1419 | 开 1420 | 揩 1421 | 楷 1422 | 凯 1423 | 慨 1424 | 刊 1425 | 堪 1426 | 勘 1427 | 坎 1428 | 砍 1429 | 看 1430 | 康 1431 | 慷 1432 | 糠 1433 | 扛 1434 | 抗 1435 | 亢 1436 | 炕 1437 | 考 1438 | 拷 1439 | 烤 1440 | 靠 1441 | 坷 1442 | 苛 1443 | 柯 1444 | 棵 1445 | 磕 1446 | 颗 1447 | 科 1448 | 壳 1449 | 咳 1450 | 可 1451 | 渴 1452 | 克 1453 | 刻 1454 | 客 1455 | 课 1456 | 肯 1457 | 啃 1458 | 垦 1459 | 恳 1460 | 坑 1461 | 吭 1462 | 空 1463 | 恐 1464 | 孔 1465 | 控 1466 | 抠 1467 | 口 1468 | 扣 1469 | 寇 1470 | 枯 1471 | 哭 1472 | 窟 1473 | 苦 1474 | 酷 1475 | 库 1476 | 裤 1477 | 夸 1478 | 垮 1479 | 挎 1480 | 跨 1481 | 胯 1482 | 块 1483 | 筷 1484 | 侩 1485 | 快 1486 | 宽 1487 | 款 1488 | 匡 1489 | 筐 1490 | 狂 1491 | 框 1492 | 矿 1493 | 眶 1494 | 旷 1495 | 况 1496 | 亏 1497 | 盔 1498 | 岿 1499 | 窥 1500 | 葵 1501 | 奎 1502 | 魁 1503 | 傀 1504 | 馈 1505 | 愧 1506 | 溃 1507 | 坤 1508 | 昆 1509 | 捆 1510 | 困 1511 | 括 1512 | 扩 1513 | 廓 1514 | 阔 1515 | 垃 1516 | 拉 1517 | 喇 1518 | 蜡 1519 | 腊 1520 | 辣 1521 | 啦 1522 | 莱 1523 | 来 1524 | 赖 1525 | 蓝 1526 | 婪 1527 | 栏 1528 | 拦 1529 | 篮 1530 | 阑 1531 | 兰 1532 | 澜 1533 | 谰 1534 | 揽 1535 | 览 1536 | 懒 1537 | 缆 1538 | 烂 1539 | 滥 1540 | 琅 1541 | 榔 1542 | 狼 1543 | 廊 1544 | 郎 1545 | 朗 1546 | 浪 1547 | 捞 1548 | 劳 1549 | 牢 1550 | 老 1551 | 佬 1552 | 姥 1553 | 酪 1554 | 烙 1555 | 涝 1556 | 勒 1557 | 乐 1558 | 雷 1559 | 镭 1560 | 蕾 1561 | 磊 1562 | 累 1563 | 儡 1564 | 垒 1565 | 擂 1566 | 肋 1567 | 类 1568 | 泪 1569 | 棱 1570 | 楞 1571 | 冷 1572 | 厘 1573 | 梨 1574 | 犁 1575 | 黎 1576 | 篱 1577 | 狸 1578 | 离 1579 | 漓 1580 | 理 1581 | 李 1582 | 里 1583 | 鲤 1584 | 礼 1585 | 莉 1586 | 荔 1587 | 吏 1588 | 栗 1589 | 丽 1590 | 厉 1591 | 励 1592 | 砾 1593 | 历 1594 | 利 1595 | 僳 1596 | 例 1597 | 俐 1598 | 痢 1599 | 立 1600 | 粒 1601 | 沥 1602 | 隶 1603 | 力 1604 | 璃 1605 | 哩 1606 | 俩 1607 | 联 1608 | 莲 1609 | 连 1610 | 镰 1611 | 廉 1612 | 怜 1613 | 涟 1614 | 帘 1615 | 敛 1616 | 脸 1617 | 链 1618 | 恋 1619 | 炼 1620 | 练 1621 | 粮 1622 | 凉 1623 | 梁 1624 | 粱 1625 | 良 1626 | 两 1627 | 辆 1628 | 量 1629 | 晾 1630 | 亮 1631 | 谅 1632 | 撩 1633 | 聊 1634 | 僚 1635 | 疗 1636 | 燎 1637 | 寥 1638 | 辽 1639 | 潦 1640 | 了 1641 | 撂 1642 | 镣 1643 | 廖 1644 | 料 1645 | 列 1646 | 裂 1647 | 烈 1648 | 劣 1649 | 猎 1650 | 琳 1651 | 林 1652 | 磷 1653 | 霖 1654 | 临 1655 | 邻 1656 | 鳞 1657 | 淋 1658 | 凛 1659 | 赁 1660 | 吝 1661 | 拎 1662 | 玲 1663 | 菱 1664 | 零 1665 | 龄 1666 | 铃 1667 | 伶 1668 | 羚 1669 | 凌 1670 | 灵 1671 | 陵 1672 | 岭 1673 | 领 1674 | 另 1675 | 令 1676 | 溜 1677 | 琉 1678 | 榴 1679 | 硫 1680 | 馏 1681 | 留 1682 | 刘 1683 | 瘤 1684 | 流 1685 | 柳 1686 | 六 1687 | 龙 1688 | 聋 1689 | 咙 1690 | 笼 1691 | 窿 1692 | 隆 1693 | 垄 1694 | 拢 1695 | 陇 1696 | 楼 1697 | 娄 1698 | 搂 1699 | 篓 1700 | 漏 1701 | 陋 1702 | 芦 1703 | 卢 1704 | 颅 1705 | 庐 1706 | 炉 1707 | 掳 1708 | 卤 1709 | 虏 1710 | 鲁 1711 | 麓 1712 | 碌 1713 | 露 1714 | 路 1715 | 赂 1716 | 鹿 1717 | 潞 1718 | 禄 1719 | 录 1720 | 陆 1721 | 戮 1722 | 驴 1723 | 吕 1724 | 铝 1725 | 侣 1726 | 旅 1727 | 履 1728 | 屡 1729 | 缕 1730 | 虑 1731 | 氯 1732 | 律 1733 | 率 1734 | 滤 1735 | 绿 1736 | 峦 1737 | 挛 1738 | 孪 1739 | 滦 1740 | 卵 1741 | 乱 1742 | 掠 1743 | 略 1744 | 抡 1745 | 轮 1746 | 伦 1747 | 仑 1748 | 沦 1749 | 纶 1750 | 论 1751 | 萝 1752 | 螺 1753 | 罗 1754 | 逻 1755 | 锣 1756 | 箩 1757 | 骡 1758 | 裸 1759 | 落 1760 | 洛 1761 | 骆 1762 | 络 1763 | 妈 1764 | 麻 1765 | 玛 1766 | 码 1767 | 蚂 1768 | 马 1769 | 骂 1770 | 嘛 1771 | 吗 1772 | 埋 1773 | 买 1774 | 麦 1775 | 卖 1776 | 迈 1777 | 脉 1778 | 瞒 1779 | 馒 1780 | 蛮 1781 | 满 1782 | 蔓 1783 | 曼 1784 | 慢 1785 | 漫 1786 | 谩 1787 | 芒 1788 | 茫 1789 | 盲 1790 | 氓 1791 | 忙 1792 | 莽 1793 | 猫 1794 | 茅 1795 | 锚 1796 | 毛 1797 | 矛 1798 | 铆 1799 | 卯 1800 | 茂 1801 | 冒 1802 | 帽 1803 | 貌 1804 | 贸 1805 | 么 1806 | 玫 1807 | 枚 1808 | 梅 1809 | 酶 1810 | 霉 1811 | 煤 1812 | 没 1813 | 眉 1814 | 媒 1815 | 镁 1816 | 每 1817 | 美 1818 | 昧 1819 | 寐 1820 | 妹 1821 | 媚 1822 | 门 1823 | 闷 1824 | 们 1825 | 萌 1826 | 蒙 1827 | 檬 1828 | 盟 1829 | 锰 1830 | 猛 1831 | 梦 1832 | 孟 1833 | 眯 1834 | 醚 1835 | 靡 1836 | 糜 1837 | 迷 1838 | 谜 1839 | 弥 1840 | 米 1841 | 秘 1842 | 觅 1843 | 泌 1844 | 蜜 1845 | 密 1846 | 幂 1847 | 棉 1848 | 眠 1849 | 绵 1850 | 冕 1851 | 免 1852 | 勉 1853 | 娩 1854 | 缅 1855 | 面 1856 | 苗 1857 | 描 1858 | 瞄 1859 | 藐 1860 | 秒 1861 | 渺 1862 | 庙 1863 | 妙 1864 | 蔑 1865 | 灭 1866 | 民 1867 | 抿 1868 | 皿 1869 | 敏 1870 | 悯 1871 | 闽 1872 | 明 1873 | 螟 1874 | 鸣 1875 | 铭 1876 | 名 1877 | 命 1878 | 谬 1879 | 摸 1880 | 摹 1881 | 蘑 1882 | 模 1883 | 膜 1884 | 磨 1885 | 摩 1886 | 魔 1887 | 抹 1888 | 末 1889 | 莫 1890 | 墨 1891 | 默 1892 | 沫 1893 | 漠 1894 | 寞 1895 | 陌 1896 | 谋 1897 | 牟 1898 | 某 1899 | 拇 1900 | 牡 1901 | 亩 1902 | 姆 1903 | 母 1904 | 墓 1905 | 暮 1906 | 幕 1907 | 募 1908 | 慕 1909 | 木 1910 | 目 1911 | 睦 1912 | 牧 1913 | 穆 1914 | 拿 1915 | 哪 1916 | 呐 1917 | 钠 1918 | 那 1919 | 娜 1920 | 纳 1921 | 氖 1922 | 乃 1923 | 奶 1924 | 耐 1925 | 奈 1926 | 南 1927 | 男 1928 | 难 1929 | 囊 1930 | 挠 1931 | 脑 1932 | 恼 1933 | 闹 1934 | 淖 1935 | 呢 1936 | 馁 1937 | 内 1938 | 嫩 1939 | 能 1940 | 妮 1941 | 霓 1942 | 倪 1943 | 泥 1944 | 尼 1945 | 拟 1946 | 你 1947 | 匿 1948 | 腻 1949 | 逆 1950 | 溺 1951 | 蔫 1952 | 拈 1953 | 年 1954 | 碾 1955 | 撵 1956 | 捻 1957 | 念 1958 | 娘 1959 | 酿 1960 | 鸟 1961 | 尿 1962 | 捏 1963 | 聂 1964 | 孽 1965 | 啮 1966 | 镊 1967 | 镍 1968 | 涅 1969 | 您 1970 | 柠 1971 | 狞 1972 | 凝 1973 | 宁 1974 | 拧 1975 | 泞 1976 | 牛 1977 | 扭 1978 | 钮 1979 | 纽 1980 | 脓 1981 | 浓 1982 | 农 1983 | 弄 1984 | 奴 1985 | 努 1986 | 怒 1987 | 女 1988 | 暖 1989 | 虐 1990 | 疟 1991 | 挪 1992 | 懦 1993 | 糯 1994 | 诺 1995 | 哦 1996 | 欧 1997 | 鸥 1998 | 殴 1999 | 藕 2000 | 呕 2001 | 偶 2002 | 沤 2003 | 啪 2004 | 趴 2005 | 爬 2006 | 帕 2007 | 怕 2008 | 琶 2009 | 拍 2010 | 排 2011 | 牌 2012 | 徘 2013 | 湃 2014 | 派 2015 | 攀 2016 | 潘 2017 | 盘 2018 | 磐 2019 | 盼 2020 | 畔 2021 | 判 2022 | 叛 2023 | 乓 2024 | 庞 2025 | 旁 2026 | 耪 2027 | 胖 2028 | 抛 2029 | 咆 2030 | 刨 2031 | 炮 2032 | 袍 2033 | 跑 2034 | 泡 2035 | 呸 2036 | 胚 2037 | 培 2038 | 裴 2039 | 赔 2040 | 陪 2041 | 配 2042 | 佩 2043 | 沛 2044 | 喷 2045 | 盆 2046 | 砰 2047 | 抨 2048 | 烹 2049 | 澎 2050 | 彭 2051 | 蓬 2052 | 棚 2053 | 硼 2054 | 篷 2055 | 膨 2056 | 朋 2057 | 鹏 2058 | 捧 2059 | 碰 2060 | 坯 2061 | 砒 2062 | 霹 2063 | 批 2064 | 披 2065 | 劈 2066 | 琵 2067 | 毗 2068 | 啤 2069 | 脾 2070 | 疲 2071 | 皮 2072 | 匹 2073 | 痞 2074 | 僻 2075 | 屁 2076 | 譬 2077 | 篇 2078 | 偏 2079 | 片 2080 | 骗 2081 | 飘 2082 | 漂 2083 | 瓢 2084 | 票 2085 | 撇 2086 | 瞥 2087 | 拼 2088 | 频 2089 | 贫 2090 | 品 2091 | 聘 2092 | 乒 2093 | 坪 2094 | 苹 2095 | 萍 2096 | 平 2097 | 凭 2098 | 瓶 2099 | 评 2100 | 屏 2101 | 坡 2102 | 泼 2103 | 颇 2104 | 婆 2105 | 破 2106 | 魄 2107 | 迫 2108 | 粕 2109 | 剖 2110 | 扑 2111 | 铺 2112 | 仆 2113 | 莆 2114 | 葡 2115 | 菩 2116 | 蒲 2117 | 埔 2118 | 朴 2119 | 圃 2120 | 普 2121 | 浦 2122 | 谱 2123 | 曝 2124 | 瀑 2125 | 期 2126 | 欺 2127 | 栖 2128 | 戚 2129 | 妻 2130 | 七 2131 | 凄 2132 | 漆 2133 | 柒 2134 | 沏 2135 | 其 2136 | 棋 2137 | 奇 2138 | 歧 2139 | 畦 2140 | 崎 2141 | 脐 2142 | 齐 2143 | 旗 2144 | 祈 2145 | 祁 2146 | 骑 2147 | 起 2148 | 岂 2149 | 乞 2150 | 企 2151 | 启 2152 | 契 2153 | 砌 2154 | 器 2155 | 气 2156 | 迄 2157 | 弃 2158 | 汽 2159 | 泣 2160 | 讫 2161 | 掐 2162 | 洽 2163 | 牵 2164 | 扦 2165 | 钎 2166 | 铅 2167 | 千 2168 | 迁 2169 | 签 2170 | 仟 2171 | 谦 2172 | 乾 2173 | 黔 2174 | 钱 2175 | 钳 2176 | 前 2177 | 潜 2178 | 遣 2179 | 浅 2180 | 谴 2181 | 堑 2182 | 嵌 2183 | 欠 2184 | 歉 2185 | 枪 2186 | 呛 2187 | 腔 2188 | 羌 2189 | 墙 2190 | 蔷 2191 | 强 2192 | 抢 2193 | 橇 2194 | 锹 2195 | 敲 2196 | 悄 2197 | 桥 2198 | 瞧 2199 | 乔 2200 | 侨 2201 | 巧 2202 | 鞘 2203 | 撬 2204 | 翘 2205 | 峭 2206 | 俏 2207 | 窍 2208 | 切 2209 | 茄 2210 | 且 2211 | 怯 2212 | 窃 2213 | 钦 2214 | 侵 2215 | 亲 2216 | 秦 2217 | 琴 2218 | 勤 2219 | 芹 2220 | 擒 2221 | 禽 2222 | 寝 2223 | 沁 2224 | 青 2225 | 轻 2226 | 氢 2227 | 倾 2228 | 卿 2229 | 清 2230 | 擎 2231 | 晴 2232 | 氰 2233 | 情 2234 | 顷 2235 | 请 2236 | 庆 2237 | 琼 2238 | 穷 2239 | 秋 2240 | 丘 2241 | 邱 2242 | 球 2243 | 求 2244 | 囚 2245 | 酋 2246 | 泅 2247 | 趋 2248 | 区 2249 | 蛆 2250 | 曲 2251 | 躯 2252 | 屈 2253 | 驱 2254 | 渠 2255 | 取 2256 | 娶 2257 | 龋 2258 | 趣 2259 | 去 2260 | 圈 2261 | 颧 2262 | 权 2263 | 醛 2264 | 泉 2265 | 全 2266 | 痊 2267 | 拳 2268 | 犬 2269 | 券 2270 | 劝 2271 | 缺 2272 | 炔 2273 | 瘸 2274 | 却 2275 | 鹊 2276 | 榷 2277 | 确 2278 | 雀 2279 | 裙 2280 | 群 2281 | 然 2282 | 燃 2283 | 冉 2284 | 染 2285 | 瓤 2286 | 壤 2287 | 攘 2288 | 嚷 2289 | 让 2290 | 饶 2291 | 扰 2292 | 绕 2293 | 惹 2294 | 热 2295 | 壬 2296 | 仁 2297 | 人 2298 | 忍 2299 | 韧 2300 | 任 2301 | 认 2302 | 刃 2303 | 妊 2304 | 纫 2305 | 扔 2306 | 仍 2307 | 日 2308 | 戎 2309 | 茸 2310 | 蓉 2311 | 荣 2312 | 融 2313 | 熔 2314 | 溶 2315 | 容 2316 | 绒 2317 | 冗 2318 | 揉 2319 | 柔 2320 | 肉 2321 | 茹 2322 | 蠕 2323 | 儒 2324 | 孺 2325 | 如 2326 | 辱 2327 | 乳 2328 | 汝 2329 | 入 2330 | 褥 2331 | 软 2332 | 阮 2333 | 蕊 2334 | 瑞 2335 | 锐 2336 | 闰 2337 | 润 2338 | 若 2339 | 弱 2340 | 撒 2341 | 洒 2342 | 萨 2343 | 腮 2344 | 鳃 2345 | 塞 2346 | 赛 2347 | 三 2348 | 叁 2349 | 伞 2350 | 散 2351 | 桑 2352 | 嗓 2353 | 丧 2354 | 搔 2355 | 骚 2356 | 扫 2357 | 嫂 2358 | 瑟 2359 | 色 2360 | 涩 2361 | 森 2362 | 僧 2363 | 莎 2364 | 砂 2365 | 杀 2366 | 刹 2367 | 沙 2368 | 纱 2369 | 傻 2370 | 啥 2371 | 煞 2372 | 筛 2373 | 晒 2374 | 珊 2375 | 苫 2376 | 杉 2377 | 山 2378 | 删 2379 | 煽 2380 | 衫 2381 | 闪 2382 | 陕 2383 | 擅 2384 | 赡 2385 | 膳 2386 | 善 2387 | 汕 2388 | 扇 2389 | 缮 2390 | 墒 2391 | 伤 2392 | 商 2393 | 赏 2394 | 晌 2395 | 上 2396 | 尚 2397 | 裳 2398 | 梢 2399 | 捎 2400 | 稍 2401 | 烧 2402 | 芍 2403 | 勺 2404 | 韶 2405 | 少 2406 | 哨 2407 | 邵 2408 | 绍 2409 | 奢 2410 | 赊 2411 | 蛇 2412 | 舌 2413 | 舍 2414 | 赦 2415 | 摄 2416 | 射 2417 | 慑 2418 | 涉 2419 | 社 2420 | 设 2421 | 砷 2422 | 申 2423 | 呻 2424 | 伸 2425 | 身 2426 | 深 2427 | 娠 2428 | 绅 2429 | 神 2430 | 沈 2431 | 审 2432 | 婶 2433 | 甚 2434 | 肾 2435 | 慎 2436 | 渗 2437 | 声 2438 | 生 2439 | 甥 2440 | 牲 2441 | 升 2442 | 绳 2443 | 省 2444 | 盛 2445 | 剩 2446 | 胜 2447 | 圣 2448 | 师 2449 | 失 2450 | 狮 2451 | 施 2452 | 湿 2453 | 诗 2454 | 尸 2455 | 虱 2456 | 十 2457 | 石 2458 | 拾 2459 | 时 2460 | 什 2461 | 食 2462 | 蚀 2463 | 实 2464 | 识 2465 | 史 2466 | 矢 2467 | 使 2468 | 屎 2469 | 驶 2470 | 始 2471 | 式 2472 | 示 2473 | 士 2474 | 世 2475 | 柿 2476 | 事 2477 | 拭 2478 | 誓 2479 | 逝 2480 | 势 2481 | 是 2482 | 嗜 2483 | 噬 2484 | 适 2485 | 仕 2486 | 侍 2487 | 释 2488 | 饰 2489 | 氏 2490 | 市 2491 | 恃 2492 | 室 2493 | 视 2494 | 试 2495 | 收 2496 | 手 2497 | 首 2498 | 守 2499 | 寿 2500 | 授 2501 | 售 2502 | 受 2503 | 瘦 2504 | 兽 2505 | 蔬 2506 | 枢 2507 | 梳 2508 | 殊 2509 | 抒 2510 | 输 2511 | 叔 2512 | 舒 2513 | 淑 2514 | 疏 2515 | 书 2516 | 赎 2517 | 孰 2518 | 熟 2519 | 薯 2520 | 暑 2521 | 曙 2522 | 署 2523 | 蜀 2524 | 黍 2525 | 鼠 2526 | 属 2527 | 术 2528 | 述 2529 | 树 2530 | 束 2531 | 戍 2532 | 竖 2533 | 墅 2534 | 庶 2535 | 数 2536 | 漱 2537 | 恕 2538 | 刷 2539 | 耍 2540 | 摔 2541 | 衰 2542 | 甩 2543 | 帅 2544 | 栓 2545 | 拴 2546 | 霜 2547 | 双 2548 | 爽 2549 | 谁 2550 | 水 2551 | 睡 2552 | 税 2553 | 吮 2554 | 瞬 2555 | 顺 2556 | 舜 2557 | 说 2558 | 硕 2559 | 朔 2560 | 烁 2561 | 斯 2562 | 撕 2563 | 嘶 2564 | 思 2565 | 私 2566 | 司 2567 | 丝 2568 | 死 2569 | 肆 2570 | 寺 2571 | 嗣 2572 | 四 2573 | 伺 2574 | 似 2575 | 饲 2576 | 巳 2577 | 松 2578 | 耸 2579 | 怂 2580 | 颂 2581 | 送 2582 | 宋 2583 | 讼 2584 | 诵 2585 | 搜 2586 | 艘 2587 | 擞 2588 | 嗽 2589 | 苏 2590 | 酥 2591 | 俗 2592 | 素 2593 | 速 2594 | 粟 2595 | 塑 2596 | 溯 2597 | 宿 2598 | 诉 2599 | 肃 2600 | 酸 2601 | 蒜 2602 | 算 2603 | 虽 2604 | 隋 2605 | 随 2606 | 绥 2607 | 髓 2608 | 碎 2609 | 岁 2610 | 穗 2611 | 遂 2612 | 隧 2613 | 祟 2614 | 孙 2615 | 损 2616 | 笋 2617 | 蓑 2618 | 梭 2619 | 唆 2620 | 缩 2621 | 琐 2622 | 索 2623 | 锁 2624 | 所 2625 | 塌 2626 | 他 2627 | 它 2628 | 她 2629 | 塔 2630 | 獭 2631 | 挞 2632 | 蹋 2633 | 踏 2634 | 胎 2635 | 苔 2636 | 抬 2637 | 台 2638 | 泰 2639 | 酞 2640 | 太 2641 | 态 2642 | 汰 2643 | 坍 2644 | 摊 2645 | 贪 2646 | 瘫 2647 | 滩 2648 | 坛 2649 | 檀 2650 | 痰 2651 | 潭 2652 | 谭 2653 | 谈 2654 | 坦 2655 | 毯 2656 | 袒 2657 | 碳 2658 | 探 2659 | 叹 2660 | 炭 2661 | 汤 2662 | 塘 2663 | 搪 2664 | 堂 2665 | 棠 2666 | 膛 2667 | 唐 2668 | 糖 2669 | 倘 2670 | 躺 2671 | 淌 2672 | 趟 2673 | 烫 2674 | 掏 2675 | 涛 2676 | 滔 2677 | 绦 2678 | 萄 2679 | 桃 2680 | 逃 2681 | 淘 2682 | 陶 2683 | 讨 2684 | 套 2685 | 特 2686 | 藤 2687 | 腾 2688 | 疼 2689 | 誊 2690 | 梯 2691 | 剔 2692 | 踢 2693 | 锑 2694 | 提 2695 | 题 2696 | 蹄 2697 | 啼 2698 | 体 2699 | 替 2700 | 嚏 2701 | 惕 2702 | 涕 2703 | 剃 2704 | 屉 2705 | 天 2706 | 添 2707 | 填 2708 | 田 2709 | 甜 2710 | 恬 2711 | 舔 2712 | 腆 2713 | 挑 2714 | 条 2715 | 迢 2716 | 眺 2717 | 跳 2718 | 贴 2719 | 铁 2720 | 帖 2721 | 厅 2722 | 听 2723 | 烃 2724 | 汀 2725 | 廷 2726 | 停 2727 | 亭 2728 | 庭 2729 | 挺 2730 | 艇 2731 | 通 2732 | 桐 2733 | 酮 2734 | 瞳 2735 | 同 2736 | 铜 2737 | 彤 2738 | 童 2739 | 桶 2740 | 捅 2741 | 筒 2742 | 统 2743 | 痛 2744 | 偷 2745 | 投 2746 | 头 2747 | 透 2748 | 凸 2749 | 秃 2750 | 突 2751 | 图 2752 | 徒 2753 | 途 2754 | 涂 2755 | 屠 2756 | 土 2757 | 吐 2758 | 兔 2759 | 湍 2760 | 团 2761 | 推 2762 | 颓 2763 | 腿 2764 | 蜕 2765 | 褪 2766 | 退 2767 | 吞 2768 | 屯 2769 | 臀 2770 | 拖 2771 | 托 2772 | 脱 2773 | 鸵 2774 | 陀 2775 | 驮 2776 | 驼 2777 | 椭 2778 | 妥 2779 | 拓 2780 | 唾 2781 | 挖 2782 | 哇 2783 | 蛙 2784 | 洼 2785 | 娃 2786 | 瓦 2787 | 袜 2788 | 歪 2789 | 外 2790 | 豌 2791 | 弯 2792 | 湾 2793 | 玩 2794 | 顽 2795 | 丸 2796 | 烷 2797 | 完 2798 | 碗 2799 | 挽 2800 | 晚 2801 | 皖 2802 | 惋 2803 | 宛 2804 | 婉 2805 | 万 2806 | 腕 2807 | 汪 2808 | 王 2809 | 亡 2810 | 枉 2811 | 网 2812 | 往 2813 | 旺 2814 | 望 2815 | 忘 2816 | 妄 2817 | 威 2818 | 巍 2819 | 微 2820 | 危 2821 | 韦 2822 | 违 2823 | 桅 2824 | 围 2825 | 唯 2826 | 惟 2827 | 为 2828 | 潍 2829 | 维 2830 | 苇 2831 | 萎 2832 | 委 2833 | 伟 2834 | 伪 2835 | 尾 2836 | 纬 2837 | 未 2838 | 蔚 2839 | 味 2840 | 畏 2841 | 胃 2842 | 喂 2843 | 魏 2844 | 位 2845 | 渭 2846 | 谓 2847 | 尉 2848 | 慰 2849 | 卫 2850 | 瘟 2851 | 温 2852 | 蚊 2853 | 文 2854 | 闻 2855 | 纹 2856 | 吻 2857 | 稳 2858 | 紊 2859 | 问 2860 | 嗡 2861 | 翁 2862 | 瓮 2863 | 挝 2864 | 蜗 2865 | 涡 2866 | 窝 2867 | 我 2868 | 斡 2869 | 卧 2870 | 握 2871 | 沃 2872 | 巫 2873 | 呜 2874 | 钨 2875 | 乌 2876 | 污 2877 | 诬 2878 | 屋 2879 | 无 2880 | 芜 2881 | 梧 2882 | 吾 2883 | 吴 2884 | 毋 2885 | 武 2886 | 五 2887 | 捂 2888 | 午 2889 | 舞 2890 | 伍 2891 | 侮 2892 | 坞 2893 | 戊 2894 | 雾 2895 | 晤 2896 | 物 2897 | 勿 2898 | 务 2899 | 悟 2900 | 误 2901 | 昔 2902 | 熙 2903 | 析 2904 | 西 2905 | 硒 2906 | 矽 2907 | 晰 2908 | 嘻 2909 | 吸 2910 | 锡 2911 | 牺 2912 | 稀 2913 | 息 2914 | 希 2915 | 悉 2916 | 膝 2917 | 夕 2918 | 惜 2919 | 熄 2920 | 烯 2921 | 溪 2922 | 汐 2923 | 犀 2924 | 檄 2925 | 袭 2926 | 席 2927 | 习 2928 | 媳 2929 | 喜 2930 | 铣 2931 | 洗 2932 | 系 2933 | 隙 2934 | 戏 2935 | 细 2936 | 瞎 2937 | 虾 2938 | 匣 2939 | 霞 2940 | 辖 2941 | 暇 2942 | 峡 2943 | 侠 2944 | 狭 2945 | 下 2946 | 厦 2947 | 夏 2948 | 吓 2949 | 掀 2950 | 锨 2951 | 先 2952 | 仙 2953 | 鲜 2954 | 纤 2955 | 咸 2956 | 贤 2957 | 衔 2958 | 舷 2959 | 闲 2960 | 涎 2961 | 弦 2962 | 嫌 2963 | 显 2964 | 险 2965 | 现 2966 | 献 2967 | 县 2968 | 腺 2969 | 馅 2970 | 羡 2971 | 宪 2972 | 陷 2973 | 限 2974 | 线 2975 | 相 2976 | 厢 2977 | 镶 2978 | 香 2979 | 箱 2980 | 襄 2981 | 湘 2982 | 乡 2983 | 翔 2984 | 祥 2985 | 详 2986 | 想 2987 | 响 2988 | 享 2989 | 项 2990 | 巷 2991 | 橡 2992 | 像 2993 | 向 2994 | 象 2995 | 萧 2996 | 硝 2997 | 霄 2998 | 削 2999 | 哮 3000 | 嚣 3001 | 销 3002 | 消 3003 | 宵 3004 | 淆 3005 | 晓 3006 | 小 3007 | 孝 3008 | 校 3009 | 肖 3010 | 啸 3011 | 笑 3012 | 效 3013 | 楔 3014 | 些 3015 | 歇 3016 | 蝎 3017 | 鞋 3018 | 协 3019 | 挟 3020 | 携 3021 | 邪 3022 | 斜 3023 | 胁 3024 | 谐 3025 | 写 3026 | 械 3027 | 卸 3028 | 蟹 3029 | 懈 3030 | 泄 3031 | 泻 3032 | 谢 3033 | 屑 3034 | 薪 3035 | 芯 3036 | 锌 3037 | 欣 3038 | 辛 3039 | 新 3040 | 忻 3041 | 心 3042 | 信 3043 | 衅 3044 | 星 3045 | 腥 3046 | 猩 3047 | 惺 3048 | 兴 3049 | 刑 3050 | 型 3051 | 形 3052 | 邢 3053 | 行 3054 | 醒 3055 | 幸 3056 | 杏 3057 | 性 3058 | 姓 3059 | 兄 3060 | 凶 3061 | 胸 3062 | 匈 3063 | 汹 3064 | 雄 3065 | 熊 3066 | 休 3067 | 修 3068 | 羞 3069 | 朽 3070 | 嗅 3071 | 锈 3072 | 秀 3073 | 袖 3074 | 绣 3075 | 墟 3076 | 戌 3077 | 需 3078 | 虚 3079 | 嘘 3080 | 须 3081 | 徐 3082 | 许 3083 | 蓄 3084 | 酗 3085 | 叙 3086 | 旭 3087 | 序 3088 | 畜 3089 | 恤 3090 | 絮 3091 | 婿 3092 | 绪 3093 | 续 3094 | 轩 3095 | 喧 3096 | 宣 3097 | 悬 3098 | 旋 3099 | 玄 3100 | 选 3101 | 癣 3102 | 眩 3103 | 绚 3104 | 靴 3105 | 薛 3106 | 学 3107 | 穴 3108 | 雪 3109 | 血 3110 | 勋 3111 | 熏 3112 | 循 3113 | 旬 3114 | 询 3115 | 寻 3116 | 驯 3117 | 巡 3118 | 殉 3119 | 汛 3120 | 训 3121 | 讯 3122 | 逊 3123 | 迅 3124 | 压 3125 | 押 3126 | 鸦 3127 | 鸭 3128 | 呀 3129 | 丫 3130 | 芽 3131 | 牙 3132 | 蚜 3133 | 崖 3134 | 衙 3135 | 涯 3136 | 雅 3137 | 哑 3138 | 亚 3139 | 讶 3140 | 焉 3141 | 咽 3142 | 阉 3143 | 烟 3144 | 淹 3145 | 盐 3146 | 严 3147 | 研 3148 | 蜒 3149 | 岩 3150 | 延 3151 | 言 3152 | 颜 3153 | 阎 3154 | 炎 3155 | 沿 3156 | 奄 3157 | 掩 3158 | 眼 3159 | 衍 3160 | 演 3161 | 艳 3162 | 堰 3163 | 燕 3164 | 厌 3165 | 砚 3166 | 雁 3167 | 唁 3168 | 彦 3169 | 焰 3170 | 宴 3171 | 谚 3172 | 验 3173 | 殃 3174 | 央 3175 | 鸯 3176 | 秧 3177 | 杨 3178 | 扬 3179 | 佯 3180 | 疡 3181 | 羊 3182 | 洋 3183 | 阳 3184 | 氧 3185 | 仰 3186 | 痒 3187 | 养 3188 | 样 3189 | 漾 3190 | 邀 3191 | 腰 3192 | 妖 3193 | 瑶 3194 | 摇 3195 | 尧 3196 | 遥 3197 | 窑 3198 | 谣 3199 | 姚 3200 | 咬 3201 | 舀 3202 | 药 3203 | 要 3204 | 耀 3205 | 椰 3206 | 噎 3207 | 耶 3208 | 爷 3209 | 野 3210 | 冶 3211 | 也 3212 | 页 3213 | 掖 3214 | 业 3215 | 叶 3216 | 曳 3217 | 腋 3218 | 夜 3219 | 液 3220 | 一 3221 | 壹 3222 | 医 3223 | 揖 3224 | 铱 3225 | 依 3226 | 伊 3227 | 衣 3228 | 颐 3229 | 夷 3230 | 遗 3231 | 移 3232 | 仪 3233 | 胰 3234 | 疑 3235 | 沂 3236 | 宜 3237 | 姨 3238 | 彝 3239 | 椅 3240 | 蚁 3241 | 倚 3242 | 已 3243 | 乙 3244 | 矣 3245 | 以 3246 | 艺 3247 | 抑 3248 | 易 3249 | 邑 3250 | 屹 3251 | 亿 3252 | 役 3253 | 臆 3254 | 逸 3255 | 肄 3256 | 疫 3257 | 亦 3258 | 裔 3259 | 意 3260 | 毅 3261 | 忆 3262 | 义 3263 | 益 3264 | 溢 3265 | 诣 3266 | 议 3267 | 谊 3268 | 译 3269 | 异 3270 | 翼 3271 | 翌 3272 | 绎 3273 | 茵 3274 | 荫 3275 | 因 3276 | 殷 3277 | 音 3278 | 阴 3279 | 姻 3280 | 吟 3281 | 银 3282 | 淫 3283 | 寅 3284 | 饮 3285 | 尹 3286 | 引 3287 | 隐 3288 | 印 3289 | 英 3290 | 樱 3291 | 婴 3292 | 鹰 3293 | 应 3294 | 缨 3295 | 莹 3296 | 萤 3297 | 营 3298 | 荧 3299 | 蝇 3300 | 迎 3301 | 赢 3302 | 盈 3303 | 影 3304 | 颖 3305 | 硬 3306 | 映 3307 | 哟 3308 | 拥 3309 | 佣 3310 | 臃 3311 | 痈 3312 | 庸 3313 | 雍 3314 | 踊 3315 | 蛹 3316 | 咏 3317 | 泳 3318 | 涌 3319 | 永 3320 | 恿 3321 | 勇 3322 | 用 3323 | 幽 3324 | 优 3325 | 悠 3326 | 忧 3327 | 尤 3328 | 由 3329 | 邮 3330 | 铀 3331 | 犹 3332 | 油 3333 | 游 3334 | 酉 3335 | 有 3336 | 友 3337 | 右 3338 | 佑 3339 | 釉 3340 | 诱 3341 | 又 3342 | 幼 3343 | 迂 3344 | 淤 3345 | 于 3346 | 盂 3347 | 榆 3348 | 虞 3349 | 愚 3350 | 舆 3351 | 余 3352 | 俞 3353 | 逾 3354 | 鱼 3355 | 愉 3356 | 渝 3357 | 渔 3358 | 隅 3359 | 予 3360 | 娱 3361 | 雨 3362 | 与 3363 | 屿 3364 | 禹 3365 | 宇 3366 | 语 3367 | 羽 3368 | 玉 3369 | 域 3370 | 芋 3371 | 郁 3372 | 吁 3373 | 遇 3374 | 喻 3375 | 峪 3376 | 御 3377 | 愈 3378 | 欲 3379 | 狱 3380 | 育 3381 | 誉 3382 | 浴 3383 | 寓 3384 | 裕 3385 | 预 3386 | 豫 3387 | 驭 3388 | 鸳 3389 | 渊 3390 | 冤 3391 | 元 3392 | 垣 3393 | 袁 3394 | 原 3395 | 援 3396 | 辕 3397 | 园 3398 | 员 3399 | 圆 3400 | 猿 3401 | 源 3402 | 缘 3403 | 远 3404 | 苑 3405 | 愿 3406 | 怨 3407 | 院 3408 | 曰 3409 | 约 3410 | 越 3411 | 跃 3412 | 钥 3413 | 岳 3414 | 粤 3415 | 月 3416 | 悦 3417 | 阅 3418 | 耘 3419 | 云 3420 | 郧 3421 | 匀 3422 | 陨 3423 | 允 3424 | 运 3425 | 蕴 3426 | 酝 3427 | 晕 3428 | 韵 3429 | 孕 3430 | 匝 3431 | 砸 3432 | 杂 3433 | 栽 3434 | 哉 3435 | 灾 3436 | 宰 3437 | 载 3438 | 再 3439 | 在 3440 | 咱 3441 | 攒 3442 | 暂 3443 | 赞 3444 | 赃 3445 | 脏 3446 | 葬 3447 | 遭 3448 | 糟 3449 | 凿 3450 | 藻 3451 | 枣 3452 | 早 3453 | 澡 3454 | 蚤 3455 | 躁 3456 | 噪 3457 | 造 3458 | 皂 3459 | 灶 3460 | 燥 3461 | 责 3462 | 择 3463 | 则 3464 | 泽 3465 | 贼 3466 | 怎 3467 | 增 3468 | 憎 3469 | 曾 3470 | 赠 3471 | 扎 3472 | 喳 3473 | 渣 3474 | 札 3475 | 轧 3476 | 铡 3477 | 闸 3478 | 眨 3479 | 栅 3480 | 榨 3481 | 咋 3482 | 乍 3483 | 炸 3484 | 诈 3485 | 摘 3486 | 斋 3487 | 宅 3488 | 窄 3489 | 债 3490 | 寨 3491 | 瞻 3492 | 毡 3493 | 詹 3494 | 粘 3495 | 沾 3496 | 盏 3497 | 斩 3498 | 辗 3499 | 崭 3500 | 展 3501 | 蘸 3502 | 栈 3503 | 占 3504 | 战 3505 | 站 3506 | 湛 3507 | 绽 3508 | 樟 3509 | 章 3510 | 彰 3511 | 漳 3512 | 张 3513 | 掌 3514 | 涨 3515 | 杖 3516 | 丈 3517 | 帐 3518 | 账 3519 | 仗 3520 | 胀 3521 | 瘴 3522 | 障 3523 | 招 3524 | 昭 3525 | 找 3526 | 沼 3527 | 赵 3528 | 照 3529 | 罩 3530 | 兆 3531 | 肇 3532 | 召 3533 | 遮 3534 | 折 3535 | 哲 3536 | 蛰 3537 | 辙 3538 | 者 3539 | 锗 3540 | 蔗 3541 | 这 3542 | 浙 3543 | 珍 3544 | 斟 3545 | 真 3546 | 甄 3547 | 砧 3548 | 臻 3549 | 贞 3550 | 针 3551 | 侦 3552 | 枕 3553 | 疹 3554 | 诊 3555 | 震 3556 | 振 3557 | 镇 3558 | 阵 3559 | 蒸 3560 | 挣 3561 | 睁 3562 | 征 3563 | 狰 3564 | 争 3565 | 怔 3566 | 整 3567 | 拯 3568 | 正 3569 | 政 3570 | 帧 3571 | 症 3572 | 郑 3573 | 证 3574 | 芝 3575 | 枝 3576 | 支 3577 | 吱 3578 | 蜘 3579 | 知 3580 | 肢 3581 | 脂 3582 | 汁 3583 | 之 3584 | 织 3585 | 职 3586 | 直 3587 | 植 3588 | 殖 3589 | 执 3590 | 值 3591 | 侄 3592 | 址 3593 | 指 3594 | 止 3595 | 趾 3596 | 只 3597 | 旨 3598 | 纸 3599 | 志 3600 | 挚 3601 | 掷 3602 | 至 3603 | 致 3604 | 置 3605 | 帜 3606 | 峙 3607 | 制 3608 | 智 3609 | 秩 3610 | 稚 3611 | 质 3612 | 炙 3613 | 痔 3614 | 滞 3615 | 治 3616 | 窒 3617 | 中 3618 | 盅 3619 | 忠 3620 | 钟 3621 | 衷 3622 | 终 3623 | 种 3624 | 肿 3625 | 重 3626 | 仲 3627 | 众 3628 | 舟 3629 | 周 3630 | 州 3631 | 洲 3632 | 诌 3633 | 粥 3634 | 轴 3635 | 肘 3636 | 帚 3637 | 咒 3638 | 皱 3639 | 宙 3640 | 昼 3641 | 骤 3642 | 珠 3643 | 株 3644 | 蛛 3645 | 朱 3646 | 猪 3647 | 诸 3648 | 诛 3649 | 逐 3650 | 竹 3651 | 烛 3652 | 煮 3653 | 拄 3654 | 瞩 3655 | 嘱 3656 | 主 3657 | 著 3658 | 柱 3659 | 助 3660 | 蛀 3661 | 贮 3662 | 铸 3663 | 筑 3664 | 住 3665 | 注 3666 | 祝 3667 | 驻 3668 | 抓 3669 | 爪 3670 | 拽 3671 | 专 3672 | 砖 3673 | 转 3674 | 撰 3675 | 赚 3676 | 篆 3677 | 桩 3678 | 庄 3679 | 装 3680 | 妆 3681 | 撞 3682 | 壮 3683 | 状 3684 | 椎 3685 | 锥 3686 | 追 3687 | 赘 3688 | 坠 3689 | 缀 3690 | 谆 3691 | 准 3692 | 捉 3693 | 拙 3694 | 卓 3695 | 桌 3696 | 琢 3697 | 茁 3698 | 酌 3699 | 啄 3700 | 着 3701 | 灼 3702 | 浊 3703 | 兹 3704 | 咨 3705 | 资 3706 | 姿 3707 | 滋 3708 | 淄 3709 | 孜 3710 | 紫 3711 | 仔 3712 | 籽 3713 | 滓 3714 | 子 3715 | 自 3716 | 渍 3717 | 字 3718 | 鬃 3719 | 棕 3720 | 踪 3721 | 宗 3722 | 综 3723 | 总 3724 | 纵 3725 | 邹 3726 | 走 3727 | 奏 3728 | 揍 3729 | 租 3730 | 足 3731 | 卒 3732 | 族 3733 | 祖 3734 | 诅 3735 | 阻 3736 | 组 3737 | 钻 3738 | 纂 3739 | 嘴 3740 | 醉 3741 | 最 3742 | 罪 3743 | 尊 3744 | 遵 3745 | 昨 3746 | 左 3747 | 佐 3748 | 柞 3749 | 做 3750 | 作 3751 | 坐 3752 | 座 3753 | 叨 3754 | 恰 3755 | 蜓 3756 | 筝 3757 | 蜻 3758 | 橘 -------------------------------------------------------------------------------- /src/windIndexCore/dic/custom_dic.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rock365/windsearch/890f2fd79dca7bafd9971e906b9ece719e6dd989/src/windIndexCore/dic/custom_dic.txt -------------------------------------------------------------------------------- /src/windIndexCore/dic/dic_with_idf.dic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rock365/windsearch/890f2fd79dca7bafd9971e906b9ece719e6dd989/src/windIndexCore/dic/dic_with_idf.dic -------------------------------------------------------------------------------- /src/windIndexCore/dic/not_word.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rock365/windsearch/890f2fd79dca7bafd9971e906b9ece719e6dd989/src/windIndexCore/dic/not_word.txt -------------------------------------------------------------------------------- /src/windIndexCore/fileLock/batchWrite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rock365/windsearch/890f2fd79dca7bafd9971e906b9ece719e6dd989/src/windIndexCore/fileLock/batchWrite -------------------------------------------------------------------------------- /src/windIndexCore/height_freq_word/height_freq_word.txt: -------------------------------------------------------------------------------- 1 | 网 2 | , 3 | 在线 4 | : 5 | 下载 6 | 大全 7 | 第 8 | 年 9 | ? 10 | 公司 11 | 中国 12 | 版 13 | 图片 14 | 免费 15 | 价格 16 | 怎么 17 | 最新 18 | 报价 19 | ! 20 | 手机 21 | 汽车 22 | 是 23 | 什么 24 | 视频 25 | 有 26 | 信息 27 | 有限 28 | 有限公司 29 | 游戏 30 | 2023 31 | 论坛 32 | 观看 33 | 最 34 | 一 35 | 好 36 | 在线观看 37 | 高清 38 | 软件 39 | 科技 40 | 新 41 | 我 42 | 中文 43 | 大 44 | 资料 45 | 2 46 | 图 47 | 技术 48 | 官方 49 | 设计 50 | 新闻 51 | 中心 52 | 1 53 | 个人 54 | 安卓 55 | app 56 | 服务 57 | 北京 58 | 频道 59 | 系统 60 | 3 61 | 分析 62 | 之家 63 | 之 64 | 资讯 65 | 万 66 | 市场 67 | 网站 68 | 查询 69 | 批发 70 | 你 71 | 小说 72 | 高 73 | 不 74 | 电子 75 | 行业 76 | 电影 77 | 报告 78 | . 79 | 产品 80 | 影视 81 | 多少 82 | 上 83 | 人 84 | 厂家 85 | 二手 86 | 电话 87 | 2024 88 | 日 89 | 学 90 | 阅读 91 | 看 92 | 研究 93 | 企业 94 | 怎么样 95 | 车 96 | 如何 97 | 家 98 | 上海 99 | 黄页 100 | 健康 101 | 平台 102 | 咨询 103 | 第一 104 | 工作 105 | 大学 106 | 教育 107 | 2022 108 | 爱 109 | 小 110 | 问答 111 | 工程 112 | 设备 113 | 章 114 | 手游 115 | 元 116 | 完整 117 | 公告 118 | 考试 119 | 88 120 | 新版 121 | 发展 122 | 三 123 | 百科 124 | 5 125 | 月 126 | 全集 127 | 4 128 | 交易 129 | 世界 130 | 意思 131 | 参数 132 | 整版 133 | 管理 134 | 完整版 135 | 影院 136 | 集 137 | 电脑 138 | 综合 139 | 天下 140 | 钱 141 | 里 142 | 易 143 | 品牌 144 | 到 145 | 二 146 | 电视 147 | 官 148 | 超 149 | 无 150 | 知识 151 | 医院 152 | 生活 153 | 排行 154 | 方法 155 | 专业 156 | 为 157 | 地址 158 | 直播 159 | 历史 160 | 推荐 161 | 社区 162 | 安装 163 | 资源 164 | 吧 165 | 太平 166 | 苹果 167 | 太平洋 168 | 全 169 | 字 170 | 投资 171 | 招聘 172 | 介绍 173 | a 174 | 天 175 | 平洋 176 | 免费下载 177 | 店 178 | 播放 179 | 新浪 180 | 机械 181 | 后 182 | 法律 183 | 股票 184 | 个 185 | 中关 186 | 房 187 | 关村 188 | 中关村 189 | 排行榜 190 | 中关村在线 191 | 素材 192 | 网上 193 | & 194 | 哪 195 | 国际 196 | 配置 197 | 活动 198 | 二手房 199 | 教程 200 | 行情 201 | 科网 202 | 要 203 | 金融 204 | 英语 205 | 律师 206 | 网络 207 | 款 208 | 更新 209 | 出售 210 | 解释 211 | 双 212 | 攻略 213 | 国产 214 | 能 215 | 时间 216 | -zol 217 | by 218 | 第二 219 | 被 220 | 供应 221 | 数据 222 | 做 223 | 10 224 | 以上 225 | 6 226 | 医生 227 | 经济 228 | 手 229 | 模型 230 | 智能 231 | 证券 232 | 体育 233 | 问 234 | 安全 235 | 7 236 | 从 237 | 四 238 | 来 239 | 2021 240 | 站 241 | 项目 242 | 基金 243 | -2023 244 | 片 245 | 在线阅读 246 | 学习 247 | 测试 248 | 法网 249 | 论文 250 | 库 251 | powered 252 | 找 253 | 查 254 | 试题 255 | 模板 256 | 房天 257 | 问题 258 | 电视剧 259 | 高考 260 | 手机版 261 | 中文网 262 | 将 263 | 找法网 264 | 主页 265 | 发布 266 | 自动 267 | 培训 268 | 山东 269 | 起点 270 | 买 271 | 深圳 272 | discuz 273 | 未来 274 | 工具 275 | 8 276 | 会 277 | 学科 278 | 正版 279 | 可以 280 | 专题 281 | 开发 282 | 优选 283 | 图纸 284 | 表 285 | 中研 286 | 多 287 | 云 288 | 年级 289 | 4s 290 | 银行 291 | 游戏下载 292 | 河南 293 | 计划 294 | 金融界 295 | 金 296 | 游网 297 | 音乐 298 | 我的 299 | 郑州 300 | 移动 301 | 号 302 | 快 303 | 楼盘 304 | 生物 305 | 空间 306 | 精选 307 | 第三 308 | 乐 309 | 2020 310 | 都 311 | 型 312 | 字典 313 | 汽 314 | 机 315 | 对 316 | 模拟 317 | 日韩 318 | 手机大全 319 | 美 320 | 系列 321 | 广东 322 | + 323 | 国家 324 | 绿色 325 | 下 326 | 车市 327 | 装修 328 | 作文 329 | 全国 330 | 南瓜 331 | 评价 332 | 健康网 333 | 试卷 334 | 车网 335 | 哪个 336 | 学院 337 | 产业 338 | 文化 339 | 亿 340 | 股份 341 | 在线播放 342 | 区 343 | 通 344 | 这 345 | 五 346 | 科技有限公司 347 | 更 348 | 可 349 | 英寸 350 | -- 351 | com 352 | 两 353 | 小学 354 | 人民 355 | 前景 356 | 软件下载 357 | 美食 358 | 其他 359 | 治疗 360 | 采购 361 | 给 362 | c 363 | 国语 364 | 成语 365 | 公 366 | 法律咨询 367 | 家庭 368 | 新闻网 369 | 九 370 | 使用 371 | 教学 372 | 普华 373 | 官方版 374 | 全球 375 | 业 376 | 城市 377 | 中考 378 | 排名 379 | 2019 380 | 广州 381 | 财经 382 | 重庆 383 | 应用 384 | 组 385 | 四川 386 | 百 387 | 清 388 | 范文 389 | 精品 390 | 能源 391 | – 392 | 卡 393 | 招商 394 | 就 395 | 相关 396 | 个人资料 397 | 人资料 398 | 以下 399 | 智 400 | 科学 401 | 股 402 | 八 403 | 标准 404 | 生产 405 | 剧 406 | 电 407 | 沐风 408 | 软件站 409 | 总结 410 | 江苏 411 | 初 412 | 行 413 | 下载站 414 | 门户 415 | vs 416 | 开始 417 | 日本 418 | 湖北 419 | 国 420 | 动漫 421 | 十 422 | 海 423 | 电影在线 424 | 让 425 | 学生 426 | 方案 427 | 首页 428 | 旅游 429 | 打 430 | 建设 431 | 9 432 | 飞 433 | cpu 434 | 酷 435 | 一个 436 | 风网 437 | 链 438 | 开 439 | 篇 440 | 学校 441 | 材料 442 | 天津 443 | 家园 444 | 像素 445 | 已 446 | 经销商 447 | 搜索 448 | 投 449 | 数学 450 | 动态 451 | 词典 452 | 沐风网 453 | 混合 454 | 翻译 455 | 至 456 | 习题 457 | 城 458 | 向 459 | 现代 460 | 销售 461 | 浙江 462 | 建筑 463 | 吃 464 | 求 465 | 2018 466 | 说网 467 | 支持 468 | 新华 469 | 内 470 | 小说网 471 | 造句 472 | 艺术 473 | 加 474 | 华 475 | 加盟 476 | 请 477 | 新浪汽车 478 | 单 479 | 人中 480 | 研究报告 481 | 分享 482 | 王 483 | 华为 484 | 盘 485 | 还 486 | 新浪网 487 | 不好 488 | 龙 489 | 汇 490 | 玩 491 | 机构 492 | 三星 493 | 期 494 | 代理 495 | 买卖 496 | 前 497 | 5000 498 | 考 499 | 处理 500 | 外观 501 | -------------------------------------------------------------------------------- /src/windIndexCore/height_freq_word/height_freq_word_json.txt: -------------------------------------------------------------------------------- 1 | {"\u7f51":0,",":1,"\u5728\u7ebf":2,":":3,"\u4e0b\u8f7d":4,"\u5927\u5168":5,"\u7b2c":6,"\u5e74":7,"?":8,"\u516c\u53f8":9,"\u4e2d\u56fd":10,"\u7248":11,"\u56fe\u7247":12,"\u514d\u8d39":13,"\u4ef7\u683c":14,"\u600e\u4e48":15,"\u6700\u65b0":16,"\u62a5\u4ef7":17,"!":18,"\u624b\u673a":19,"\u6c7d\u8f66":20,"\u662f":21,"\u4ec0\u4e48":22,"\u89c6\u9891":23,"\u6709":24,"\u4fe1\u606f":25,"\u6709\u9650":26,"\u6709\u9650\u516c\u53f8":27,"\u6e38\u620f":28,"2023":29,"\u8bba\u575b":30,"\u89c2\u770b":31,"\u6700":32,"\u4e00":33,"\u597d":34,"\u5728\u7ebf\u89c2\u770b":35,"\u9ad8\u6e05":36,"\u8f6f\u4ef6":37,"\u79d1\u6280":38,"\u65b0":39,"\u6211":40,"\u4e2d\u6587":41,"\u5927":42,"\u8d44\u6599":43,"2":44,"\u56fe":45,"\u6280\u672f":46,"\u5b98\u65b9":47,"\u8bbe\u8ba1":48,"\u65b0\u95fb":49,"\u4e2d\u5fc3":50,"1":51,"\u4e2a\u4eba":52,"\u5b89\u5353":53,"app":54,"\u670d\u52a1":55,"\u5317\u4eac":56,"\u9891\u9053":57,"\u7cfb\u7edf":58,"3":59,"\u5206\u6790":60,"\u4e4b\u5bb6":61,"\u4e4b":62,"\u8d44\u8baf":63,"\u4e07":64,"\u5e02\u573a":65,"\u7f51\u7ad9":66,"\u67e5\u8be2":67,"\u6279\u53d1":68,"\u4f60":69,"\u5c0f\u8bf4":70,"\u9ad8":71,"\u4e0d":72,"\u7535\u5b50":73,"\u884c\u4e1a":74,"\u7535\u5f71":75,"\u62a5\u544a":76,".":77,"\u4ea7\u54c1":78,"\u5f71\u89c6":79,"\u591a\u5c11":80,"\u4e0a":81,"\u4eba":82,"\u5382\u5bb6":83,"\u4e8c\u624b":84,"\u7535\u8bdd":85,"2024":86,"\u65e5":87,"\u5b66":88,"\u9605\u8bfb":89,"\u770b":90,"\u7814\u7a76":91,"\u4f01\u4e1a":92,"\u600e\u4e48\u6837":93,"\u8f66":94,"\u5982\u4f55":95,"\u5bb6":96,"\u4e0a\u6d77":97,"\u9ec4\u9875":98,"\u5065\u5eb7":99,"\u5e73\u53f0":100,"\u54a8\u8be2":101,"\u7b2c\u4e00":102,"\u5de5\u4f5c":103,"\u5927\u5b66":104,"\u6559\u80b2":105,"2022":106,"\u7231":107,"\u5c0f":108,"\u95ee\u7b54":109,"\u5de5\u7a0b":110,"\u8bbe\u5907":111,"\u7ae0":112,"\u624b\u6e38":113,"\u5143":114,"\u5b8c\u6574":115,"\u516c\u544a":116,"\u8003\u8bd5":117,"88":118,"\u65b0\u7248":119,"\u53d1\u5c55":120,"\u4e09":121,"\u767e\u79d1":122,"5":123,"\u6708":124,"\u5168\u96c6":125,"4":126,"\u4ea4\u6613":127,"\u4e16\u754c":128,"\u610f\u601d":129,"\u53c2\u6570":130,"\u6574\u7248":131,"\u7ba1\u7406":132,"\u5b8c\u6574\u7248":133,"\u5f71\u9662":134,"\u96c6":135,"\u7535\u8111":136,"\u7efc\u5408":137,"\u5929\u4e0b":138,"\u94b1":139,"\u91cc":140,"\u6613":141,"\u54c1\u724c":142,"\u5230":143,"\u4e8c":144,"\u7535\u89c6":145,"\u5b98":146,"\u8d85":147,"\u65e0":148,"\u77e5\u8bc6":149,"\u533b\u9662":150,"\u751f\u6d3b":151,"\u6392\u884c":152,"\u65b9\u6cd5":153,"\u4e13\u4e1a":154,"\u4e3a":155,"\u5730\u5740":156,"\u76f4\u64ad":157,"\u5386\u53f2":158,"\u63a8\u8350":159,"\u793e\u533a":160,"\u5b89\u88c5":161,"\u8d44\u6e90":162,"\u5427":163,"\u592a\u5e73":164,"\u82f9\u679c":165,"\u592a\u5e73\u6d0b":166,"\u5168":167,"\u5b57":168,"\u6295\u8d44":169,"\u62db\u8058":170,"\u4ecb\u7ecd":171,"a":172,"\u5929":173,"\u5e73\u6d0b":174,"\u514d\u8d39\u4e0b\u8f7d":175,"\u5e97":176,"\u64ad\u653e":177,"\u65b0\u6d6a":178,"\u673a\u68b0":179,"\u540e":180,"\u6cd5\u5f8b":181,"\u80a1\u7968":182,"\u4e2a":183,"\u4e2d\u5173":184,"\u623f":185,"\u5173\u6751":186,"\u4e2d\u5173\u6751":187,"\u6392\u884c\u699c":188,"\u4e2d\u5173\u6751\u5728\u7ebf":189,"\u7d20\u6750":190,"\u7f51\u4e0a":191,"&":192,"\u54ea":193,"\u56fd\u9645":194,"\u914d\u7f6e":195,"\u6d3b\u52a8":196,"\u4e8c\u624b\u623f":197,"\u6559\u7a0b":198,"\u884c\u60c5":199,"\u79d1\u7f51":200,"\u8981":201,"\u91d1\u878d":202,"\u82f1\u8bed":203,"\u5f8b\u5e08":204,"\u7f51\u7edc":205,"\u6b3e":206,"\u66f4\u65b0":207,"\u51fa\u552e":208,"\u89e3\u91ca":209,"\u53cc":210,"\u653b\u7565":211,"\u56fd\u4ea7":212,"\u80fd":213,"\u65f6\u95f4":214,"-zol":215,"by":216,"\u7b2c\u4e8c":217,"\u88ab":218,"\u4f9b\u5e94":219,"\u6570\u636e":220,"\u505a":221,"10":222,"\u4ee5\u4e0a":223,"6":224,"\u533b\u751f":225,"\u7ecf\u6d4e":226,"\u624b":227,"\u6a21\u578b":228,"\u667a\u80fd":229,"\u8bc1\u5238":230,"\u4f53\u80b2":231,"\u95ee":232,"\u5b89\u5168":233,"7":234,"\u4ece":235,"\u56db":236,"\u6765":237,"2021":238,"\u7ad9":239,"\u9879\u76ee":240,"\u57fa\u91d1":241,"-2023":242,"\u7247":243,"\u5728\u7ebf\u9605\u8bfb":244,"\u5b66\u4e60":245,"\u6d4b\u8bd5":246,"\u6cd5\u7f51":247,"\u8bba\u6587":248,"\u5e93":249,"powered":250,"\u627e":251,"\u67e5":252,"\u8bd5\u9898":253,"\u6a21\u677f":254,"\u623f\u5929":255,"\u95ee\u9898":256,"\u7535\u89c6\u5267":257,"\u9ad8\u8003":258,"\u624b\u673a\u7248":259,"\u4e2d\u6587\u7f51":260,"\u5c06":261,"\u627e\u6cd5\u7f51":262,"\u4e3b\u9875":263,"\u53d1\u5e03":264,"\u81ea\u52a8":265,"\u57f9\u8bad":266,"\u5c71\u4e1c":267,"\u8d77\u70b9":268,"\u4e70":269,"\u6df1\u5733":270,"discuz":271,"\u672a\u6765":272,"\u5de5\u5177":273,"8":274,"\u4f1a":275,"\u5b66\u79d1":276,"\u6b63\u7248":277,"\u53ef\u4ee5":278,"\u4e13\u9898":279,"\u5f00\u53d1":280,"\u4f18\u9009":281,"\u56fe\u7eb8":282,"\u8868":283,"\u4e2d\u7814":284,"\u591a":285,"\u4e91":286,"\u5e74\u7ea7":287,"4s":288,"\u94f6\u884c":289,"\u6e38\u620f\u4e0b\u8f7d":290,"\u6cb3\u5357":291,"\u8ba1\u5212":292,"\u91d1\u878d\u754c":293,"\u91d1":294,"\u6e38\u7f51":295,"\u97f3\u4e50":296,"\u6211\u7684":297,"\u90d1\u5dde":298,"\u79fb\u52a8":299,"\u53f7":300,"\u5feb":301,"\u697c\u76d8":302,"\u751f\u7269":303,"\u7a7a\u95f4":304,"\u7cbe\u9009":305,"\u7b2c\u4e09":306,"\u4e50":307,"2020":308,"\u90fd":309,"\u578b":310,"\u5b57\u5178":311,"\u6c7d":312,"\u673a":313,"\u5bf9":314,"\u6a21\u62df":315,"\u65e5\u97e9":316,"\u624b\u673a\u5927\u5168":317,"\u7f8e":318,"\u7cfb\u5217":319,"\u5e7f\u4e1c":320,"+":321,"\u56fd\u5bb6":322,"\u7eff\u8272":323,"\u4e0b":324,"\u8f66\u5e02":325,"\u88c5\u4fee":326,"\u4f5c\u6587":327,"\u5168\u56fd":328,"\u5357\u74dc":329,"\u8bc4\u4ef7":330,"\u5065\u5eb7\u7f51":331,"\u8bd5\u5377":332,"\u8f66\u7f51":333,"\u54ea\u4e2a":334,"\u5b66\u9662":335,"\u4ea7\u4e1a":336,"\u6587\u5316":337,"\u4ebf":338,"\u80a1\u4efd":339,"\u5728\u7ebf\u64ad\u653e":340,"\u533a":341,"\u901a":342,"\u8fd9":343,"\u4e94":344,"\u79d1\u6280\u6709\u9650\u516c\u53f8":345,"\u66f4":346,"\u53ef":347,"\u82f1\u5bf8":348,"--":349,"com":350,"\u4e24":351,"\u5c0f\u5b66":352,"\u4eba\u6c11":353,"\u524d\u666f":354,"\u8f6f\u4ef6\u4e0b\u8f7d":355,"\u7f8e\u98df":356,"\u5176\u4ed6":357,"\u6cbb\u7597":358,"\u91c7\u8d2d":359,"\u7ed9":360,"c":361,"\u56fd\u8bed":362,"\u6210\u8bed":363,"\u516c":364,"\u6cd5\u5f8b\u54a8\u8be2":365,"\u5bb6\u5ead":366,"\u65b0\u95fb\u7f51":367,"\u4e5d":368,"\u4f7f\u7528":369,"\u6559\u5b66":370,"\u666e\u534e":371,"\u5b98\u65b9\u7248":372,"\u5168\u7403":373,"\u4e1a":374,"\u57ce\u5e02":375,"\u4e2d\u8003":376,"\u6392\u540d":377,"2019":378,"\u5e7f\u5dde":379,"\u8d22\u7ecf":380,"\u91cd\u5e86":381,"\u5e94\u7528":382,"\u7ec4":383,"\u56db\u5ddd":384,"\u767e":385,"\u6e05":386,"\u8303\u6587":387,"\u7cbe\u54c1":388,"\u80fd\u6e90":389,"\u2013":390,"\u5361":391,"\u62db\u5546":392,"\u5c31":393,"\u76f8\u5173":394,"\u4e2a\u4eba\u8d44\u6599":395,"\u4eba\u8d44\u6599":396,"\u4ee5\u4e0b":397,"\u667a":398,"\u79d1\u5b66":399,"\u80a1":400,"\u516b":401,"\u6807\u51c6":402,"\u751f\u4ea7":403,"\u5267":404,"\u7535":405,"\u6c90\u98ce":406,"\u8f6f\u4ef6\u7ad9":407,"\u603b\u7ed3":408,"\u6c5f\u82cf":409,"\u521d":410,"\u884c":411,"\u4e0b\u8f7d\u7ad9":412,"\u95e8\u6237":413,"vs":414,"\u5f00\u59cb":415,"\u65e5\u672c":416,"\u6e56\u5317":417,"\u56fd":418,"\u52a8\u6f2b":419,"\u5341":420,"\u6d77":421,"\u7535\u5f71\u5728\u7ebf":422,"\u8ba9":423,"\u5b66\u751f":424,"\u65b9\u6848":425,"\u9996\u9875":426,"\u65c5\u6e38":427,"\u6253":428,"\u5efa\u8bbe":429,"9":430,"\u98de":431,"cpu":432,"\u9177":433,"\u4e00\u4e2a":434,"\u98ce\u7f51":435,"\u94fe":436,"\u5f00":437,"\u7bc7":438,"\u5b66\u6821":439,"\u6750\u6599":440,"\u5929\u6d25":441,"\u5bb6\u56ed":442,"\u50cf\u7d20":443,"\u5df2":444,"\u7ecf\u9500\u5546":445,"\u641c\u7d22":446,"\u6295":447,"\u6570\u5b66":448,"\u52a8\u6001":449,"\u8bcd\u5178":450,"\u6c90\u98ce\u7f51":451,"\u6df7\u5408":452,"\u7ffb\u8bd1":453,"\u81f3":454,"\u4e60\u9898":455,"\u57ce":456,"\u5411":457,"\u73b0\u4ee3":458,"\u9500\u552e":459,"\u6d59\u6c5f":460,"\u5efa\u7b51":461,"\u5403":462,"\u6c42":463,"2018":464,"\u8bf4\u7f51":465,"\u652f\u6301":466,"\u65b0\u534e":467,"\u5185":468,"\u5c0f\u8bf4\u7f51":469,"\u9020\u53e5":470,"\u827a\u672f":471,"\u52a0":472,"\u534e":473,"\u52a0\u76df":474,"\u8bf7":475,"\u65b0\u6d6a\u6c7d\u8f66":476,"\u5355":477,"\u4eba\u4e2d":478,"\u7814\u7a76\u62a5\u544a":479,"\u5206\u4eab":480,"\u738b":481,"\u534e\u4e3a":482,"\u76d8":483,"\u8fd8":484,"\u65b0\u6d6a\u7f51":485,"\u4e0d\u597d":486,"\u9f99":487,"\u6c47":488,"\u73a9":489,"\u673a\u6784":490,"\u4e09\u661f":491,"\u671f":492,"\u4ee3\u7406":493,"\u4e70\u5356":494,"\u524d":495,"5000":496,"\u8003":497,"\u5904\u7406":498,"\u5916\u89c2":499,"":500} -------------------------------------------------------------------------------- /src/windIndexCore/height_freq_word/height_freq_word_search_diff.txt: -------------------------------------------------------------------------------- 1 | 网 2 | , 3 | 在线 4 | : 5 | 下载 6 | 大全 7 | 第 8 | 年 9 | ? 10 | 公司 11 | 中国 12 | 版 13 | 图片 14 | 免费 15 | 价格 16 | 怎么 17 | 最新 18 | 报价 19 | ! 20 | 手机 21 | 汽车 22 | 是 23 | 什么 24 | 视频 25 | 有 26 | 信息 27 | 有限 28 | 有限公司 29 | 游戏 30 | -2023 31 | 论坛 32 | 观看 33 | 最 34 | 一 35 | 好 36 | 在线观看 37 | 高清 38 | 软件 39 | 科技 40 | 新 41 | 我 42 | 中文 43 | 大 44 | 资料 45 | 2 46 | 图 47 | 技术 48 | 官方 49 | 设计 50 | 新闻 51 | 中心 52 | 1 53 | 个人 54 | 安卓 55 | app 56 | 服务 57 | 北京 58 | 频道 59 | 系统 60 | 3 61 | 分析 62 | 之家 63 | 之 64 | 资讯 65 | 万 66 | 市场 67 | 网站 68 | 查询 69 | 批发 70 | 你 71 | 小说 72 | 高 73 | 不 74 | 电子 75 | 行业 76 | 电影 77 | 报告 78 | . 79 | 产品 80 | 影视 81 | 多少 82 | 上 83 | 人 84 | 厂家 85 | 二手 86 | 电话 87 | -2024 88 | 日 89 | 学 90 | 阅读 91 | 看 92 | 研究 93 | 企业 94 | 怎么样 95 | 车 96 | 如何 97 | 家 98 | 上海 99 | 黄页 100 | 健康 101 | 平台 102 | 咨询 103 | 第一 104 | 工作 105 | 大学 106 | 教育 107 | 2022 108 | 爱 109 | 小 110 | 问答 111 | 工程 112 | 设备 113 | 章 114 | 手游 115 | 元 116 | 完整 117 | 公告 118 | 考试 119 | 88 120 | 新版 121 | 发展 122 | 三 123 | 百科 124 | 5 125 | 月 126 | 全集 127 | 4 128 | 交易 129 | 世界 130 | 意思 131 | 参数 132 | 整版 133 | 管理 134 | 完整版 135 | 影院 136 | 集 137 | 电脑 138 | 综合 139 | 天下 140 | 钱 141 | 里 142 | 易 143 | 品牌 144 | 到 145 | 二 146 | 电视 147 | 官 148 | 超 149 | 无 150 | 知识 151 | 医院 152 | 生活 153 | 排行 154 | 方法 155 | 专业 156 | 为 157 | 地址 158 | 直播 159 | 历史 160 | 推荐 161 | 社区 162 | 安装 163 | 资源 164 | 吧 165 | 太平 166 | 苹果 167 | 太平洋 168 | 全 169 | 字 170 | 投资 171 | 招聘 172 | 介绍 173 | a 174 | 天 175 | 平洋 176 | 免费下载 177 | 店 178 | 播放 179 | 新浪 180 | 机械 181 | 后 182 | 法律 183 | 股票 184 | 个 185 | 中关 186 | 房 187 | 关村 188 | 中关村 189 | 排行榜 190 | 中关村在线 191 | 素材 192 | 网上 193 | & 194 | 哪 195 | 国际 196 | 配置 197 | 活动 198 | 二手房 199 | 教程 200 | 行情 201 | 科网 202 | 要 203 | 金融 204 | 英语 205 | 律师 206 | 网络 207 | 款 208 | 更新 209 | 出售 210 | 解释 211 | 双 212 | 攻略 213 | 国产 214 | 能 215 | 时间 216 | -zol 217 | by 218 | 第二 219 | 被 220 | 供应 221 | 数据 222 | 做 223 | 10 224 | 以上 225 | 6 226 | 医生 227 | 经济 228 | 手 229 | 模型 230 | 智能 231 | 证券 232 | 体育 233 | 问 234 | 安全 235 | 7 236 | 从 237 | 四 238 | 来 239 | 2021 240 | 站 241 | 项目 242 | 基金 243 | -2023 244 | 片 245 | 在线阅读 246 | 学习 247 | 测试 248 | 法网 249 | 论文 250 | 库 251 | powered 252 | 找 253 | 查 254 | 试题 255 | 模板 256 | 房天 257 | 问题 258 | 电视剧 259 | 高考 260 | 手机版 261 | 中文网 262 | 将 263 | 找法网 264 | 主页 265 | 发布 266 | 自动 267 | 培训 268 | 山东 269 | 起点 270 | 买 271 | 深圳 272 | discuz 273 | 未来 274 | 工具 275 | 8 276 | 会 277 | 学科 278 | 正版 279 | 可以 280 | 专题 281 | 开发 282 | 优选 283 | 图纸 284 | 表 285 | 中研 286 | 多 287 | 云 288 | 年级 289 | 4s 290 | 银行 291 | 游戏下载 292 | 河南 293 | 计划 294 | 金融界 295 | 金 296 | 游网 297 | 音乐 298 | 我的 299 | 郑州 300 | 移动 301 | 号 302 | 快 303 | 楼盘 304 | 生物 305 | 空间 306 | 精选 307 | 第三 308 | 乐 309 | 2020 310 | 都 311 | 型 312 | 字典 313 | 汽 314 | 机 315 | 对 316 | 模拟 317 | 日韩 318 | 手机大全 319 | 美 320 | 系列 321 | 广东 322 | + 323 | 国家 324 | 绿色 325 | 下 326 | 车市 327 | 装修 328 | 作文 329 | 全国 330 | 南瓜 331 | 评价 332 | 健康网 333 | 试卷 334 | 车网 335 | 哪个 336 | 学院 337 | 产业 338 | 文化 339 | 亿 340 | 股份 341 | 在线播放 342 | 区 343 | 通 344 | 这 345 | 五 346 | 科技有限公司 347 | 更 348 | 可 349 | 英寸 350 | -- 351 | com 352 | 两 353 | 小学 354 | 人民 355 | 前景 356 | 软件下载 357 | 美食 358 | 其他 359 | 治疗 360 | 采购 361 | 给 362 | c 363 | 国语 364 | 成语 365 | 公 366 | 法律咨询 367 | 家庭 368 | 新闻网 369 | 九 370 | 使用 371 | 教学 372 | 普华 373 | 官方版 374 | 全球 375 | 业 376 | 城市 377 | 中考 378 | 排名 379 | 2019 380 | 广州 381 | 财经 382 | 重庆 383 | 应用 384 | 组 385 | 四川 386 | 百 387 | 清 388 | 范文 389 | 精品 390 | 能源 391 | – 392 | 卡 393 | 招商 394 | 就 395 | 相关 396 | 个人资料 397 | 人资料 398 | 以下 399 | 智 400 | 科学 401 | 股 402 | 八 403 | 标准 404 | 生产 405 | 剧 406 | 电 407 | 沐风 408 | 软件站 409 | 总结 410 | 江苏 411 | 初 412 | 行 413 | 下载站 414 | 门户 415 | vs 416 | 开始 417 | 日本 418 | 湖北 419 | 国 420 | 动漫 421 | 十 422 | 海 423 | 电影在线 424 | 让 425 | 学生 426 | 方案 427 | 首页 428 | 旅游 429 | 打 430 | 建设 431 | 9 432 | 飞 433 | cpu 434 | 酷 435 | 一个 436 | 风网 437 | 链 438 | 开 439 | 篇 440 | 学校 441 | 材料 442 | 天津 443 | 家园 444 | 像素 445 | 已 446 | 经销商 447 | 搜索 448 | 投 449 | 数学 450 | 动态 451 | 词典 452 | 沐风网 453 | 混合 454 | 翻译 455 | 至 456 | 习题 457 | 城 458 | 向 459 | 现代 460 | 销售 461 | 浙江 462 | 建筑 463 | 吃 464 | 求 465 | 2018 466 | 说网 467 | 支持 468 | 新华 469 | 内 470 | 小说网 471 | 造句 472 | 艺术 473 | 加 474 | 华 475 | 加盟 476 | 请 477 | 新浪汽车 478 | 单 479 | 人中 480 | 研究报告 481 | 分享 482 | 王 483 | 华为 484 | 盘 485 | 还 486 | 新浪网 487 | 不好 488 | 龙 489 | 汇 490 | 玩 491 | 机构 492 | 三星 493 | 期 494 | 代理 495 | 买卖 496 | 前 497 | 5000 498 | 考 499 | 处理 500 | 外观 501 | -------------------------------------------------------------------------------- /src/windIndexCore/stopword/stopword_big.txt: -------------------------------------------------------------------------------- 1 |  2 | 浅谈 3 | -- 4 | ? 5 | “ 6 | ” 7 | 》 8 | -- 9 | ( 10 | ) 11 | _ 12 | . 13 | _ 14 | # 15 | 『 16 | 』 17 | → 18 | ← 19 | ↑ 20 | ↓ 21 | ~ 22 | 「 23 | 」 24 | - 25 | + 26 | —— 27 | ` 28 | · 29 | / 30 | , 31 | , 32 | ' 33 | ; 34 | \ 35 | [ 36 | ] 37 | ! 38 | ! 39 | @ 40 | _ 41 | $ 42 | % 43 | ^ 44 | & 45 | * 46 | ( 47 | ) 48 | ( 49 | ) 50 | 。 51 | 、 52 | ; 53 | ’ 54 | 【 55 | 】 56 | 、 57 | ? 58 | > 59 | < 60 | { 61 | } 62 | | 63 | " 64 | ' 65 | ‘ 66 | “ 67 | ” 68 | … 69 | = 70 | 《 71 | 》 72 | 73 |   74 | : 75 | : 76 | ? 77 | ? 78 | △ 79 | ▽ 80 | ○ 81 | ◇ 82 | □ 83 | ☆ 84 | ▷ 85 | ◁ 86 | ♤ 87 | ♡ 88 | ♢ 89 | ♧ 90 | ▲ 91 | ▼ 92 | ● 93 | ◆ 94 | ■ 95 | ★ 96 | ▶ 97 | ◀ 98 | ♠ 99 | ♥ 100 | ♦ 101 | ♣ 102 | ☼ 103 | ☽ 104 | ♀ 105 | ☺ 106 | ◐ 107 | ☑ 108 | √ 109 | ✔ 110 | ☜ 111 | ☝ 112 | ☞ 113 | ㏂ 114 | ☀ 115 | ☾ 116 | ♂ 117 | ☹ 118 | ◑ 119 | ☒ 120 | × 121 | ✘ 122 | ☚ 123 | ☟ 124 | ☛ 125 | ㏘ 126 | ▪ 127 | • 128 | ‥ 129 | … 130 | ▁ 131 | ▂ 132 | ▃ 133 | ▄ 134 | ▅ 135 | ▆ 136 | ▇ 137 | █ 138 | ∷ 139 | ※ 140 | ░ 141 | ▒ 142 | ▓ 143 | ▏ 144 | ▎ 145 | ▍ 146 | ▌ 147 | ▋ 148 | ▊ 149 | ▉ 150 | ♩ 151 | ♪ 152 | ♫ 153 | ♬ 154 | § 155 | 〼 156 | ◎ 157 | ¤ 158 | ۞ 159 | ℗ 160 | ® 161 | © 162 | ♭ 163 | ♯ 164 | ♮ 165 | ‖ 166 | ¶ 167 | 卍 168 | 卐 169 | ▬ 170 | 〓 171 | ℡ 172 | ™ 173 | ㏇ 174 | ☌ 175 | ☍ 176 | ☋ 177 | ☊ 178 | ㉿ 179 | ◮ 180 | ◪ 181 | ◔ 182 | ◕ 183 | @ 184 | ㈱ 185 | № 186 | ♈ 187 | ♉ 188 | ♊ 189 | ♋ 190 | ♌ 191 | ♎ 192 | ♏ 193 | ♐ 194 | ♑ 195 | ♓ 196 | ♒ 197 | ♍ 198 | ↖ 199 | ↑ 200 | ↗ 201 | ▨ 202 | ▤ 203 | ▧ 204 | ◤ 205 | ㊤ 206 | ◥ 207 | ☴ 208 | ☲ 209 | ☷ 210 | ← 211 | ㊣ 212 | → 213 | ▩ 214 | ▦ 215 | ▥ 216 | ㊧ 217 | ㊥ 218 | ㊨ 219 | ☳ 220 | ☯ 221 | ☱ 222 | ↘ 223 | ↘ 224 | ↘ 225 | ▫ 226 | ◈ 227 | ▣ 228 | ◣ 229 | ㊦ 230 | ◢ 231 | ☶ 232 | ☵ 233 | ☰ 234 | ↕ 235 | ↔ 236 | ⊱ 237 | ⋛ 238 | ⋌ 239 | ⋚ 240 | ⊰ 241 | ¬ 242 | ¬ 243 | ▔ 244 | † 245 | ‡ 246 | * 247 | * 248 | ✲ 249 | ❈ 250 | ❉ 251 | ✿ 252 | ❀ 253 | ❃ 254 | ❁ 255 | ☸ 256 | ✖ 257 | ✚ 258 | ✪ 259 | ❤ 260 | ღ 261 | ❦ 262 | ❧ 263 | ி 264 | ₪ 265 | ✎ 266 | ✍ 267 | ✌ 268 | ✁ 269 | ✄ 270 | ☁ 271 | ☂ 272 | ☃ 273 | ☄ 274 | ♨ 275 | ☇ 276 | ☈ 277 | ☡ 278 | ➷ 279 | ⊹ 280 | ✉ 281 | ☏ 282 | ☢ 283 | ☣ 284 | ☠ 285 | ☭ 286 | ❂ 287 | ☪ 288 | ☮ 289 | 〄 290 | ➹ 291 | ☩ 292 | ஐ 293 | ☎ 294 | ✈ 295 | 〠 296 | ۩ 297 | ✙ 298 | ✟ 299 | ☤ 300 | ☥ 301 | ☦ 302 | ☧ 303 | ☨ 304 | ☫ 305 | ☬ 306 | ♟ 307 | ♙ 308 | ♜ 309 | ♖ 310 | ♞ 311 | ♘ 312 | ♝ 313 | ♗ 314 | ♛ 315 | ♕ 316 | ♚ 317 | ♔ 318 | ︵ 319 | ︷ 320 | ︹ 321 | ︿ 322 | ︽ 323 | ﹁ 324 | ﹃ 325 | ︗ 326 | ︻ 327 | / 328 | | 329 | \ 330 | ︶ 331 | ︺ 332 | ︺ 333 | ﹀ 334 | ︾ 335 | ﹂ 336 | ﹄ 337 | ︼ 338 | ︘ 339 | / 340 | | 341 | \ 342 | _ 343 | _ 344 | ﹏ 345 | ﹍ 346 | ﹎ 347 | ` 348 | ¦ 349 | ¡ 350 | ^ 351 | ­ 352 | ¨ 353 | ˊ 354 | ¯ 355 |  ̄ 356 | ﹋ 357 | ﹉ 358 | ﹊ 359 | ˋ 360 | ︴ 361 | ¿ 362 | ˇ 363 |   364 | ① 365 | ② 366 | ③ 367 | ④ 368 | ⑤ 369 | ⑥ 370 | ⑦ 371 | ⑧ 372 | ⑨ 373 | ⑩ 374 | ⑪ 375 | ⑫ 376 | ⑬ 377 | ⑭ 378 | ⑮ 379 | ⑯ 380 | ⑰ 381 | ⑱ 382 | ⑲ 383 | ⑳ 384 | ⑴ 385 | ⑵ 386 | ⑶ 387 | ⑷ 388 | ⑸ 389 | ⑹ 390 | ⑺ 391 | ⑻ 392 | ⑼ 393 | ⑽ 394 | ⑾ 395 | ⑿ 396 | ⒀ 397 | ⒁ 398 | ⒂ 399 | ⒃ 400 | ⒄ 401 | ⒅ 402 | ⒆ 403 | ⒇ 404 | ⒈ 405 | ⒉ 406 | ⒊ 407 | ⒋ 408 | ⒌ 409 | ⒍ 410 | ⒎ 411 | ⒏ 412 | ⒐ 413 | ⒑ 414 | ⒒ 415 | ⒓ 416 | ⒔ 417 | ⒕ 418 | ⒖ 419 | ⒗ 420 | ⒘ 421 | ⒙ 422 | ⒚ 423 | ⒛ 424 | Ⅰ 425 | Ⅱ 426 | Ⅲ 427 | Ⅳ 428 | Ⅴ 429 | Ⅵ 430 | Ⅶ 431 | Ⅷ 432 | Ⅸ 433 | Ⅹ 434 | Ⅺ 435 | Ⅻ 436 | ⅰ 437 | ⅱ 438 | ⅲ 439 | ⅳ 440 | ⅴ 441 | ⅵ 442 | ⅶ 443 | ⅷ 444 | ⅸ 445 | ⅹ 446 | ❶ 447 | ❷ 448 | ❸ 449 | ❹ 450 | ❺ 451 | ❻ 452 | ❼ 453 | ❽ 454 | ❾ 455 | ❿ 456 | ㈠ 457 | ㈡ 458 | ㈢ 459 | ㈣ 460 | ㈤ 461 | ㈥ 462 | ㈦ 463 | ㈧ 464 | ㈨ 465 | ㈩ 466 | able 467 | about 468 | above 469 | according 470 | accordingly 471 | across 472 | actually 473 | after 474 | afterwards 475 | again 476 | against 477 | ain't 478 | all 479 | allow 480 | allows 481 | almost 482 | alone 483 | along 484 | already 485 | also 486 | although 487 | always 488 | am 489 | among 490 | amongst 491 | an 492 | and 493 | another 494 | any 495 | anybody 496 | anyhow 497 | anyone 498 | anything 499 | anyway 500 | anyways 501 | anywhere 502 | apart 503 | appear 504 | appreciate 505 | appropriate 506 | are 507 | aren't 508 | around 509 | as 510 | a's 511 | aside 512 | ask 513 | asking 514 | associated 515 | at 516 | available 517 | away 518 | awfully 519 | be 520 | became 521 | because 522 | become 523 | becomes 524 | becoming 525 | been 526 | before 527 | beforehand 528 | behind 529 | being 530 | believe 531 | below 532 | beside 533 | besides 534 | best 535 | better 536 | between 537 | beyond 538 | both 539 | brief 540 | but 541 | by 542 | came 543 | can 544 | cannot 545 | cant 546 | can't 547 | cause 548 | causes 549 | certain 550 | certainly 551 | changes 552 | clearly 553 | c'mon 554 | co 555 | com 556 | come 557 | comes 558 | concerning 559 | consequently 560 | consider 561 | considering 562 | contain 563 | containing 564 | contains 565 | corresponding 566 | could 567 | couldn't 568 | course 569 | c's 570 | currently 571 | definitely 572 | described 573 | despite 574 | did 575 | didn't 576 | different 577 | do 578 | does 579 | doesn't 580 | doing 581 | done 582 | don't 583 | down 584 | downwards 585 | during 586 | each 587 | edu 588 | eg 589 | eight 590 | either 591 | else 592 | elsewhere 593 | enough 594 | entirely 595 | especially 596 | et 597 | etc 598 | even 599 | ever 600 | every 601 | everybody 602 | everyone 603 | everything 604 | everywhere 605 | ex 606 | exactly 607 | example 608 | except 609 | far 610 | few 611 | fifth 612 | first 613 | five 614 | followed 615 | following 616 | follows 617 | for 618 | former 619 | formerly 620 | forth 621 | four 622 | from 623 | further 624 | furthermore 625 | get 626 | gets 627 | getting 628 | given 629 | gives 630 | go 631 | goes 632 | going 633 | gone 634 | got 635 | gotten 636 | greetings 637 | had 638 | hadn't 639 | happens 640 | hardly 641 | has 642 | hasn't 643 | have 644 | haven't 645 | having 646 | he 647 | hello 648 | help 649 | hence 650 | her 651 | here 652 | hereafter 653 | hereby 654 | herein 655 | here's 656 | hereupon 657 | hers 658 | herself 659 | he's 660 | hi 661 | him 662 | himself 663 | his 664 | hither 665 | hopefully 666 | how 667 | howbeit 668 | however 669 | i'd 670 | ie 671 | if 672 | ignored 673 | i'll 674 | i'm 675 | immediate 676 | in 677 | inasmuch 678 | inc 679 | indeed 680 | indicate 681 | indicated 682 | indicates 683 | inner 684 | insofar 685 | instead 686 | into 687 | inward 688 | is 689 | isn't 690 | it 691 | it'd 692 | it'll 693 | its 694 | it's 695 | itself 696 | i've 697 | just 698 | keep 699 | keeps 700 | kept 701 | know 702 | known 703 | knows 704 | last 705 | lately 706 | later 707 | latter 708 | latterly 709 | least 710 | less 711 | lest 712 | let 713 | let's 714 | like 715 | liked 716 | likely 717 | little 718 | look 719 | looking 720 | looks 721 | ltd 722 | mainly 723 | many 724 | may 725 | maybe 726 | me 727 | mean 728 | meanwhile 729 | merely 730 | might 731 | more 732 | moreover 733 | most 734 | mostly 735 | much 736 | must 737 | my 738 | myself 739 | name 740 | namely 741 | nd 742 | near 743 | nearly 744 | necessary 745 | need 746 | needs 747 | neither 748 | never 749 | nevertheless 750 | new 751 | next 752 | nine 753 | no 754 | nobody 755 | non 756 | none 757 | noone 758 | nor 759 | normally 760 | not 761 | nothing 762 | novel 763 | now 764 | nowhere 765 | obviously 766 | of 767 | off 768 | often 769 | oh 770 | ok 771 | okay 772 | old 773 | on 774 | once 775 | one 776 | ones 777 | only 778 | onto 779 | or 780 | other 781 | others 782 | otherwise 783 | ought 784 | our 785 | ours 786 | ourselves 787 | out 788 | outside 789 | over 790 | overall 791 | own 792 | particular 793 | particularly 794 | per 795 | perhaps 796 | placed 797 | please 798 | plus 799 | possible 800 | presumably 801 | probably 802 | provides 803 | que 804 | quite 805 | qv 806 | rather 807 | rd 808 | re 809 | really 810 | reasonably 811 | regarding 812 | regardless 813 | regards 814 | relatively 815 | respectively 816 | right 817 | said 818 | same 819 | saw 820 | say 821 | saying 822 | says 823 | second 824 | secondly 825 | see 826 | seeing 827 | seem 828 | seemed 829 | seeming 830 | seems 831 | seen 832 | self 833 | selves 834 | sensible 835 | sent 836 | serious 837 | seriously 838 | seven 839 | several 840 | shall 841 | she 842 | should 843 | shouldn't 844 | since 845 | six 846 | so 847 | some 848 | somebody 849 | somehow 850 | someone 851 | something 852 | sometime 853 | sometimes 854 | somewhat 855 | somewhere 856 | soon 857 | sorry 858 | specified 859 | specify 860 | specifying 861 | still 862 | sub 863 | such 864 | sup 865 | sure 866 | take 867 | taken 868 | tell 869 | tends 870 | th 871 | than 872 | thank 873 | thanks 874 | thanx 875 | that 876 | thats 877 | that's 878 | the 879 | their 880 | theirs 881 | them 882 | themselves 883 | then 884 | thence 885 | there 886 | thereafter 887 | thereby 888 | therefore 889 | therein 890 | theres 891 | there's 892 | thereupon 893 | these 894 | they 895 | they'd 896 | they'll 897 | they're 898 | they've 899 | think 900 | third 901 | this 902 | thorough 903 | thoroughly 904 | those 905 | though 906 | three 907 | through 908 | throughout 909 | thru 910 | thus 911 | to 912 | together 913 | too 914 | took 915 | toward 916 | towards 917 | tried 918 | tries 919 | truly 920 | try 921 | trying 922 | t's 923 | twice 924 | two 925 | un 926 | under 927 | unfortunately 928 | unless 929 | unlikely 930 | until 931 | unto 932 | up 933 | upon 934 | us 935 | use 936 | used 937 | useful 938 | uses 939 | using 940 | usually 941 | value 942 | various 943 | very 944 | via 945 | viz 946 | vs 947 | want 948 | wants 949 | was 950 | wasn't 951 | way 952 | we 953 | we'd 954 | welcome 955 | well 956 | we'll 957 | went 958 | were 959 | we're 960 | weren't 961 | we've 962 | what 963 | whatever 964 | what's 965 | when 966 | whence 967 | whenever 968 | where 969 | whereafter 970 | whereas 971 | whereby 972 | wherein 973 | where's 974 | whereupon 975 | wherever 976 | whether 977 | which 978 | while 979 | whither 980 | who 981 | whoever 982 | whole 983 | whom 984 | who's 985 | whose 986 | why 987 | will 988 | willing 989 | wish 990 | with 991 | within 992 | without 993 | wonder 994 | won't 995 | would 996 | wouldn't 997 | yes 998 | yet 999 | you 1000 | you'd 1001 | you'll 1002 | your 1003 | you're 1004 | yours 1005 | yourself 1006 | yourselves 1007 | you've 1008 | zero 1009 | zt 1010 | ZT 1011 | zz 1012 | ZZ 1013 | 一 1014 | 一下 1015 | 一些 1016 | 一切 1017 | 一则 1018 | 一天 1019 | 一定 1020 | 一方面 1021 | 一旦 1022 | 一时 1023 | 一来 1024 | 一样 1025 | 一次 1026 | 一片 1027 | 一直 1028 | 一致 1029 | 一般 1030 | 一起 1031 | 一边 1032 | 一面 1033 | 万一 1034 | 上下 1035 | 上升 1036 | 上去 1037 | 上来 1038 | 上述 1039 | 上面 1040 | 下列 1041 | 下去 1042 | 下来 1043 | 下面 1044 | 不一 1045 | 不久 1046 | 不仅 1047 | 不会 1048 | 不但 1049 | 不光 1050 | 不单 1051 | 不变 1052 | 不只 1053 | 不可 1054 | 不同 1055 | 不够 1056 | 不如 1057 | 不得 1058 | 不怕 1059 | 不惟 1060 | 不成 1061 | 不拘 1062 | 不敢 1063 | 不断 1064 | 不是 1065 | 不比 1066 | 不然 1067 | 不特 1068 | 不独 1069 | 不管 1070 | 不能 1071 | 不要 1072 | 不论 1073 | 不足 1074 | 不过 1075 | 不问 1076 | 与 1077 | 与其 1078 | 与否 1079 | 与此同时 1080 | 专门 1081 | 且 1082 | 两者 1083 | 严格 1084 | 严重 1085 | 个 1086 | 个人 1087 | 个别 1088 | 中小 1089 | 中间 1090 | 丰富 1091 | 临 1092 | 为 1093 | 为主 1094 | 为了 1095 | 为什么 1096 | 为什麽 1097 | 为何 1098 | 为着 1099 | 主张 1100 | 主要 1101 | 举行 1102 | 乃 1103 | 乃至 1104 | 么 1105 | 之 1106 | 之一 1107 | 之前 1108 | 之后 1109 | 之後 1110 | 之所以 1111 | 之类 1112 | 乌乎 1113 | 乎 1114 | 乘 1115 | 也 1116 | 也好 1117 | 也是 1118 | 也罢 1119 | 了 1120 | 了解 1121 | 争取 1122 | 于 1123 | 于是 1124 | 于是乎 1125 | 云云 1126 | 互相 1127 | 产生 1128 | 人们 1129 | 人家 1130 | 什么 1131 | 什么样 1132 | 什麽 1133 | 今后 1134 | 今天 1135 | 今年 1136 | 今後 1137 | 仍然 1138 | 从 1139 | 从事 1140 | 从而 1141 | 他 1142 | 他人 1143 | 他们 1144 | 他的 1145 | 代替 1146 | 以 1147 | 以上 1148 | 以下 1149 | 以为 1150 | 以便 1151 | 以免 1152 | 以前 1153 | 以及 1154 | 以后 1155 | 以外 1156 | 以後 1157 | 以来 1158 | 以至 1159 | 以至于 1160 | 以致 1161 | 们 1162 | 任 1163 | 任何 1164 | 任凭 1165 | 任务 1166 | 企图 1167 | 伟大 1168 | 似乎 1169 | 似的 1170 | 但 1171 | 但是 1172 | 何 1173 | 何况 1174 | 何处 1175 | 何时 1176 | 作为 1177 | 你 1178 | 你们 1179 | 你的 1180 | 使得 1181 | 使用 1182 | 例如 1183 | 依 1184 | 依照 1185 | 依靠 1186 | 促进 1187 | 保持 1188 | 俺 1189 | 俺们 1190 | 倘 1191 | 倘使 1192 | 倘或 1193 | 倘然 1194 | 倘若 1195 | 假使 1196 | 假如 1197 | 假若 1198 | 做到 1199 | 像 1200 | 允许 1201 | 充分 1202 | 先后 1203 | 先後 1204 | 先生 1205 | 全部 1206 | 全面 1207 | 兮 1208 | 共同 1209 | 关于 1210 | 其 1211 | 其一 1212 | 其中 1213 | 其二 1214 | 其他 1215 | 其余 1216 | 其它 1217 | 其实 1218 | 其次 1219 | 具体 1220 | 具体地说 1221 | 具体说来 1222 | 具有 1223 | 再者 1224 | 再说 1225 | 冒 1226 | 冲 1227 | 决定 1228 | 况且 1229 | 准备 1230 | 几 1231 | 几乎 1232 | 几时 1233 | 凭 1234 | 凭借 1235 | 出去 1236 | 出来 1237 | 出现 1238 | 分别 1239 | 则 1240 | 别 1241 | 别的 1242 | 别说 1243 | 到 1244 | 前后 1245 | 前者 1246 | 前进 1247 | 前面 1248 | 加之 1249 | 加以 1250 | 加入 1251 | 加强 1252 | 十分 1253 | 即 1254 | 即令 1255 | 即使 1256 | 即便 1257 | 即或 1258 | 即若 1259 | 却不 1260 | 原来 1261 | 又 1262 | 及 1263 | 及其 1264 | 及时 1265 | 及至 1266 | 双方 1267 | 反之 1268 | 反应 1269 | 反映 1270 | 反过来 1271 | 反过来说 1272 | 取得 1273 | 受到 1274 | 变成 1275 | 另 1276 | 另一方面 1277 | 另外 1278 | 只是 1279 | 只有 1280 | 只要 1281 | 只限 1282 | 叫 1283 | 叫做 1284 | 召开 1285 | 叮咚 1286 | 可 1287 | 可以 1288 | 可是 1289 | 可能 1290 | 可见 1291 | 各 1292 | 各个 1293 | 各人 1294 | 各位 1295 | 各地 1296 | 各种 1297 | 各级 1298 | 各自 1299 | 合理 1300 | 同 1301 | 同一 1302 | 同时 1303 | 同样 1304 | 后来 1305 | 后面 1306 | 向 1307 | 向着 1308 | 吓 1309 | 吗 1310 | 否则 1311 | 吧 1312 | 吧哒 1313 | 吱 1314 | 呀 1315 | 呃 1316 | 呕 1317 | 呗 1318 | 呜 1319 | 呜呼 1320 | 呢 1321 | 周围 1322 | 呵 1323 | 呸 1324 | 呼哧 1325 | 咋 1326 | 和 1327 | 咚 1328 | 咦 1329 | 咱 1330 | 咱们 1331 | 咳 1332 | 哇 1333 | 哈 1334 | 哈哈 1335 | 哉 1336 | 哎 1337 | 哎呀 1338 | 哎哟 1339 | 哗 1340 | 哟 1341 | 哦 1342 | 哩 1343 | 哪 1344 | 哪个 1345 | 哪些 1346 | 哪儿 1347 | 哪天 1348 | 哪年 1349 | 哪怕 1350 | 哪样 1351 | 哪边 1352 | 哪里 1353 | 哼 1354 | 哼唷 1355 | 唉 1356 | 啊 1357 | 啐 1358 | 啥 1359 | 啦 1360 | 啪达 1361 | 喂 1362 | 喏 1363 | 喔唷 1364 | 嗡嗡 1365 | 嗬 1366 | 嗯 1367 | 嗳 1368 | 嘎 1369 | 嘎登 1370 | 嘘 1371 | 嘛 1372 | 嘻 1373 | 嘿 1374 | 因 1375 | 因为 1376 | 因此 1377 | 因而 1378 | 固然 1379 | 在 1380 | 在下 1381 | 地 1382 | 坚决 1383 | 坚持 1384 | 基本 1385 | 处理 1386 | 复杂 1387 | 多 1388 | 多少 1389 | 多数 1390 | 多次 1391 | 大力 1392 | 大多数 1393 | 大大 1394 | 大家 1395 | 大批 1396 | 大约 1397 | 大量 1398 | 失去 1399 | 她 1400 | 她们 1401 | 她的 1402 | 好的 1403 | 好象 1404 | 如 1405 | 如上所述 1406 | 如下 1407 | 如何 1408 | 如其 1409 | 如果 1410 | 如此 1411 | 如若 1412 | 存在 1413 | 宁 1414 | 宁可 1415 | 宁愿 1416 | 宁肯 1417 | 它 1418 | 它们 1419 | 它们的 1420 | 它的 1421 | 安全 1422 | 完全 1423 | 完成 1424 | 实现 1425 | 实际 1426 | 宣布 1427 | 容易 1428 | 密切 1429 | 对 1430 | 对于 1431 | 对应 1432 | 将 1433 | 少数 1434 | 尔后 1435 | 尚且 1436 | 尤其 1437 | 就 1438 | 就是 1439 | 就是说 1440 | 尽 1441 | 尽管 1442 | 属于 1443 | 岂但 1444 | 左右 1445 | 巨大 1446 | 巩固 1447 | 己 1448 | 已经 1449 | 帮助 1450 | 常常 1451 | 并 1452 | 并不 1453 | 并不是 1454 | 并且 1455 | 并没有 1456 | 广大 1457 | 广泛 1458 | 应当 1459 | 应用 1460 | 应该 1461 | 开外 1462 | 开始 1463 | 开展 1464 | 引起 1465 | 强烈 1466 | 强调 1467 | 归 1468 | 当 1469 | 当前 1470 | 当时 1471 | 当然 1472 | 当着 1473 | 形成 1474 | 彻底 1475 | 彼 1476 | 彼此 1477 | 往 1478 | 往往 1479 | 待 1480 | 後来 1481 | 後面 1482 | 得 1483 | 得出 1484 | 得到 1485 | 心里 1486 | 必然 1487 | 必要 1488 | 必须 1489 | 怎 1490 | 怎么 1491 | 怎么办 1492 | 怎么样 1493 | 怎样 1494 | 怎麽 1495 | 总之 1496 | 总是 1497 | 总的来看 1498 | 总的来说 1499 | 总的说来 1500 | 总结 1501 | 总而言之 1502 | 恰恰相反 1503 | 您 1504 | 意思 1505 | 愿意 1506 | 慢说 1507 | 成为 1508 | 我 1509 | 我们 1510 | 我的 1511 | 或 1512 | 或是 1513 | 或者 1514 | 战斗 1515 | 所 1516 | 所以 1517 | 所有 1518 | 所谓 1519 | 打 1520 | 扩大 1521 | 把 1522 | 抑或 1523 | 拿 1524 | 按 1525 | 按照 1526 | 换句话说 1527 | 换言之 1528 | 据 1529 | 掌握 1530 | 接着 1531 | 接著 1532 | 故 1533 | 故此 1534 | 整个 1535 | 方便 1536 | 方面 1537 | 旁人 1538 | 无宁 1539 | 无法 1540 | 无论 1541 | 既 1542 | 既是 1543 | 既然 1544 | 时候 1545 | 明显 1546 | 明确 1547 | 是 1548 | 是否 1549 | 是的 1550 | 显然 1551 | 显著 1552 | 普通 1553 | 普遍 1554 | 更加 1555 | 曾经 1556 | 替 1557 | 最后 1558 | 最大 1559 | 最好 1560 | 最後 1561 | 最近 1562 | 最高 1563 | 有 1564 | 有些 1565 | 有关 1566 | 有利 1567 | 有力 1568 | 有所 1569 | 有效 1570 | 有时 1571 | 有点 1572 | 有的 1573 | 有着 1574 | 有著 1575 | 望 1576 | 朝 1577 | 朝着 1578 | 本 1579 | 本着 1580 | 来 1581 | 来着 1582 | 极了 1583 | 构成 1584 | 果然 1585 | 果真 1586 | 某 1587 | 某个 1588 | 某些 1589 | 根据 1590 | 根本 1591 | 欢迎 1592 | 正在 1593 | 正如 1594 | 正常 1595 | 此 1596 | 此外 1597 | 此时 1598 | 此间 1599 | 毋宁 1600 | 每 1601 | 每个 1602 | 每天 1603 | 每年 1604 | 每当 1605 | 比 1606 | 比如 1607 | 比方 1608 | 比较 1609 | 毫不 1610 | 没有 1611 | 沿 1612 | 沿着 1613 | 注意 1614 | 深入 1615 | 清楚 1616 | 满足 1617 | 漫说 1618 | 焉 1619 | 然则 1620 | 然后 1621 | 然後 1622 | 然而 1623 | 照 1624 | 照着 1625 | 特别是 1626 | 特殊 1627 | 特点 1628 | 现代 1629 | 现在 1630 | 甚么 1631 | 甚而 1632 | 甚至 1633 | 用 1634 | 由 1635 | 由于 1636 | 由此可见 1637 | 的 1638 | 的话 1639 | 目前 1640 | 直到 1641 | 直接 1642 | 相似 1643 | 相信 1644 | 相反 1645 | 相同 1646 | 相对 1647 | 相对而言 1648 | 相应 1649 | 相当 1650 | 相等 1651 | 省得 1652 | 看出 1653 | 看到 1654 | 看来 1655 | 看看 1656 | 看见 1657 | 真是 1658 | 真正 1659 | 着 1660 | 着呢 1661 | 矣 1662 | 知道 1663 | 确定 1664 | 离 1665 | 积极 1666 | 移动 1667 | 突出 1668 | 突然 1669 | 立即 1670 | 第 1671 | 等 1672 | 等等 1673 | 管 1674 | 紧接着 1675 | 纵 1676 | 纵令 1677 | 纵使 1678 | 纵然 1679 | 练习 1680 | 组成 1681 | 经 1682 | 经常 1683 | 经过 1684 | 结合 1685 | 结果 1686 | 给 1687 | 绝对 1688 | 继续 1689 | 继而 1690 | 维持 1691 | 综上所述 1692 | 罢了 1693 | 考虑 1694 | 者 1695 | 而 1696 | 而且 1697 | 而况 1698 | 而外 1699 | 而已 1700 | 而是 1701 | 而言 1702 | 联系 1703 | 能 1704 | 能否 1705 | 能够 1706 | 腾 1707 | 自 1708 | 自个儿 1709 | 自从 1710 | 自各儿 1711 | 自家 1712 | 自己 1713 | 自身 1714 | 至 1715 | 至于 1716 | 良好 1717 | 若 1718 | 若是 1719 | 若非 1720 | 范围 1721 | 莫若 1722 | 获得 1723 | 虽 1724 | 虽则 1725 | 虽然 1726 | 虽说 1727 | 行为 1728 | 行动 1729 | 表明 1730 | 表示 1731 | 被 1732 | 要 1733 | 要不 1734 | 要不是 1735 | 要不然 1736 | 要么 1737 | 要是 1738 | 要求 1739 | 规定 1740 | 觉得 1741 | 认为 1742 | 认真 1743 | 认识 1744 | 让 1745 | 许多 1746 | 论 1747 | 设使 1748 | 设若 1749 | 该 1750 | 说明 1751 | 诸位 1752 | 谁 1753 | 谁知 1754 | 赶 1755 | 起 1756 | 起来 1757 | 起见 1758 | 趁 1759 | 趁着 1760 | 越是 1761 | 跟 1762 | 转动 1763 | 转变 1764 | 转贴 1765 | 较 1766 | 较之 1767 | 边 1768 | 达到 1769 | 迅速 1770 | 过 1771 | 过去 1772 | 过来 1773 | 运用 1774 | 还是 1775 | 还有 1776 | 这 1777 | 这个 1778 | 这么 1779 | 这么些 1780 | 这么样 1781 | 这么点儿 1782 | 这些 1783 | 这会儿 1784 | 这儿 1785 | 这就是说 1786 | 这时 1787 | 这样 1788 | 这点 1789 | 这种 1790 | 这边 1791 | 这里 1792 | 这麽 1793 | 进入 1794 | 进步 1795 | 进而 1796 | 进行 1797 | 连 1798 | 连同 1799 | 适应 1800 | 适当 1801 | 适用 1802 | 逐步 1803 | 逐渐 1804 | 通常 1805 | 通过 1806 | 造成 1807 | 遇到 1808 | 遭到 1809 | 避免 1810 | 那 1811 | 那个 1812 | 那么 1813 | 那么些 1814 | 那么样 1815 | 那些 1816 | 那会儿 1817 | 那儿 1818 | 那时 1819 | 那样 1820 | 那边 1821 | 那里 1822 | 那麽 1823 | 部分 1824 | 鄙人 1825 | 采取 1826 | 里面 1827 | 重大 1828 | 重新 1829 | 重要 1830 | 鉴于 1831 | 问题 1832 | 防止 1833 | 阿 1834 | 附近 1835 | 限制 1836 | 除 1837 | 除了 1838 | 除此之外 1839 | 除非 1840 | 随 1841 | 随着 1842 | 随著 1843 | 集中 1844 | 需要 1845 | 非但 1846 | 非常 1847 | 非徒 1848 | 靠 1849 | 顺 1850 | 顺着 1851 | 首先 1852 | 高兴 1853 | 是不是 1854 | 说说 1855 | あ 1856 | い 1857 | う 1858 | え 1859 | お 1860 | か 1861 | き 1862 | く 1863 | け 1864 | こ 1865 | さ 1866 | し 1867 | す 1868 | せ 1869 | そ 1870 | た 1871 | ち 1872 | つ 1873 | て 1874 | と 1875 | は 1876 | ひ 1877 | ふ 1878 | へ 1879 | ほ 1880 | な 1881 | に 1882 | ぬ 1883 | ね 1884 | の 1885 | ま 1886 | み 1887 | む 1888 | め 1889 | も 1890 | ら 1891 | り 1892 | る 1893 | れ 1894 | ろ 1895 | や 1896 | ゆ 1897 | よ 1898 | を 1899 | き 1900 | ゃ 1901 | き 1902 | ゅ 1903 | き 1904 | し 1905 | -------------------------------------------------------------------------------- /src/windIndexCore/stopword/stopword_en.txt: -------------------------------------------------------------------------------- 1 | 2 | able 3 | about 4 | above 5 | according 6 | accordingly 7 | across 8 | actually 9 | after 10 | afterwards 11 | again 12 | against 13 | ain't 14 | all 15 | allow 16 | allows 17 | almost 18 | alone 19 | along 20 | already 21 | also 22 | although 23 | always 24 | am 25 | among 26 | amongst 27 | an 28 | and 29 | another 30 | any 31 | anybody 32 | anyhow 33 | anyone 34 | anything 35 | anyway 36 | anyways 37 | anywhere 38 | apart 39 | appear 40 | appreciate 41 | appropriate 42 | are 43 | aren't 44 | around 45 | as 46 | a's 47 | aside 48 | ask 49 | asking 50 | associated 51 | at 52 | available 53 | away 54 | awfully 55 | be 56 | became 57 | because 58 | become 59 | becomes 60 | becoming 61 | been 62 | before 63 | beforehand 64 | behind 65 | being 66 | believe 67 | below 68 | beside 69 | besides 70 | best 71 | better 72 | between 73 | beyond 74 | both 75 | brief 76 | but 77 | by 78 | came 79 | can 80 | cannot 81 | cant 82 | can't 83 | cause 84 | causes 85 | certain 86 | certainly 87 | changes 88 | clearly 89 | c'mon 90 | co 91 | com 92 | come 93 | comes 94 | concerning 95 | consequently 96 | consider 97 | considering 98 | contain 99 | containing 100 | contains 101 | corresponding 102 | could 103 | couldn't 104 | course 105 | c's 106 | currently 107 | definitely 108 | described 109 | despite 110 | did 111 | didn't 112 | different 113 | do 114 | does 115 | doesn't 116 | doing 117 | done 118 | don't 119 | down 120 | downwards 121 | during 122 | each 123 | edu 124 | eg 125 | eight 126 | either 127 | else 128 | elsewhere 129 | enough 130 | entirely 131 | especially 132 | et 133 | etc 134 | even 135 | ever 136 | every 137 | everybody 138 | everyone 139 | everything 140 | everywhere 141 | ex 142 | exactly 143 | example 144 | except 145 | far 146 | few 147 | fifth 148 | first 149 | five 150 | followed 151 | following 152 | follows 153 | for 154 | former 155 | formerly 156 | forth 157 | four 158 | from 159 | further 160 | furthermore 161 | get 162 | gets 163 | getting 164 | given 165 | gives 166 | go 167 | goes 168 | going 169 | gone 170 | got 171 | gotten 172 | greetings 173 | had 174 | hadn't 175 | happens 176 | hardly 177 | has 178 | hasn't 179 | have 180 | haven't 181 | having 182 | he 183 | hello 184 | help 185 | hence 186 | her 187 | here 188 | hereafter 189 | hereby 190 | herein 191 | here's 192 | hereupon 193 | hers 194 | herself 195 | he's 196 | hi 197 | him 198 | himself 199 | his 200 | hither 201 | hopefully 202 | how 203 | howbeit 204 | however 205 | i'd 206 | ie 207 | if 208 | ignored 209 | i'll 210 | i'm 211 | immediate 212 | in 213 | inasmuch 214 | inc 215 | indeed 216 | indicate 217 | indicated 218 | indicates 219 | inner 220 | insofar 221 | instead 222 | into 223 | inward 224 | is 225 | isn't 226 | it 227 | it'd 228 | it'll 229 | its 230 | it's 231 | itself 232 | i've 233 | just 234 | keep 235 | keeps 236 | kept 237 | know 238 | known 239 | knows 240 | last 241 | lately 242 | later 243 | latter 244 | latterly 245 | least 246 | less 247 | lest 248 | let 249 | let's 250 | like 251 | liked 252 | likely 253 | little 254 | look 255 | looking 256 | looks 257 | ltd 258 | mainly 259 | many 260 | may 261 | maybe 262 | me 263 | mean 264 | meanwhile 265 | merely 266 | might 267 | more 268 | moreover 269 | most 270 | mostly 271 | much 272 | must 273 | my 274 | myself 275 | name 276 | namely 277 | nd 278 | near 279 | nearly 280 | necessary 281 | need 282 | needs 283 | neither 284 | never 285 | nevertheless 286 | new 287 | next 288 | nine 289 | no 290 | nobody 291 | non 292 | none 293 | noone 294 | nor 295 | normally 296 | not 297 | nothing 298 | novel 299 | now 300 | nowhere 301 | obviously 302 | of 303 | off 304 | often 305 | oh 306 | ok 307 | okay 308 | old 309 | on 310 | once 311 | one 312 | ones 313 | only 314 | onto 315 | or 316 | other 317 | others 318 | otherwise 319 | ought 320 | our 321 | ours 322 | ourselves 323 | out 324 | outside 325 | over 326 | overall 327 | own 328 | particular 329 | particularly 330 | per 331 | perhaps 332 | placed 333 | please 334 | plus 335 | possible 336 | presumably 337 | probably 338 | provides 339 | que 340 | quite 341 | qv 342 | rather 343 | rd 344 | re 345 | really 346 | reasonably 347 | regarding 348 | regardless 349 | regards 350 | relatively 351 | respectively 352 | right 353 | said 354 | same 355 | saw 356 | say 357 | saying 358 | says 359 | second 360 | secondly 361 | see 362 | seeing 363 | seem 364 | seemed 365 | seeming 366 | seems 367 | seen 368 | self 369 | selves 370 | sensible 371 | sent 372 | serious 373 | seriously 374 | seven 375 | several 376 | shall 377 | she 378 | should 379 | shouldn't 380 | since 381 | six 382 | so 383 | some 384 | somebody 385 | somehow 386 | someone 387 | something 388 | sometime 389 | sometimes 390 | somewhat 391 | somewhere 392 | soon 393 | sorry 394 | specified 395 | specify 396 | specifying 397 | still 398 | sub 399 | such 400 | sup 401 | sure 402 | take 403 | taken 404 | tell 405 | tends 406 | th 407 | than 408 | thank 409 | thanks 410 | thanx 411 | that 412 | thats 413 | that's 414 | the 415 | their 416 | theirs 417 | them 418 | themselves 419 | then 420 | thence 421 | there 422 | thereafter 423 | thereby 424 | therefore 425 | therein 426 | theres 427 | there's 428 | thereupon 429 | these 430 | they 431 | they'd 432 | they'll 433 | they're 434 | they've 435 | think 436 | third 437 | this 438 | thorough 439 | thoroughly 440 | those 441 | though 442 | three 443 | through 444 | throughout 445 | thru 446 | thus 447 | to 448 | together 449 | too 450 | took 451 | toward 452 | towards 453 | tried 454 | tries 455 | truly 456 | try 457 | trying 458 | t's 459 | twice 460 | two 461 | un 462 | under 463 | unfortunately 464 | unless 465 | unlikely 466 | until 467 | unto 468 | up 469 | upon 470 | us 471 | use 472 | used 473 | useful 474 | uses 475 | using 476 | usually 477 | value 478 | various 479 | very 480 | via 481 | viz 482 | vs 483 | want 484 | wants 485 | was 486 | wasn't 487 | way 488 | we 489 | we'd 490 | welcome 491 | well 492 | we'll 493 | went 494 | were 495 | we're 496 | weren't 497 | we've 498 | what 499 | whatever 500 | what's 501 | when 502 | whence 503 | whenever 504 | where 505 | whereafter 506 | whereas 507 | whereby 508 | wherein 509 | where's 510 | whereupon 511 | wherever 512 | whether 513 | which 514 | while 515 | whither 516 | who 517 | whoever 518 | whole 519 | whom 520 | who's 521 | whose 522 | why 523 | will 524 | willing 525 | wish 526 | with 527 | within 528 | without 529 | wonder 530 | won't 531 | would 532 | wouldn't 533 | yes 534 | yet 535 | you 536 | you'd 537 | you'll 538 | your 539 | you're 540 | yours 541 | yourself 542 | yourselves 543 | you've 544 | zero 545 | -------------------------------------------------------------------------------- /src/windIndexCore/stopword/stopword_small.txt: -------------------------------------------------------------------------------- 1 | 的 2 | 得 3 | 地 4 | 了 5 | 吗 6 | 嘛 7 | 中 8 | 关于 9 | 在 10 | 及 11 | 以及 12 | 和 13 | 与 14 | 用 15 | 以 16 | 也 -------------------------------------------------------------------------------- /src/windIndexCore/symbol/symbol_json.txt: -------------------------------------------------------------------------------- 1 | ["\u3010","\u3011","-","_","\u300a","\u300b","\u300e","\u300f","\u2192","\u2190","\u2191","\u2193","~","\u300c","\u300d","\u2014","`","\u00b7","\uff0c",",",";","\\","[","]","\uff01","(",")","\uff08","\uff09","\u3002","\u3001","\uff1b","\u2019","|","\u2018","\u201c","\u201d","\u2026","\uff1a","\uff1f","?","'","\"",":","!",".","\/"] -------------------------------------------------------------------------------- /src/windIndexCore/symbol/symbol_txt.txt: -------------------------------------------------------------------------------- 1 | 【 2 | 】 3 | - 4 | _ 5 | 《 6 | 》 7 | 『 8 | 』 9 | → 10 | ← 11 | ↑ 12 | ↓ 13 | ~ 14 | 「 15 | 」 16 | — 17 | ` 18 | · 19 | , 20 | , 21 | ; 22 | \ 23 | [ 24 | ] 25 | ! 26 | ( 27 | ) 28 | ( 29 | ) 30 | 。 31 | 、 32 | ; 33 | ’ 34 | | 35 | ‘ 36 | “ 37 | ” 38 | … 39 | : 40 | ? 41 | ? 42 | ' 43 | " 44 | : 45 | ! 46 | . 47 | / -------------------------------------------------------------------------------- /src/windIndexCore/synonym/source/synonym.txt: -------------------------------------------------------------------------------- 1 |  2 | 眼睛-眼皮-眼睑-眼周-眼部 3 | 4 | 调换-互换 5 | 小名-乳名 6 | 7 | 中国-中华人民共和国-我国 8 | 9 | 宝宝-孩子-小孩-儿子-女儿-小儿-儿童-婴儿 10 | 胎儿|宝宝 11 | 老人-老年人 12 | 13 | 赏析-鉴赏-翻译 14 | 15 | -------------------------------------------------------------------------------- /src/windIndexCore/synonym/source/synonymCustom.txt: -------------------------------------------------------------------------------- 1 | 2 | 电脑-笔记本 3 | 手指-指头 4 | 消除-消掉-去除-去掉 5 | -------------------------------------------------------------------------------- /vendor/autoload.php: -------------------------------------------------------------------------------- 1 | 7 | * Jordi Boggiano 8 | * 9 | * For the full copyright and license information, please view the LICENSE 10 | * file that was distributed with this source code. 11 | */ 12 | 13 | namespace Composer\Autoload; 14 | 15 | /** 16 | * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. 17 | * 18 | * $loader = new \Composer\Autoload\ClassLoader(); 19 | * 20 | * // register classes with namespaces 21 | * $loader->add('Symfony\Component', __DIR__.'/component'); 22 | * $loader->add('Symfony', __DIR__.'/framework'); 23 | * 24 | * // activate the autoloader 25 | * $loader->register(); 26 | * 27 | * // to enable searching the include path (eg. for PEAR packages) 28 | * $loader->setUseIncludePath(true); 29 | * 30 | * In this example, if you try to use a class in the Symfony\Component 31 | * namespace or one of its children (Symfony\Component\Console for instance), 32 | * the autoloader will first look for the class under the component/ 33 | * directory, and it will then fallback to the framework/ directory if not 34 | * found before giving up. 35 | * 36 | * This class is loosely based on the Symfony UniversalClassLoader. 37 | * 38 | * @author Fabien Potencier 39 | * @author Jordi Boggiano 40 | * @see https://www.php-fig.org/psr/psr-0/ 41 | * @see https://www.php-fig.org/psr/psr-4/ 42 | */ 43 | class ClassLoader 44 | { 45 | /** @var \Closure(string):void */ 46 | private static $includeFile; 47 | 48 | /** @var string|null */ 49 | private $vendorDir; 50 | 51 | // PSR-4 52 | /** 53 | * @var array> 54 | */ 55 | private $prefixLengthsPsr4 = array(); 56 | /** 57 | * @var array> 58 | */ 59 | private $prefixDirsPsr4 = array(); 60 | /** 61 | * @var list 62 | */ 63 | private $fallbackDirsPsr4 = array(); 64 | 65 | // PSR-0 66 | /** 67 | * List of PSR-0 prefixes 68 | * 69 | * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) 70 | * 71 | * @var array>> 72 | */ 73 | private $prefixesPsr0 = array(); 74 | /** 75 | * @var list 76 | */ 77 | private $fallbackDirsPsr0 = array(); 78 | 79 | /** @var bool */ 80 | private $useIncludePath = false; 81 | 82 | /** 83 | * @var array 84 | */ 85 | private $classMap = array(); 86 | 87 | /** @var bool */ 88 | private $classMapAuthoritative = false; 89 | 90 | /** 91 | * @var array 92 | */ 93 | private $missingClasses = array(); 94 | 95 | /** @var string|null */ 96 | private $apcuPrefix; 97 | 98 | /** 99 | * @var array 100 | */ 101 | private static $registeredLoaders = array(); 102 | 103 | /** 104 | * @param string|null $vendorDir 105 | */ 106 | public function __construct($vendorDir = null) 107 | { 108 | $this->vendorDir = $vendorDir; 109 | self::initializeIncludeClosure(); 110 | } 111 | 112 | /** 113 | * @return array> 114 | */ 115 | public function getPrefixes() 116 | { 117 | if (!empty($this->prefixesPsr0)) { 118 | return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); 119 | } 120 | 121 | return array(); 122 | } 123 | 124 | /** 125 | * @return array> 126 | */ 127 | public function getPrefixesPsr4() 128 | { 129 | return $this->prefixDirsPsr4; 130 | } 131 | 132 | /** 133 | * @return list 134 | */ 135 | public function getFallbackDirs() 136 | { 137 | return $this->fallbackDirsPsr0; 138 | } 139 | 140 | /** 141 | * @return list 142 | */ 143 | public function getFallbackDirsPsr4() 144 | { 145 | return $this->fallbackDirsPsr4; 146 | } 147 | 148 | /** 149 | * @return array Array of classname => path 150 | */ 151 | public function getClassMap() 152 | { 153 | return $this->classMap; 154 | } 155 | 156 | /** 157 | * @param array $classMap Class to filename map 158 | * 159 | * @return void 160 | */ 161 | public function addClassMap(array $classMap) 162 | { 163 | if ($this->classMap) { 164 | $this->classMap = array_merge($this->classMap, $classMap); 165 | } else { 166 | $this->classMap = $classMap; 167 | } 168 | } 169 | 170 | /** 171 | * Registers a set of PSR-0 directories for a given prefix, either 172 | * appending or prepending to the ones previously set for this prefix. 173 | * 174 | * @param string $prefix The prefix 175 | * @param list|string $paths The PSR-0 root directories 176 | * @param bool $prepend Whether to prepend the directories 177 | * 178 | * @return void 179 | */ 180 | public function add($prefix, $paths, $prepend = false) 181 | { 182 | $paths = (array) $paths; 183 | if (!$prefix) { 184 | if ($prepend) { 185 | $this->fallbackDirsPsr0 = array_merge( 186 | $paths, 187 | $this->fallbackDirsPsr0 188 | ); 189 | } else { 190 | $this->fallbackDirsPsr0 = array_merge( 191 | $this->fallbackDirsPsr0, 192 | $paths 193 | ); 194 | } 195 | 196 | return; 197 | } 198 | 199 | $first = $prefix[0]; 200 | if (!isset($this->prefixesPsr0[$first][$prefix])) { 201 | $this->prefixesPsr0[$first][$prefix] = $paths; 202 | 203 | return; 204 | } 205 | if ($prepend) { 206 | $this->prefixesPsr0[$first][$prefix] = array_merge( 207 | $paths, 208 | $this->prefixesPsr0[$first][$prefix] 209 | ); 210 | } else { 211 | $this->prefixesPsr0[$first][$prefix] = array_merge( 212 | $this->prefixesPsr0[$first][$prefix], 213 | $paths 214 | ); 215 | } 216 | } 217 | 218 | /** 219 | * Registers a set of PSR-4 directories for a given namespace, either 220 | * appending or prepending to the ones previously set for this namespace. 221 | * 222 | * @param string $prefix The prefix/namespace, with trailing '\\' 223 | * @param list|string $paths The PSR-4 base directories 224 | * @param bool $prepend Whether to prepend the directories 225 | * 226 | * @throws \InvalidArgumentException 227 | * 228 | * @return void 229 | */ 230 | public function addPsr4($prefix, $paths, $prepend = false) 231 | { 232 | $paths = (array) $paths; 233 | if (!$prefix) { 234 | // Register directories for the root namespace. 235 | if ($prepend) { 236 | $this->fallbackDirsPsr4 = array_merge( 237 | $paths, 238 | $this->fallbackDirsPsr4 239 | ); 240 | } else { 241 | $this->fallbackDirsPsr4 = array_merge( 242 | $this->fallbackDirsPsr4, 243 | $paths 244 | ); 245 | } 246 | } elseif (!isset($this->prefixDirsPsr4[$prefix])) { 247 | // Register directories for a new namespace. 248 | $length = strlen($prefix); 249 | if ('\\' !== $prefix[$length - 1]) { 250 | throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); 251 | } 252 | $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; 253 | $this->prefixDirsPsr4[$prefix] = $paths; 254 | } elseif ($prepend) { 255 | // Prepend directories for an already registered namespace. 256 | $this->prefixDirsPsr4[$prefix] = array_merge( 257 | $paths, 258 | $this->prefixDirsPsr4[$prefix] 259 | ); 260 | } else { 261 | // Append directories for an already registered namespace. 262 | $this->prefixDirsPsr4[$prefix] = array_merge( 263 | $this->prefixDirsPsr4[$prefix], 264 | $paths 265 | ); 266 | } 267 | } 268 | 269 | /** 270 | * Registers a set of PSR-0 directories for a given prefix, 271 | * replacing any others previously set for this prefix. 272 | * 273 | * @param string $prefix The prefix 274 | * @param list|string $paths The PSR-0 base directories 275 | * 276 | * @return void 277 | */ 278 | public function set($prefix, $paths) 279 | { 280 | if (!$prefix) { 281 | $this->fallbackDirsPsr0 = (array) $paths; 282 | } else { 283 | $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; 284 | } 285 | } 286 | 287 | /** 288 | * Registers a set of PSR-4 directories for a given namespace, 289 | * replacing any others previously set for this namespace. 290 | * 291 | * @param string $prefix The prefix/namespace, with trailing '\\' 292 | * @param list|string $paths The PSR-4 base directories 293 | * 294 | * @throws \InvalidArgumentException 295 | * 296 | * @return void 297 | */ 298 | public function setPsr4($prefix, $paths) 299 | { 300 | if (!$prefix) { 301 | $this->fallbackDirsPsr4 = (array) $paths; 302 | } else { 303 | $length = strlen($prefix); 304 | if ('\\' !== $prefix[$length - 1]) { 305 | throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); 306 | } 307 | $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; 308 | $this->prefixDirsPsr4[$prefix] = (array) $paths; 309 | } 310 | } 311 | 312 | /** 313 | * Turns on searching the include path for class files. 314 | * 315 | * @param bool $useIncludePath 316 | * 317 | * @return void 318 | */ 319 | public function setUseIncludePath($useIncludePath) 320 | { 321 | $this->useIncludePath = $useIncludePath; 322 | } 323 | 324 | /** 325 | * Can be used to check if the autoloader uses the include path to check 326 | * for classes. 327 | * 328 | * @return bool 329 | */ 330 | public function getUseIncludePath() 331 | { 332 | return $this->useIncludePath; 333 | } 334 | 335 | /** 336 | * Turns off searching the prefix and fallback directories for classes 337 | * that have not been registered with the class map. 338 | * 339 | * @param bool $classMapAuthoritative 340 | * 341 | * @return void 342 | */ 343 | public function setClassMapAuthoritative($classMapAuthoritative) 344 | { 345 | $this->classMapAuthoritative = $classMapAuthoritative; 346 | } 347 | 348 | /** 349 | * Should class lookup fail if not found in the current class map? 350 | * 351 | * @return bool 352 | */ 353 | public function isClassMapAuthoritative() 354 | { 355 | return $this->classMapAuthoritative; 356 | } 357 | 358 | /** 359 | * APCu prefix to use to cache found/not-found classes, if the extension is enabled. 360 | * 361 | * @param string|null $apcuPrefix 362 | * 363 | * @return void 364 | */ 365 | public function setApcuPrefix($apcuPrefix) 366 | { 367 | $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; 368 | } 369 | 370 | /** 371 | * The APCu prefix in use, or null if APCu caching is not enabled. 372 | * 373 | * @return string|null 374 | */ 375 | public function getApcuPrefix() 376 | { 377 | return $this->apcuPrefix; 378 | } 379 | 380 | /** 381 | * Registers this instance as an autoloader. 382 | * 383 | * @param bool $prepend Whether to prepend the autoloader or not 384 | * 385 | * @return void 386 | */ 387 | public function register($prepend = false) 388 | { 389 | spl_autoload_register(array($this, 'loadClass'), true, $prepend); 390 | 391 | if (null === $this->vendorDir) { 392 | return; 393 | } 394 | 395 | if ($prepend) { 396 | self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; 397 | } else { 398 | unset(self::$registeredLoaders[$this->vendorDir]); 399 | self::$registeredLoaders[$this->vendorDir] = $this; 400 | } 401 | } 402 | 403 | /** 404 | * Unregisters this instance as an autoloader. 405 | * 406 | * @return void 407 | */ 408 | public function unregister() 409 | { 410 | spl_autoload_unregister(array($this, 'loadClass')); 411 | 412 | if (null !== $this->vendorDir) { 413 | unset(self::$registeredLoaders[$this->vendorDir]); 414 | } 415 | } 416 | 417 | /** 418 | * Loads the given class or interface. 419 | * 420 | * @param string $class The name of the class 421 | * @return true|null True if loaded, null otherwise 422 | */ 423 | public function loadClass($class) 424 | { 425 | if ($file = $this->findFile($class)) { 426 | $includeFile = self::$includeFile; 427 | $includeFile($file); 428 | 429 | return true; 430 | } 431 | 432 | return null; 433 | } 434 | 435 | /** 436 | * Finds the path to the file where the class is defined. 437 | * 438 | * @param string $class The name of the class 439 | * 440 | * @return string|false The path if found, false otherwise 441 | */ 442 | public function findFile($class) 443 | { 444 | // class map lookup 445 | if (isset($this->classMap[$class])) { 446 | return $this->classMap[$class]; 447 | } 448 | if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { 449 | return false; 450 | } 451 | if (null !== $this->apcuPrefix) { 452 | $file = apcu_fetch($this->apcuPrefix.$class, $hit); 453 | if ($hit) { 454 | return $file; 455 | } 456 | } 457 | 458 | $file = $this->findFileWithExtension($class, '.php'); 459 | 460 | // Search for Hack files if we are running on HHVM 461 | if (false === $file && defined('HHVM_VERSION')) { 462 | $file = $this->findFileWithExtension($class, '.hh'); 463 | } 464 | 465 | if (null !== $this->apcuPrefix) { 466 | apcu_add($this->apcuPrefix.$class, $file); 467 | } 468 | 469 | if (false === $file) { 470 | // Remember that this class does not exist. 471 | $this->missingClasses[$class] = true; 472 | } 473 | 474 | return $file; 475 | } 476 | 477 | /** 478 | * Returns the currently registered loaders keyed by their corresponding vendor directories. 479 | * 480 | * @return array 481 | */ 482 | public static function getRegisteredLoaders() 483 | { 484 | return self::$registeredLoaders; 485 | } 486 | 487 | /** 488 | * @param string $class 489 | * @param string $ext 490 | * @return string|false 491 | */ 492 | private function findFileWithExtension($class, $ext) 493 | { 494 | // PSR-4 lookup 495 | $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; 496 | 497 | $first = $class[0]; 498 | if (isset($this->prefixLengthsPsr4[$first])) { 499 | $subPath = $class; 500 | while (false !== $lastPos = strrpos($subPath, '\\')) { 501 | $subPath = substr($subPath, 0, $lastPos); 502 | $search = $subPath . '\\'; 503 | if (isset($this->prefixDirsPsr4[$search])) { 504 | $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); 505 | foreach ($this->prefixDirsPsr4[$search] as $dir) { 506 | if (file_exists($file = $dir . $pathEnd)) { 507 | return $file; 508 | } 509 | } 510 | } 511 | } 512 | } 513 | 514 | // PSR-4 fallback dirs 515 | foreach ($this->fallbackDirsPsr4 as $dir) { 516 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { 517 | return $file; 518 | } 519 | } 520 | 521 | // PSR-0 lookup 522 | if (false !== $pos = strrpos($class, '\\')) { 523 | // namespaced class name 524 | $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) 525 | . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); 526 | } else { 527 | // PEAR-like class name 528 | $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; 529 | } 530 | 531 | if (isset($this->prefixesPsr0[$first])) { 532 | foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { 533 | if (0 === strpos($class, $prefix)) { 534 | foreach ($dirs as $dir) { 535 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { 536 | return $file; 537 | } 538 | } 539 | } 540 | } 541 | } 542 | 543 | // PSR-0 fallback dirs 544 | foreach ($this->fallbackDirsPsr0 as $dir) { 545 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { 546 | return $file; 547 | } 548 | } 549 | 550 | // PSR-0 include paths. 551 | if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { 552 | return $file; 553 | } 554 | 555 | return false; 556 | } 557 | 558 | /** 559 | * @return void 560 | */ 561 | private static function initializeIncludeClosure() 562 | { 563 | if (self::$includeFile !== null) { 564 | return; 565 | } 566 | 567 | /** 568 | * Scope isolated include. 569 | * 570 | * Prevents access to $this/self from included files. 571 | * 572 | * @param string $file 573 | * @return void 574 | */ 575 | self::$includeFile = \Closure::bind(static function($file) { 576 | include $file; 577 | }, null, null); 578 | } 579 | } 580 | -------------------------------------------------------------------------------- /vendor/composer/InstalledVersions.php: -------------------------------------------------------------------------------- 1 | 7 | * Jordi Boggiano 8 | * 9 | * For the full copyright and license information, please view the LICENSE 10 | * file that was distributed with this source code. 11 | */ 12 | 13 | namespace Composer; 14 | 15 | use Composer\Autoload\ClassLoader; 16 | use Composer\Semver\VersionParser; 17 | 18 | /** 19 | * This class is copied in every Composer installed project and available to all 20 | * 21 | * See also https://getcomposer.org/doc/07-runtime.md#installed-versions 22 | * 23 | * To require its presence, you can require `composer-runtime-api ^2.0` 24 | * 25 | * @final 26 | */ 27 | class InstalledVersions 28 | { 29 | /** 30 | * @var mixed[]|null 31 | * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null 32 | */ 33 | private static $installed; 34 | 35 | /** 36 | * @var bool 37 | */ 38 | private static $installedIsLocalDir; 39 | 40 | /** 41 | * @var bool|null 42 | */ 43 | private static $canGetVendors; 44 | 45 | /** 46 | * @var array[] 47 | * @psalm-var array}> 48 | */ 49 | private static $installedByVendor = array(); 50 | 51 | /** 52 | * Returns a list of all package names which are present, either by being installed, replaced or provided 53 | * 54 | * @return string[] 55 | * @psalm-return list 56 | */ 57 | public static function getInstalledPackages() 58 | { 59 | $packages = array(); 60 | foreach (self::getInstalled() as $installed) { 61 | $packages[] = array_keys($installed['versions']); 62 | } 63 | 64 | if (1 === \count($packages)) { 65 | return $packages[0]; 66 | } 67 | 68 | return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); 69 | } 70 | 71 | /** 72 | * Returns a list of all package names with a specific type e.g. 'library' 73 | * 74 | * @param string $type 75 | * @return string[] 76 | * @psalm-return list 77 | */ 78 | public static function getInstalledPackagesByType($type) 79 | { 80 | $packagesByType = array(); 81 | 82 | foreach (self::getInstalled() as $installed) { 83 | foreach ($installed['versions'] as $name => $package) { 84 | if (isset($package['type']) && $package['type'] === $type) { 85 | $packagesByType[] = $name; 86 | } 87 | } 88 | } 89 | 90 | return $packagesByType; 91 | } 92 | 93 | /** 94 | * Checks whether the given package is installed 95 | * 96 | * This also returns true if the package name is provided or replaced by another package 97 | * 98 | * @param string $packageName 99 | * @param bool $includeDevRequirements 100 | * @return bool 101 | */ 102 | public static function isInstalled($packageName, $includeDevRequirements = true) 103 | { 104 | foreach (self::getInstalled() as $installed) { 105 | if (isset($installed['versions'][$packageName])) { 106 | return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; 107 | } 108 | } 109 | 110 | return false; 111 | } 112 | 113 | /** 114 | * Checks whether the given package satisfies a version constraint 115 | * 116 | * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: 117 | * 118 | * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') 119 | * 120 | * @param VersionParser $parser Install composer/semver to have access to this class and functionality 121 | * @param string $packageName 122 | * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package 123 | * @return bool 124 | */ 125 | public static function satisfies(VersionParser $parser, $packageName, $constraint) 126 | { 127 | $constraint = $parser->parseConstraints((string) $constraint); 128 | $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); 129 | 130 | return $provided->matches($constraint); 131 | } 132 | 133 | /** 134 | * Returns a version constraint representing all the range(s) which are installed for a given package 135 | * 136 | * It is easier to use this via isInstalled() with the $constraint argument if you need to check 137 | * whether a given version of a package is installed, and not just whether it exists 138 | * 139 | * @param string $packageName 140 | * @return string Version constraint usable with composer/semver 141 | */ 142 | public static function getVersionRanges($packageName) 143 | { 144 | foreach (self::getInstalled() as $installed) { 145 | if (!isset($installed['versions'][$packageName])) { 146 | continue; 147 | } 148 | 149 | $ranges = array(); 150 | if (isset($installed['versions'][$packageName]['pretty_version'])) { 151 | $ranges[] = $installed['versions'][$packageName]['pretty_version']; 152 | } 153 | if (array_key_exists('aliases', $installed['versions'][$packageName])) { 154 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); 155 | } 156 | if (array_key_exists('replaced', $installed['versions'][$packageName])) { 157 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); 158 | } 159 | if (array_key_exists('provided', $installed['versions'][$packageName])) { 160 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); 161 | } 162 | 163 | return implode(' || ', $ranges); 164 | } 165 | 166 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); 167 | } 168 | 169 | /** 170 | * @param string $packageName 171 | * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present 172 | */ 173 | public static function getVersion($packageName) 174 | { 175 | foreach (self::getInstalled() as $installed) { 176 | if (!isset($installed['versions'][$packageName])) { 177 | continue; 178 | } 179 | 180 | if (!isset($installed['versions'][$packageName]['version'])) { 181 | return null; 182 | } 183 | 184 | return $installed['versions'][$packageName]['version']; 185 | } 186 | 187 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); 188 | } 189 | 190 | /** 191 | * @param string $packageName 192 | * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present 193 | */ 194 | public static function getPrettyVersion($packageName) 195 | { 196 | foreach (self::getInstalled() as $installed) { 197 | if (!isset($installed['versions'][$packageName])) { 198 | continue; 199 | } 200 | 201 | if (!isset($installed['versions'][$packageName]['pretty_version'])) { 202 | return null; 203 | } 204 | 205 | return $installed['versions'][$packageName]['pretty_version']; 206 | } 207 | 208 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); 209 | } 210 | 211 | /** 212 | * @param string $packageName 213 | * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference 214 | */ 215 | public static function getReference($packageName) 216 | { 217 | foreach (self::getInstalled() as $installed) { 218 | if (!isset($installed['versions'][$packageName])) { 219 | continue; 220 | } 221 | 222 | if (!isset($installed['versions'][$packageName]['reference'])) { 223 | return null; 224 | } 225 | 226 | return $installed['versions'][$packageName]['reference']; 227 | } 228 | 229 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); 230 | } 231 | 232 | /** 233 | * @param string $packageName 234 | * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. 235 | */ 236 | public static function getInstallPath($packageName) 237 | { 238 | foreach (self::getInstalled() as $installed) { 239 | if (!isset($installed['versions'][$packageName])) { 240 | continue; 241 | } 242 | 243 | return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; 244 | } 245 | 246 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); 247 | } 248 | 249 | /** 250 | * @return array 251 | * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} 252 | */ 253 | public static function getRootPackage() 254 | { 255 | $installed = self::getInstalled(); 256 | 257 | return $installed[0]['root']; 258 | } 259 | 260 | /** 261 | * Returns the raw installed.php data for custom implementations 262 | * 263 | * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. 264 | * @return array[] 265 | * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} 266 | */ 267 | public static function getRawData() 268 | { 269 | @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); 270 | 271 | if (null === self::$installed) { 272 | // only require the installed.php file if this file is loaded from its dumped location, 273 | // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 274 | if (substr(__DIR__, -8, 1) !== 'C') { 275 | self::$installed = include __DIR__ . '/installed.php'; 276 | } else { 277 | self::$installed = array(); 278 | } 279 | } 280 | 281 | return self::$installed; 282 | } 283 | 284 | /** 285 | * Returns the raw data of all installed.php which are currently loaded for custom implementations 286 | * 287 | * @return array[] 288 | * @psalm-return list}> 289 | */ 290 | public static function getAllRawData() 291 | { 292 | return self::getInstalled(); 293 | } 294 | 295 | /** 296 | * Lets you reload the static array from another file 297 | * 298 | * This is only useful for complex integrations in which a project needs to use 299 | * this class but then also needs to execute another project's autoloader in process, 300 | * and wants to ensure both projects have access to their version of installed.php. 301 | * 302 | * A typical case would be PHPUnit, where it would need to make sure it reads all 303 | * the data it needs from this class, then call reload() with 304 | * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure 305 | * the project in which it runs can then also use this class safely, without 306 | * interference between PHPUnit's dependencies and the project's dependencies. 307 | * 308 | * @param array[] $data A vendor/composer/installed.php data set 309 | * @return void 310 | * 311 | * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data 312 | */ 313 | public static function reload($data) 314 | { 315 | self::$installed = $data; 316 | self::$installedByVendor = array(); 317 | 318 | // when using reload, we disable the duplicate protection to ensure that self::$installed data is 319 | // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not, 320 | // so we have to assume it does not, and that may result in duplicate data being returned when listing 321 | // all installed packages for example 322 | self::$installedIsLocalDir = false; 323 | } 324 | 325 | /** 326 | * @return array[] 327 | * @psalm-return list}> 328 | */ 329 | private static function getInstalled() 330 | { 331 | if (null === self::$canGetVendors) { 332 | self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); 333 | } 334 | 335 | $installed = array(); 336 | $copiedLocalDir = false; 337 | 338 | if (self::$canGetVendors) { 339 | $selfDir = strtr(__DIR__, '\\', '/'); 340 | foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { 341 | $vendorDir = strtr($vendorDir, '\\', '/'); 342 | if (isset(self::$installedByVendor[$vendorDir])) { 343 | $installed[] = self::$installedByVendor[$vendorDir]; 344 | } elseif (is_file($vendorDir.'/composer/installed.php')) { 345 | /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ 346 | $required = require $vendorDir.'/composer/installed.php'; 347 | self::$installedByVendor[$vendorDir] = $required; 348 | $installed[] = $required; 349 | if (self::$installed === null && $vendorDir.'/composer' === $selfDir) { 350 | self::$installed = $required; 351 | self::$installedIsLocalDir = true; 352 | } 353 | } 354 | if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) { 355 | $copiedLocalDir = true; 356 | } 357 | } 358 | } 359 | 360 | if (null === self::$installed) { 361 | // only require the installed.php file if this file is loaded from its dumped location, 362 | // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 363 | if (substr(__DIR__, -8, 1) !== 'C') { 364 | /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ 365 | $required = require __DIR__ . '/installed.php'; 366 | self::$installed = $required; 367 | } else { 368 | self::$installed = array(); 369 | } 370 | } 371 | 372 | if (self::$installed !== array() && !$copiedLocalDir) { 373 | $installed[] = self::$installed; 374 | } 375 | 376 | return $installed; 377 | } 378 | } 379 | -------------------------------------------------------------------------------- /vendor/composer/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Copyright (c) Nils Adermann, Jordi Boggiano 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is furnished 9 | to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | 22 | -------------------------------------------------------------------------------- /vendor/composer/autoload_classmap.php: -------------------------------------------------------------------------------- 1 | $vendorDir . '/composer/InstalledVersions.php', 10 | ); 11 | -------------------------------------------------------------------------------- /vendor/composer/autoload_namespaces.php: -------------------------------------------------------------------------------- 1 | array($baseDir . '/src'), 10 | 'WindSearch\\Exceptions\\' => array($baseDir . '/src/Exceptions'), 11 | 'WindSearch\\DAO\\' => array($baseDir . '/src/DAO'), 12 | 'WindSearch\\Core\\' => array($baseDir . '/src/lib'), 13 | ); 14 | -------------------------------------------------------------------------------- /vendor/composer/autoload_real.php: -------------------------------------------------------------------------------- 1 | register(true); 35 | 36 | return $loader; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vendor/composer/autoload_static.php: -------------------------------------------------------------------------------- 1 | 11 | array ( 12 | 'WindSearch\\Index\\' => 17, 13 | 'WindSearch\\Exceptions\\' => 22, 14 | 'WindSearch\\DAO\\' => 15, 15 | 'WindSearch\\Core\\' => 16, 16 | ), 17 | ); 18 | 19 | public static $prefixDirsPsr4 = array ( 20 | 'WindSearch\\Index\\' => 21 | array ( 22 | 0 => __DIR__ . '/../..' . '/src', 23 | ), 24 | 'WindSearch\\Exceptions\\' => 25 | array ( 26 | 0 => __DIR__ . '/../..' . '/src/Exceptions', 27 | ), 28 | 'WindSearch\\DAO\\' => 29 | array ( 30 | 0 => __DIR__ . '/../..' . '/src/DAO', 31 | ), 32 | 'WindSearch\\Core\\' => 33 | array ( 34 | 0 => __DIR__ . '/../..' . '/src/lib', 35 | ), 36 | ); 37 | 38 | public static $classMap = array ( 39 | 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 40 | ); 41 | 42 | public static function getInitializer(ClassLoader $loader) 43 | { 44 | return \Closure::bind(function () use ($loader) { 45 | $loader->prefixLengthsPsr4 = ComposerStaticInitaa7bc86073386447435278c4e4e3ebd5::$prefixLengthsPsr4; 46 | $loader->prefixDirsPsr4 = ComposerStaticInitaa7bc86073386447435278c4e4e3ebd5::$prefixDirsPsr4; 47 | $loader->classMap = ComposerStaticInitaa7bc86073386447435278c4e4e3ebd5::$classMap; 48 | 49 | }, null, ClassLoader::class); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /vendor/composer/installed.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [], 3 | "dev": true, 4 | "dev-package-names": [] 5 | } 6 | -------------------------------------------------------------------------------- /vendor/composer/installed.php: -------------------------------------------------------------------------------- 1 | array( 3 | 'name' => 'rock365/windsearch', 4 | 'pretty_version' => 'dev-main', 5 | 'version' => 'dev-main', 6 | 'reference' => 'd27a81e7dbb3a0719794396cbf62fd953f0e7c82', 7 | 'type' => 'library', 8 | 'install_path' => __DIR__ . '/../../', 9 | 'aliases' => array(), 10 | 'dev' => true, 11 | ), 12 | 'versions' => array( 13 | 'rock365/windsearch' => array( 14 | 'pretty_version' => 'dev-main', 15 | 'version' => 'dev-main', 16 | 'reference' => 'd27a81e7dbb3a0719794396cbf62fd953f0e7c82', 17 | 'type' => 'library', 18 | 'install_path' => __DIR__ . '/../../', 19 | 'aliases' => array(), 20 | 'dev_requirement' => false, 21 | ), 22 | ), 23 | ); 24 | -------------------------------------------------------------------------------- /vendor/composer/platform_check.php: -------------------------------------------------------------------------------- 1 | = 70300)) { 8 | $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.'; 9 | } 10 | 11 | if ($issues) { 12 | if (!headers_sent()) { 13 | header('HTTP/1.1 500 Internal Server Error'); 14 | } 15 | if (!ini_get('display_errors')) { 16 | if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { 17 | fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); 18 | } elseif (!headers_sent()) { 19 | echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; 20 | } 21 | } 22 | trigger_error( 23 | 'Composer detected issues in your platform: ' . implode(' ', $issues), 24 | E_USER_ERROR 25 | ); 26 | } 27 | --------------------------------------------------------------------------------