首页 > 其他分享 >中英文拼写检测纠正开源项目使用入门 word-checker 1.1.0

中英文拼写检测纠正开源项目使用入门 word-checker 1.1.0

时间:2023-04-04 18:11:05浏览次数:54  
标签:word String speling hello Assert checker final 1.1

title

项目简介

word-checker 本项目用于单词拼写检查。支持英文单词拼写检测,和中文拼写检测。

特性说明

  • 可以迅速判断当前单词是否拼写错误

  • 可以返回最佳匹配结果

  • 可以返回纠正匹配列表,支持指定返回列表的大小

  • 错误提示支持 i18n

  • 支持大小写、全角半角格式化处理

  • 支持自定义词库

  • 内置 27W+ 的英文词库

  • 支持指定英文的编辑距离

  • 支持基本的中文拼写检测

变更日志

变更日志

快速开始

JDK 版本

Jdk 1.7+

maven 引入

<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 介绍

核心 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

英文测试例子

参见 EnWordCheckerTest.java

是否拼写正确

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

内容如下:

默守成规 墨守成规

使用英文空格分隔,前面是错误,后面是正确。

后期 Road-Map

  • 支持中文分词拼写检测

  • 引入中文纠错算法,同音字和形近字处理。

  • 支持中英文混合拼写检测

技术鸣谢

Words 提供的原始英语单词数据。

开源地址

https://github.com/houbb/word-checker/ 欢迎大家 fork+star ~~~

标签:word,String,speling,hello,Assert,checker,final,1.1
From: https://www.cnblogs.com/houbbBlogs/p/17287295.html

相关文章

  • wordpress粘贴图片自动上传到服务器(Java版)
    ​ 这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@     page contentType="text/html;cha......
  • Office Word2019您正试图运行的函数包含有宏或需要宏语言
    ......
  • 解决 ubuntu 无法关机 Dell Studio 1569 Cannot Shutdown in Ubuntu 11.10 or 12.04
    ShutdowncomputerusingterminalinUbuntufyouwanttoshutdownyourcomputerwhatdoyoudo?Simplygotoshutdownbuttonandclickshutdownisn’t? Haveyoueverwonderedhowwouldyoushutdownyourpcifyourgdm(GraphicalUserInterface)isnotwork......
  • THM-密码攻击(Password Attacks)
    密码攻击技术密码攻击技术在这个房间里,我们将讨论可用于执行密码攻击的技术。我们将介绍各种技术,例如字典、蛮力、规则库和猜测攻击。上述所有技术都被视为主动“在线”攻击,其中攻击者需要与目标机器通信以获取密码,以便获得对机器的未授权访问。密码破解与密码猜测本节从网......
  • kubernetes rabbimq3.11.11集群之mqtt插件
    1.概述本文是总结给予k8s的rabbitmq3.11.11集群的mqtt搭建rabbitmq集群搭建详见前一篇文章:kubernetes集群部署rabbimq3.11.112.自动创建mqtt账号密码wrapper-entrypoint.sh#!/usr/bin/envbash(sleep20;\admin_user=bbbbbb;\admin_passwd=111111;\rabbitmq......
  • 221114-华中科技大学学位论文利用Pandoc实现LaTex转Word
    LaTex快乐地编辑排版好论文,然后学校系统提交还是要Word文档TT利用Pandoc将.tex直接转换成.docxpandochust_main.tex-ohust_main.docx-wdocx\--reference-dochust_temp.docx\--filterpandoc-crossref\--bibliography=main_ref.bib\--ci......
  • 221115-Word插入公式+自动编号+索引公式的最便捷方式(可能没有之一)
    结合参考文献中的两种方法,最终效果见视频:Word中插入公式及引用的最快捷的方式[可能没有之一]Step1:通过插入题注定制公式编号Step2:通过插入表格定制公式样式Step3:通过自动纠正定制快捷方法(⚠️:选中之前设置好的公式样式即可)参考文献:https://www.youtube.com/watch?v=4ocHER25os......
  • Day 21 21.1 数据库之redis
    Redisredis介绍定义Redis(RemoteDictionaryServer,远程字典服务)是一个使用ANSIC编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库,是NoSQL数据库。redis的出现主要是为了替代早期的Memcache缓存系统的。map内存型(数据存放在内存中)的非关系型(nosql)key-......
  • An Error Ocurred - Error loading password's vault file ---Uninstall MySQL for Ex
    还是在2020年疫情封控开始前后的连续几个月天天重温Delphi、MSSQL、也偶尔折腾一下MySQL,最近2年都没再折腾,昨天2023.4.1,打开Excel是提示此此问题:卸载掉MySQLforExcel之后,再次打开Office2016就Ok了,奇怪为什么会出现这个问题呢 //点击showdetails之后如下:     ......
  • bibtex4word+jabref+texlive
    引言当我们需要在word而不是lateX上写论文,并且需要引用大量参考文献时(比如你在写综述论文),可以利用bibtex4word+jabref+texlive的组合,可以十分方便地:在jabref构建参考文件数据库(bib文件);在word中通过bibtex4word引用参考文献、通过引用bst文件调整、修改参考文献格式(APA、GB77......