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,一经查实,立即删除!

相关文章

ubuntu 网络管理

1 查看ip地址 rootu22-tools-20:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever…

写作词汇积累:纰漏、坎肩、颠三倒四、隔阂

纰漏 【纰漏】是指因粗心而产生的差错、小事故或漏洞 1. 在准备这次会议的过程中&#xff0c;我们反复核对资料&#xff0c;力求不出现任何【纰漏】。2. 在这次重要的项目汇报中&#xff0c;他小心翼翼地检查每一页 PPT&#xff0c;生怕出现任何【纰漏】。3. 尽管她工作一向细…

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

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

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

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

java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)

在 Java 中封装 ElasticSearch&#xff08;ES&#xff09;数据库操作&#xff08;ES版本之间变动挺大的&#xff0c;别轻易换版本&#xff09;&#xff0c;可以使得与 ES 的交互更加简洁和易于维护。通过封装常见的操作&#xff0c;如插入文档、查询、更新和删除等&#xff0c;…

专题八:背包问题

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

SpringBoot核心:自动配置

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

Flutter Intl包使用指南:实现国际化和本地化

Flutter Intl包使用指南&#xff1a;实现国际化和本地化 简介 intl 是Dart的国际化&#xff08;i18n&#xff09;和本地化&#xff08;l10n&#xff09;库&#xff0c;它提供了丰富的功能来支持多语言应用的开发。intl 包能够处理消息翻译、复数和性别的智能处理、日期和数字…

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;并且…

跨站脚本攻击之基本介绍

一.基本概念 跨站脚本&#xff08;Cross-site scripting&#xff0c;简称XSS&#xff09;&#xff0c;是指攻击者往Web页面里插入恶意代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web页面的HTML代码会被执行&#xff0c;从而达到恶意攻击用户的目的。 为什么称为x…

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的三…

Python 标准库:string——字符串操作

文章目录 模块介绍主要常量主要类- Formatter- Template 主要函数- capwords()- Template.substitute()- Formatter.format() 模块介绍 string 模块提供了许多与字符串操作相关的常量和函数。它主要用于处理字符串&#xff0c;包括字符集合、格式化操作和其他与字符串相关的功…

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

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

Echarts之yAxis属性超超超级详情版学习

yAxis 属性说明类型id组件idstringshow是否显示y轴booleanalignTicks在多个 y 轴为数值轴的时候&#xff0c;可以开启该配置项自动对齐刻度。只对value和log类型的轴有效booleanpositiony 轴的位置stringoffsetY 轴相对于默认位置的偏移&#xff0c;在相同的 position 上有多个…

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 日)…