├── 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 🔍 []()
2 |
3 | ### 让PHP站内搜索变得像呼吸一样简单(新功能开发中...)
4 |
5 | [](LICENSE) [](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 | 
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 |
--------------------------------------------------------------------------------