• 拼写校正
拼写校正
拼写校正也被称为:
自动校正
文字校正
修正拼写错误
错误容忍度
“您是想说...?”
等,是一种软件功能,旨在为您输入的文本提供替代建议或进行自动修正。拼写校正的概念可以追溯到1960年代,当时计算机科学家 Warren Teitelman(也发明了“撤销”命令)提出了一种名为 D.W.I.M.(Do What I Mean,做我想做的)的计算哲学。Teitelman 认为,计算机不应只接受格式完全正确的指令,而应被编程为能识别明显的错误。
第一个众所周知的提供拼写校正功能的产品是微软在1993年发布的 Word 6.0。
工作原理
拼写校正可以通过几种方式实现,但需要注意的是,没有纯编程的方法可以高质量地将输入错误的“ipone”转换为“iphone”。拼写校正通常需要一个数据集,系统可以基于该数据集进行处理。数据集可以是:
正确拼写单词的字典,该字典可以:
基于您的实际数据。这个思路是,在大多数情况下,基于您的数据构建的字典拼写是正确的,系统会尝试找到与输入单词最相似的单词(稍后我们将讨论如何使用 Manticore 来实现此目的)。
或者可以基于与您的数据无关的外部字典。这里可能会出现的问题是,您的数据和外部字典可能相差太大:字典中可能缺少某些单词,而您的数据中也可能缺少一些字典中的词。
不仅仅基于字典,还可以基于上下文,例如,“white ber”会被修正为“white bear”,而“dark ber”会被修正为“dark beer”。上下文不仅可能是查询中的邻近单词,还可以是您的位置、时间、当前句子的语法(是否将“there”改为“their”),您的搜索历史以及几乎任何其他可能影响您意图的因素。
另一种经典的方法是使用先前的搜索查询作为拼写校正的数据集。这在自动补全功能中得到了更多应用,但在自动校正中也同样有意义。其思想是,用户的拼写大多数时候是正确的,因此我们可以使用他们的搜索历史中的词汇作为事实依据,即使我们的文档中没有这些词,或者我们使用了外部字典。上下文感知在这里也可以起作用。
Manticore 提供了模糊搜索选项,并且可以使用 CALL QSUGGEST
和 CALL SUGGEST
命令来实现自动拼写校正。
模糊搜索
模糊搜索功能允许在匹配时考虑轻微的拼写变化或错误。它与正常的 SELECT
SQL 语句或 /search
JSON 请求类似,但提供了额外的参数以控制模糊匹配行为。
注意:
fuzzy
选项需要 Manticore Buddy。如果它不起作用,请确保 Buddy 已安装。
通用语法
SQL
注意:通过 SQL 进行模糊搜索时,MATCH
子句不应包含任何全文操作符,仅应包含要匹配的单词。
SQL:
带有额外过滤器的更复杂模糊搜索查询示例:
JSON
注意:如果使用 query_string,请注意它不支持全文操作符。查询字符串应仅包含您希望匹配的单词。
选项
fuzzy
:打开或关闭模糊搜索。distance
:设置用于匹配的 Levenshtein 距离。默认值为2
。layouts
:检查键盘布局是否存在输入错误。默认情况下,使用所有布局。使用空字符串''
(SQL) 或数组[]
(JSON) 关闭此功能。支持的布局包括:be
- 比利时 AZERTY 布局bg
- 标准保加利亚布局br
- 巴西 QWERTY 布局ch
- 瑞士 QWERTZ 布局de
- 德国 QWERTZ 布局dk
- 丹麦 QWERTY 布局es
- 西班牙 QWERTY 布局fr
- 法国 AZERTY 布局uk
- 英国 QWERTY 布局gr
- 希腊 QWERTY 布局it
- 意大利 QWERTY 布局no
- 挪威 QWERTY 布局pt
- 葡萄牙 QWERTY 布局ru
- 俄语 JCUKEN 布局se
- 瑞典 QWERTY 布局ua
- 乌克兰 JCUKEN 布局us
- 美国 QWERTY 布局
链接
关于模糊搜索和自动补全的博客文章 - https://manticoresearch.com/blog/new-fuzzy-search-and-autocomplete/
CALL QSUGGEST, CALL SUGGEST
这两个命令可以通过 SQL 使用,并支持查询本地(普通和实时)和分布式表。语法如下:
这些命令根据给定单词从字典中提供所有建议。它们仅适用于启用了 infixing 和 dict=keywords 的表。返回建议的关键字、建议的关键字与原始关键字之间的 Levenshtein 距离以及建议关键字的文档统计。
如果第一个参数包含多个单词,则:
CALL QSUGGEST
只返回最后一个单词的建议,忽略其余的单词。CALL SUGGEST
只返回第一个单词的建议。
这就是它们之间的唯一区别。支持几个选项用于自定义:
limit
返回前 N 个匹配项
5
max_edits
仅保留 Levenshtein 距离小于或等于 N 的字典单词
4
result_stats
提供找到的单词的 Levenshtein 距离和文档数量
1 (启用)
delta_len
仅保留长度差小于 N 的字典单词
3
max_matches
要保留的匹配数
25
reject
被拒绝的单词是那些不优于已在匹配队列中的单词的匹配项。它们会放入一个被拒绝的队列中,如果实际有一个单词可以进入匹配队列,则重置该队列。该参数定义了被拒绝队列的大小(作为 reject*max(max_matched,limit))。如果被拒绝队列已满,系统将停止查找潜在匹配项
4
result_line
显示数据的替代模式,按每行返回所有建议、距离和文档数量
0
non_char
不跳过带有非字母符号的字典单词
0 (跳过此类单词)
sentence
返回原句并将最后一个单词替换为匹配的单词
0 (不返回完整句子)
为了展示其工作原理,让我们创建一个表并向其中添加一些文档。
单词示例
如您所见,拼写错误的单词 "crossbUdy" 被更正为 "crossbody"。默认情况下,CALL SUGGEST/QSUGGEST
返回:
distance
- Levenshtein 距离,表示将给定单词转换为建议单词所需的编辑次数docs
- 包含建议单词的文档数量
要禁用这些统计信息的显示,您可以使用选项 0 as result_stats
。
示例:
CALL SUGGEST takes only the first word
如果第一个参数不是一个单词而是多个单词,那么 CALL SUGGEST
只会返回第一个单词的建议。
示例:
CALL QSUGGEST takes only the last word
如果第一个参数不是一个单词而是多个单词,那么 CALL SUGGEST
只会返回最后一个单词的建议。
示例:
添加 1 as sentence
会使 CALL QSUGGEST
返回整个句子,并将最后一个单词更正。
不同的显示模式
1 as result_line
选项改变了输出中建议的显示方式。它不再将每个建议显示在单独的一行中,而是将所有建议、距离和文档统计信息显示在一行中。以下是一个示例来演示这一点:
示例:
演示
这个互动课程 展示了
CALL SUGGEST
如何在一个小型 Web 应用中工作。
最后更新于