# word-checker
**Repository Path**: houbinbin/word-checker
## Basic Information
- **Project Name**: word-checker
- **Description**: 🇨🇳🇬🇧Chinese and English word spelling corrector.(中文易错别字检测,中文拼写检测纠正。英文单词拼写校验工具)
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 7
- **Forks**: 1
- **Created**: 2020-07-30
- **Last Updated**: 2024-01-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 项目简介
本项目用于单词拼写检查。
目前支持英文单词拼写检测,后期将引入中文拼写检测。
[](http://mvnrepository.com/artifact/com.github.houbb/word-checker)
[](https://www.travis-ci.org/houbb/word-checker?branch=master)
[](https://coveralls.io/github/houbb/word-checker?branch=master)
[](https://github.com/houbb/word-checker/blob/master/LICENSE.txt)
[](https://github.com/houbb/word-checker)
# 特性说明
### 支持英文的单词纠错
- 可以迅速判断当前单词是否拼写错误
- 可以返回最佳匹配结果
- 可以返回纠正匹配列表,支持指定返回列表的大小
- 错误提示支持 i18n
- 支持大小写、全角半角格式化处理
- 支持自定义词库
### v0.0.5 最新变更
- 支持基本的中文拼写检测
> [变更日志](https://github.com/houbb/word-checker/blob/master/CHANGELOG.md)
# 快速开始
## JDK 版本
Jdk 1.7+
## maven 引入
```xml
com.github.houbb
word-checker
0.0.5
```
### gradle 引入
```
compile group: 'com.github.houbb', name: 'word-checker', version: '0.0.4'
```
## 测试案例
会根据输入,自动返回最佳纠正结果。
```java
final String speling = "speling";
Assert.assertEquals("spelling", EnWordCheckers.correct(speling));
```
# 核心 api 介绍
核心 api 在 `EnWordCheckers` 工具类下。
| 功能 | 方法 | 参数 | 返回值 | 备注 |
|:----|:----|:----|:---|:----|
| 判断单词拼写是否正确 | isCorrect(string) | 待检测的单词 | boolean | |
| 返回最佳纠正结果 | correct(string) | 待检测的单词 | String | 如果没有找到可以纠正的单词,则返回其本身 |
| 判断单词拼写是否正确 | correctList(string) | 待检测的单词 | List | 返回所有匹配的纠正列表 |
| 判断单词拼写是否正确 | correctList(string, int limit) | 待检测的单词, 返回列表的大小 | 返回指定大小的的纠正列表 | 列表大小 <= limit |
## 测试例子
> 参见 [EnWordCheckerTest.java](https://github.com/houbb/word-checker/tree/master/src/test/java/com/github/houbb/word/checker/util/EnWordCheckersTest.java)
## 是否拼写正确
```java
final String hello = "hello";
final String speling = "speling";
Assert.assertTrue(EnWordCheckers.isCorrect(hello));
Assert.assertFalse(EnWordCheckers.isCorrect(speling));
```
## 返回最佳匹配结果
```java
final String hello = "hello";
final String speling = "speling";
Assert.assertEquals("hello", EnWordCheckers.correct(hello));
Assert.assertEquals("spelling", EnWordCheckers.correct(speling));
```
## 默认纠正匹配列表
```java
final String word = "goo";
List stringList = EnWordCheckers.correctList(word);
Assert.assertEquals("[go, good, too, god, got, oo, goot, foo]", stringList.toString());
```
## 指定纠正匹配列表大小
```java
final String word = "goo";
final int limit = 2;
List stringList = EnWordCheckers.correctList(word, limit);
Assert.assertEquals("[go, good]", stringList.toString());
```
# 中文拼写纠正
## 核心 api
为降低学习成本,核心 api 和 `ZhWordCheckers` 中,和英文拼写检测保持一致。
## 是否拼写正确
```java
final String right = "正确";
final String error = "万变不离其中";
Assert.assertTrue(ZhWordCheckers.isCorrect(right));
Assert.assertFalse(ZhWordCheckers.isCorrect(error));
```
## 返回最佳匹配结果
```java
final String right = "正确";
final String error = "万变不离其中";
Assert.assertEquals("正确", ZhWordCheckers.correct(right));
Assert.assertEquals("万变不离其宗", ZhWordCheckers.correct(error));
```
## 默认纠正匹配列表
```java
final String word = "万变不离其中";
List stringList = ZhWordCheckers.correctList(word);
Assert.assertEquals("[万变不离其宗]", stringList.toString());
```
## 指定纠正匹配列表大小
```java
final String word = "万变不离其中";
final int limit = 1;
List stringList = ZhWordCheckers.correctList(word, limit);
Assert.assertEquals("[万变不离其宗]", stringList.toString());
```
# 格式化处理
有时候用户的输入是各式各样的,本工具支持对于格式化的处理。
## 大小写
大写会被统一格式化为小写。
```java
final String word = "stRing";
Assert.assertTrue(EnWordCheckers.isCorrect(word));
```
## 全角半角
全角会被统一格式化为半角。
```java
final String word = "string";
Assert.assertTrue(EnWordCheckers.isCorrect(word));
```
# 自定义词库
## 自定义词库
你可以在项目资源目录创建文件 `resources/data/define_word_checker_en.txt`
内容如下:
```
my-long-long-define-word,2
my-long-long-define-word-two
```
不同的词独立一行。
每一行第一列代表单词,第二列代表出现的次数,二者用逗号 `,` 隔开。
次数越大,在纠正的时候返回优先级就越高,默认值为 1。
用户自定义的词库优先级高于系统内置词库。
## 测试代码
我们在指定了对应的单词之后,拼写检测的时候就会生效。
```java
final String word = "my-long-long-define-word";
final String word2 = "my-long-long-define-word-two";
Assert.assertTrue(EnWordCheckers.isCorrect(word));
Assert.assertTrue(EnWordCheckers.isCorrect(word2));
```
# 后期 Road-Map
- 支持英文分词,处理整个英文句子
- 支持中文分词拼写检测
- 引入中文纠错算法,同音字和形近字处理。
- 支持中英文混合拼写检测
# 技术鸣谢
[Words](https://github.com/atebits/Words) 提供的原始英语单词数据。
## 文档参考
> [ENABLE word list](https://everything2.com/title/ENABLE+word+list)
> [spell-correct](http://norvig.com/spell-correct.html)
> [spellchecking](http://www.dcs.bbk.ac.uk/~roger/spellchecking.html)