word-checker 本專案用於單詞拼寫檢查。支援英文單詞拼寫檢測,和中文拼寫檢測。
可以迅速判斷當前單詞是否拼寫錯誤
可以返回最佳匹配結果
可以返回糾正匹配列表,支援指定返回列表的大小
錯誤提示支援 i18n
支援大小寫、全形半形格式化處理
支援自定義詞庫
內建 27W+ 的英文詞庫
支援指定英文的編輯距離
支援基本的中文拼寫檢測
Jdk 1.7+
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>word-checker</artifactId>
<version>1.1.0</version>
</dependency>
會根據輸入,自動返回最佳糾正結果。
final String speling = "speling";
Assert.assertEquals("spelling", WordCheckerHelper.correct(speling));
核心 api 在 WordCheckerHelper
工具類下。
WordCheckers
工具類提供了長文字中英文混合的自動糾正功能,當然也支援單個單詞。
功能 | 方法 | 引數 | 返回值 | 備註 |
---|---|---|---|---|
文字拼寫是否正確 | isCorrect(string) | 待檢測的文字 | boolean | 全部正確,才會返回 true |
返回最佳糾正結果 | correct(string) | 待檢測的單詞 | String | 如果沒有找到可以糾正的文字,則返回其本身 |
判斷文字拼寫是否正確 | correctMap(string) | 待檢測的單詞 | Map<String, List<String>> |
返回所有匹配的糾正列表 MAP |
判斷文字拼寫是否正確 | correctMap(string, int limit) | 待檢測的文字, 返回列表的大小 | 返回指定大小的的糾正列表 MAP | 列表大小 <= limit |
判斷文字拼寫是否正確 | correctList(string) | 待檢測的單詞 | List<String> |
返回所有匹配的糾正列表 |
判斷文字拼寫是否正確 | correctList(string, int limit) | 待檢測的文字, 返回列表的大小 | 返回指定大小的的糾正列表 | 列表大小 <= limit |
final String hello = "hello";
final String speling = "speling";
Assert.assertTrue(WordCheckerHelper.isCorrect(hello));
Assert.assertFalse(WordCheckerHelper.isCorrect(speling));
final String hello = "hello";
final String speling = "speling";
Assert.assertEquals("hello", WordCheckerHelper.correct(hello));
Assert.assertEquals("spelling", WordCheckerHelper.correct(speling));
final String word = "goox";
List<String> stringList = WordCheckerHelper.correctList(word);
Assert.assertEquals("[good, goo, goon, goof, gook, goop, goos, gox, goog, gool, goor]", stringList.toString());
final String word = "goox";
final int limit = 2;
List<String> stringList = WordCheckerHelper.correctList(word, limit);
Assert.assertEquals("[good, goo]", stringList.toString());
final String right = "正確";
final String error = "萬變不離其中";
Assert.assertTrue(WordCheckerHelper.isCorrect(right));
Assert.assertFalse(WordCheckerHelper.isCorrect(error));
final String right = "正確";
final String error = "萬變不離其中";
Assert.assertEquals("正確", WordCheckerHelper.correct(right));
Assert.assertEquals("萬變不離其宗", WordCheckerHelper.correct(error));
final String word = "萬變不離其中";
List<String> stringList = WordCheckerHelper.correctList(word);
Assert.assertEquals("[萬變不離其宗]", stringList.toString());
final String word = "萬變不離其中";
final int limit = 1;
List<String> stringList = WordCheckerHelper.correctList(word, limit);
Assert.assertEquals("[萬變不離其宗]", stringList.toString());
實際拼寫糾正的話,最佳的使用體驗是使用者輸入一個長文字,並且可能是中英文混合的。
然後實現上述對應的功能。
final String hello = "hello 你好";
final String speling = "speling 你好 以毒功毒";
Assert.assertTrue(WordCheckers.isCorrect(hello));
Assert.assertFalse(WordCheckers.isCorrect(speling));
final String hello = "hello 你好";
final String speling = "speling 你好以毒功毒";
Assert.assertEquals("hello 你好", WordCheckers.correct(hello));
Assert.assertEquals("spelling 你好以毒攻毒", WordCheckers.correct(speling));
每一個詞,對應的糾正結果。
final String hello = "hello 你好";
final String speling = "speling 你好以毒功毒";
Assert.assertEquals("{hello=[hello], =[ ], 你=[你], 好=[好]}", WordCheckers.correctMap(hello).toString());
Assert.assertEquals("{ =[ ], speling=[spelling, spewing, sperling, seeling, spieling, spiling, speeling, speiling, spelding], 你=[你], 好=[好], 以毒功毒=[以毒攻毒]}", WordCheckers.correctMap(speling).toString());
同上,指定最多返回的個數。
final String hello = "hello 你好";
final String speling = "speling 你好以毒功毒";
Assert.assertEquals("{hello=[hello], =[ ], 你=[你], 好=[好]}", WordCheckers.correctMap(hello, 2).toString());
Assert.assertEquals("{ =[ ], speling=[spelling, spewing], 你=[你], 好=[好], 以毒功毒=[以毒攻毒]}", WordCheckers.correctMap(speling, 2).toString());
有時候使用者的輸入是各式各樣的,本工具支援對於格式化的處理。
大寫會被統一格式化為小寫。
final String word = "stRing";
Assert.assertTrue(WordCheckerHelper.isCorrect(word));
全形會被統一格式化為半形。
final String word = "string";
Assert.assertTrue(WordCheckerHelper.isCorrect(word));
你可以在專案資源目錄建立檔案 resources/data/define_word_checker_en.txt
內容如下:
my-long-long-define-word,2
my-long-long-define-word-two
不同的詞獨立一行。
每一行第一列代表單詞,第二列代表出現的次數,二者用逗號 ,
隔開。
次數越大,在糾正的時候返回優先順序就越高,預設值為 1。
使用者自定義的詞庫優先順序高於系統內建詞庫。
我們在指定了對應的單詞之後,拼寫檢測的時候就會生效。
final String word = "my-long-long-define-word";
final String word2 = "my-long-long-define-word-two";
Assert.assertTrue(WordCheckerHelper.isCorrect(word));
Assert.assertTrue(WordCheckerHelper.isCorrect(word2));
你可以在專案資源目錄建立檔案 resources/data/define_word_checker_zh.txt
內容如下:
默守成規 墨守成規
使用英文空格分隔,前面是錯誤,後面是正確。
支援中文分詞拼寫檢測
引入中文糾錯演演算法,同音字和形近字處理。
支援中英文混合拼寫檢測
Words 提供的原始英語單詞資料。
https://github.com/houbb/word-checker/ 歡迎大家 fork+star ~~~