NLP 中文拼写检测开源-03-hunspell 拼写纠正算法入门介绍 CSC

拼写纠正系列

NLP 中文拼写检测实现思路

NLP 中文拼写检测纠正算法整理

NLP 英文拼写算法,如果提升 100W 倍的性能?

NLP 中文拼写检测纠正 Paper

java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!

一个提升英文单词拼写检测性能 1000 倍的算法?

单词拼写纠正-03-leetcode edit-distance 72.力扣编辑距离

NLP 开源项目

nlp-hanzi-similar 汉字相似度

word-checker 中英文拼写检测

pinyin 汉字转拼音

opencc4j 繁简体转换

sensitive-word 敏感词

个人感受

大家好,我是老马。

下面学习整理一些其他优秀小伙伴的设计和开源实现。

hunspell

关于 Hunspell

Hunspell 是一个免费的拼写检查器和形态分析库及命令行工具,采用 LGPL/GPL/MPL 三重许可协议。

Hunspell 被 LibreOffice 办公套件、自由浏览器(如 Mozilla Firefox 和 Google Chrome)以及其他工具和操作系统(如 Linux 发行版和 macOS)使用。它也是 Linux、类 Unix 系统和其他操作系统的命令行工具。

Hunspell 的设计旨在为具有单词级书写系统的语言(包括具有丰富形态学、复杂单词复合和字符编码的语言)提供快速高效的拼写检查和纠正。

Hunspell 接口:采用 Curses 库的 Ispell 类似终端接口、Ispell 管道接口、C++/C API 和共享库,还支持其他编程语言的现有语言绑定。

Hunspell 的代码库源自 OpenOffice.org 的 MySpell 库,由 Kevin Hendricks 开发(最初是 Geoff Kuenning 的国际 Ispell 的 C++ 重实现,后来扩展了如 n-gram 建议等功能)。

详细信息请参见 MySpell 3 的下载链接 以及其 README、CONTRIBUTORS 和 license.readme(在这里:license.myspell)文件。

Hunspell 库的主要功能,由 László Németh 开发:

  • 支持 Unicode
  • 高度可定制的建议:单词部分替换表、词干级的语音学及其他替代转录,以识别并修复所有典型的拼写错误,不建议使用攻击性词汇等
  • 复杂形态学:词典和词缀同义词;双重词缀剥离以处理屈折和派生语素组,适用于像阿塞拜疆语、巴斯克语、爱沙尼亚语、芬兰语、匈牙利语、土耳其语等粘着语;64,000 个词缀类,支持任意数量的词缀;条件词缀、复合词缀、歧义语素、零语素、虚拟词典词干、禁止生成词汇等
  • 处理复杂复合词(例如芬兰-乌戈尔语、德语和印欧-印度语系语言):识别由任意数量的单词构成的复合词,处理复合词中的词缀等
  • 自定义词典及其词缀
  • 词干提取
  • 形态学分析(按自定义项目和排列方式)
  • 形态学生成
  • SPELLML XML API,简化拼写检查、词干提取、形态学生成和自定义带词缀字典的集成
  • 语言特定算法,例如阿塞拜疆语或土耳其语中带点的 i 以及德语的锐音符 s 特殊处理,以及匈牙利语的特殊复合规则

Hunspell 命令行工具的主要功能,由 László Németh 开发:

  • Geoff Kuenning 的 Ispell 快速交互界面的重实现
  • 支持的格式:文本、OpenDocument、TeX/LaTeX、HTML/SGML/XML、nroff/troff
  • 可选的自定义词典,指定一个模型词作为词缀
  • 多词典使用(例如 hunspell -d en_US,de_DE,de_medical
  • 各种过滤选项(好词/坏词或行)
  • 形态学分析(选项 -m)
  • 词干提取(选项 -s)

完整的手册请参见 man hunspellman 3 hunspellman 5 hunspell

翻译:Hunspell 已经被翻译成多种语言。如果你的语言缺失或不完整,请使用 Weblate 来帮助翻译 Hunspell。

翻译状态

依赖项

构建时的依赖项:

  • g++ make autoconf automake autopoint libtool

运行时依赖项:

必选可选
libhunspell
hunspell 工具libiconv gettextncurses readline

在 GNU/Linux 和 Unix 上编译

首先,我们需要下载依赖项。在 Linux 上,gettextlibiconv 是标准库的一部分。在其他 Unix 系统上,我们需要手动安装它们。

对于 Ubuntu:

sudo apt install autoconf automake autopoint libtool

然后运行以下命令:

autoreconf -vfi
./configure
make
sudo make install
sudo ldconfig

对于字典开发,使用 --with-warnings 选项。

对于 Hunspell 可执行文件的交互式用户界面,使用 --with-ui 选项。

可选的开发者包:

  • ncurses(需要 --with-ui),例如 libncursesw5 用于 UTF-8
  • readline(用于高级输入行编辑,配置参数:--with-readline

在 Ubuntu 上,包为:

libncurses5-dev libreadline-dev

在 OSX 和 macOS 上编译

在 macOS 上,始终使用 clang 编译器,而不是 g++,因为 Homebrew 的依赖项是用 clang 构建的。

brew install autoconf automake libtool gettext
brew link gettext --force

然后运行:

autoreconf -vfi
./configure
make

在 Windows 上编译

使用 Mingw64 和 MSYS2 编译

下载并安装 Msys2,更新所有内容并安装以下包:

pacman -S base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-libtool

打开 Mingw-w64 Win64 提示符并按照 Linux 上的步骤编译。

在 Cygwin 环境中编译

下载并安装 Cygwin 环境,安装以下额外的包:

  • make
  • automake
  • autoconf
  • libtool
  • gcc-g++ 开发包
  • ncurses,readline(用于用户界面)
  • iconv(字符转换)

然后按照 Linux 上的步骤编译。Cygwin 构建依赖于 Cygwin1.dll。

调试

建议安装标准库的调试版本:

libstdc++6-6-dbg

对于调试,我们需要创建一个调试版本,然后启动 gdb

./configure CXXFLAGS='-g -O0 -Wall -Wextra'
make
./libtool --mode=execute gdb src/tools/hunspell

你也可以直接将 CXXFLAGS 传递给 make,但我们不推荐在长时间开发过程中使用这种方式。

如果你喜欢在 IDE 中开发和调试,请参见 IDE 设置文档。

测试

测试 Hunspell(见 tests/ 子目录中的测试):

make check

或者使用 Valgrind 调试器:

make check
VALGRIND=[Valgrind_tool] make check

例如:

make check
VALGRIND=memcheck make check

文档

功能和字典格式:

man 5 hunspell
man hunspell
hunspell -h

Hunspell 官网

用法

编译并安装后(见 INSTALL),你可以使用 Hunspell 拼写检查器(带用户界面)和 Hunspell 或 Myspell 字典:

hunspell -d en_US text.txt

或不带界面:

hunspell
hunspell -d en_GB -l <text.txt

字典由词缀(.aff)和字典(.dic)文件组成,例如,下载 LibreOffice 的美国英语字典文件(旧版本,但有词干提取和形态学生成):

wget -O en_US.aff  https://cgit.freedesktop.org/libreoffice/dictionaries/plain/en/en_US.aff?id=a4473e06b56bfe35187e302754f6baaa8d75e54f
wget -O en_US.dic https://cgit.freedesktop.org/libreoffice/dictionaries/plain/en/en_US.dic?id=a4473e06b56bfe35187e302754f6baaa8d75e54f

通过命令行输入和输出,可以快速检查其工作情况,例如输入单词 "example"、"examples"、"teached" 和 "verybaaaaaaaaaaaaaaaaaaaaaad":

$ hunspell -d en_US
Hunspell 1.7.0
exampleexamples
teached
verybaaaaaaaaaaaaaaaaaaaaaad

输出为:

$ hunspell -d en_US
example  1: example
examples  1: examples
teached  2: taught, teacher
verybaaaaaaaaaaaaaaaaaaaaaad  1: verybaaaaaaaaaaaaaaaaaaaaaad

小结

希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。

我是老马,期待与你的下次相遇。

参考资料

朴素,但通用的 Spell Check 拼写检查和修复工具,基于 hunspell 实现,适合用于 Objective-C 项目本地和 CI 检查常见的拼写错误

https://github.com/jiyee/spellcheck

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud 运用(3)—— Nacos配置中心

上一篇&#xff1a;SpringCloud 入门&#xff08;2&#xff09;—— 跨服务调度-CSDN博客 Nacos是阿里巴巴开源的服务发现与配置管理基础设施&#xff0c;旨在帮助开发者更轻松地构建云原生应用。它提供了一组简单易用的特性集&#xff0c;支持动态服务发现、配置管理和服务管理…

门户系统需要压测吗?以及门户系统如何压力测试?

一、门户系统为什么要进行压力测试&#xff1f; 首先一点要明确一下&#xff0c;统一门户上线以后&#xff0c;将是所有应用系统的入口&#xff0c;对应门户稳定性要求较高&#xff0c;门户实现了统一入口和统一认证&#xff0c;系统宕机将影响其他系统使用。一般部署架构要求…

专题八:背包问题

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是记忆化搜索&#xff0c;并且掌握记忆化搜索算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早…

SpringBoot核心:自动配置

有使用过SSM框架的&#xff0c;还记得曾经在spring-mybatis.xml配置了多少内容吗&#xff1f;数据源、连接池、会话工厂、事务管理&#xff0c;而现在Spring Boot告诉你这些都不需要了&#xff0c;简单的几个注解统统搞定&#xff0c;是不是很方便&#xff01; 前言 SpringBoo…

python 定时任务管理封装

主逻辑代码 # -*- coding: utf-8 -*- # import apscheduler import pandas as pd from datetime import datetime # 导入调度器&#xff0c;此处使用BackgroundScheduler阻塞调度器 from apscheduler.schedulers.background import BackgroundScheduler # 导入触发器&#xf…

APP投放的归因框架设计

一、归因相关概念回顾 在广告归因简介中我们介绍常见的归因模型和归因方法&#xff0c;我们先来回顾一下&#xff1a; 1. 背景 2. 设备标识 3. 归因模型 归因模型的多样性意味着每种模型都有其独特的优势和局限。关键在于选择一个与您的业务场景相匹配的模型&#xff0c;并且…

Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决

一、问题描述 1、服务器:Kunlun 2280服务器 ARM 2、操作系统:Euler2.0Sp10 Arm 3、Raid卡型号:MeGaRAID 9560-8i 4、Raid配置:2块配置Raid1作为系统盘&#xff0c;剩余磁盘配置Raid5 作为数据盘 二、问题现象 1、使用IBMC页面配置Raid卡&#xff0c;1个Raid1 系统盘和1个Raid5数…

[搜广推]王树森推荐系统——Deep Retrieval 召回

Deep Retrieval 简介 Deep Retrieval 是一种推荐系统框架&#xff0c;它将物品表示为路径&#xff08;path&#xff09;&#xff0c;并在线上查找与用户最匹配的路径。 这种方法与传统的双塔模型不同&#xff0c;后者通常将用户和物品表示为向量&#xff0c;并在线上进行最近邻…

RabbitMQ 的7种工作模式

RabbitMQ 共提供了7种⼯作模式,进⾏消息传递,. 官⽅⽂档:RabbitMQ Tutorials | RabbitMQ 1.Simple(简单模式) P:⽣产者,也就是要发送消息的程序 C:消费者,消息的接收者 Queue:消息队列,图中⻩⾊背景部分.类似⼀个邮箱,可以缓存消息;⽣产者向其中投递消息,消费者从其中取出消息…

PCIe_Host驱动分析_设备枚举

往期内容 本文章相关专栏往期内容&#xff0c;PCI/PCIe子系统专栏&#xff1a; 嵌入式系统的内存访问和总线通信机制解析、PCI/PCIe引入 深入解析非桥PCI设备的访问和配置方法 PCI桥设备的访问方法、软件角度讲解PCIe设备的硬件结构 深入解析PCIe设备事务层与配置过程 PCIe的三…

深入浅出:多功能 Copilot 智能助手如何借助 LLM 实现精准意图识别

阅读原文 1. Copilot中的意图识别 如果要搭建一个 Copilot 智能助手&#xff0c;比如支持 知识问答、数据分析、智能托管、AIGC 等众多场景或能力&#xff0c;那么最核心的就是基于LLM进行意图识别分发能力&#xff0c;意图识别的准确率直接决定了 Copilot 智能助手的能力上限…

Jo-im开发:用于WebRTC的ICE中继服务器Coturn搭建

前言 本人计划开发一套具备文本、语音、视频通话功能的IM demo&#xff0c;同时具备多人在线会议功能&#xff0c;按习惯大概会开源版定义名称为Duihao jo-im&#xff0c;本案主要用于实现语音视频通话的基础组件支撑。因为我们选择基于WebRTC实现IM中语音、视频通话&#xff…

【CVE-2024-53375】TP-Link Archer系列路由器认证操作系统命令注入(内附远离和代码利用)

CVE-2024-53375 TP-Link Archer系列路由器认证操作系统命令注入 受影响的设备 使用 HomeShield 功能的 TP-Link 设备容易受到此漏洞的影响。这包括 TP-Link Archer 系列的多款路由器。 经过测试 Archer AXE75(EU)_V1_1.2.2 Build 20240827(发布日期 2024 年 11 月 4 日)…

程控电阻箱应用中需要注意哪些安全事项?

程控电阻箱是一种用于精确控制电路中电流和电压的电子元件&#xff0c;广泛应用于电子实验、测试设备以及精密测量仪器中。在应用程控电阻箱时&#xff0c;为确保安全和设备的正常运行&#xff0c;需要注意以下几个安全事项&#xff1a; 1. 正确连接&#xff1a;确保电阻箱与电…

Promise链式调用

Promise链式调用 上一篇我们实现了通过promise的方式实现获取国家基本信息&#xff0c;本次我们来使用promise链式调用来实现邻国的展现 首先&#xff0c;我们从第一个国家中获取到邻国的国家代码名称 const neighbour data[0].borders[0];然后我们通过fetch来获取邻国信息&a…

Elasticsearch相关知识@1

目录标题 Lucene1. **什么是 Lucene?**2. **Lucene 在 Elasticsearch 中的作用**3. **Lucene 的核心功能**(1) **倒排索引**(2) **分词**(3) **查询解析**(4) **相关性评分** 4. **为什么 Elasticsearch 使用 Lucene?**5. **Lucene 和 Elasticsearch 的区别**6. **总结** 分片…

UE5 渲染管线 学习笔记

兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面

canvas绘制仪表盘刻度盘

canvas画布可以实现在网页上绘制图形的方法&#xff0c;比如图表、图片处理、动画、游戏等。今天我们在vue模板下用canvas实现仪表盘的绘制。 对canvas不熟悉的同学可以先了解下canvas的API文档&#xff1a;canvas API中文网 - Canvas API中文文档首页地图 一、创建模板&#…

Spring Boot 中实现自定义注解记录接口日志功能

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

【超详细实操内容】django的身份验证系统之限制用户访问的三种方式

目录 1、使用request.user.is_authenticated属性 2、装饰器login_required 3、LoginRequiredMixin类 通常情况下,网站都会对用户限制访问,例如,未登录的用户不可访问用户中心页面。Django框架中使用request.user.isauthenticated属性、装饰器loginrequired和LoginRequire…