ispell
ispell 词典
当前查看 PostgreSQL 18.6。
说明
ispell 词典
- 模板名称(tmplname)
- ispell
- 初始化函数(tmplinit)
- dispell_init
- 词法化函数(tmpllexize)
- dispell_lexize
手册定义
Ispell词典模板支持形态词典,它可以把一个词的许多不同语言学形式正规化为同一个词位。例如,一个英语 Ispell 词典可以匹配搜索词 bank 的所有变格和变位形式,例如 banking、banked、banks、banks' 和 bank's。
标准PostgreSQL发行版不包含任何Ispell配置文件。大量语言的词典可从Ispell获取。此外,还支持一些更现代的词典文件格式 — MySpell (OO < 2.0.1) 和Hunspell(OO >= 2.0.2)。在OpenOffice Wiki上有大量词典可用。
要创建一个Ispell词典,请执行以下步骤:
-
下载词典配置文件。OpenOffice扩展文件的扩展名是
.oxt。需要提取.aff和.dic文件,将扩展名改为.affix和.dict。对于某些词典文件,还需要使用下面的命令把字符转换成 UTF-8 编码(例如挪威语词典):iconv -f ISO_8859-1 -t UTF-8 -o nn_no.affix nn_NO.aff iconv -f ISO_8859-1 -t UTF-8 -o nn_no.dict nn_NO.dic
-
复制文件到
$SHAREDIR/tsearch_data目录 -
用下面的命令把文件载入到 PostgreSQL:
CREATE TEXT SEARCH DICTIONARY english_hunspell ( TEMPLATE = ispell, DictFile = en_us, AffFile = en_us, Stopwords = english);
这里,DictFile、AffFile和StopWords指定词典、词缀和停用词文件的基名。停用词文件的格式和前面解释的simple词典类型相同。其他文件的格式在这里没有指定,但是也可以从上面提到的网站获得。
Ispell 词典通常只能识别有限的词,因此其后应跟着另一个覆盖范围更广的词典;例如,一个 Snowball 词典,它可以识别所有输入。
Ispell的.affix文件具有下面的结构:
prefixes
flag *A:
. > RE # As in enter > reenter
suffixes
flag T:
E > ST # As in late > latest
[^AEIOU]Y > -Y,IEST # As in dirty > dirtiest
[AEIOU]Y > EST # As in gray > grayest
[^EY] > EST # As in small > smallest
.dict文件具有下面的结构:
lapse/ADGRS lard/DGRS large/PRTY lark/MRS
.dict文件的格式是:
basic_form/affix_class_name
在.affix文件中,每一个词缀标志以下面的格式描述:
condition > [-stripping_letters,] adding_affix
这里的条件具有和正则表达式相似的格式。它可以使用分组[...]和[^...]。例如,[AEIOU]Y表示词的最后一个字母是"y"并且倒数第二个字母是"a"、"e"、"i"、"o"或者"u"。[^EY]表示最后一个字母既不是"e"也不是"y"。
Ispell 词典支持划分复合词,这是一个有用的特性。注意词缀文件应该用compoundwords controlled语句指定一个特殊标志,用于标记词典中可以参与构成复合词的词:
compoundwords controlled z
下面是挪威语的一些示例:
SELECT ts_lexize('norwegian_ispell', 'overbuljongterningpakkmesterassistent');
{over,buljong,terning,pakk,mester,assistent}
SELECT ts_lexize('norwegian_ispell', 'sjokoladefabrikk');
{sjokoladefabrikk,sjokolade,fabrikk}
MySpell格式是Hunspell格式的一个子集。Hunspell的.affix文件具有下面的结构:
PFX A Y 1 PFX A 0 re . SFX T N 4 SFX T 0 st e SFX T y iest [^aeiou]y SFX T 0 est [aeiou]y SFX T 0 est [^ey]
一个词缀类的第一行是首部。首部后面列出了词缀规则的字段:
-
参数名(PFX 或者 SFX)
-
标志(词缀类的名称)
-
从该词的开始(前缀)或者结尾(后缀)剥离字符
-
增加词缀
-
和正则表达式格式类似的条件。
.dict文件看起来和Ispell的.dict文件相似:
larder/M lardy/RT large/RSPMYT largehearted
注意
MySpell 不支持复合词。Hunspell则对复合词有更好的支持。当前,PostgreSQL只实现了 Hunspell 中基本的复合词操作。
文档与源码
来源构建
- 版本
- 18.6
- 构建
- https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
- 来源指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f
版本比较
PostgreSQL 17 → 18: 无变化。
比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。
相关条目
导出 JSON · 返回全文检索组件 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。