举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > PostgreSQL fuzzystrmatch

PostgreSQL fuzzystrmatch

2023-06-09 00:31

 PostgreSQL fuzzystrmatch

F.15.1. Soundex
F.15.2. Levenshtein
F.15.3. Metaphone
F.15.4. 双 Metaphone

fuzzystrmatch模块提供多个函数来判断字符串之间的相似性和距离。

小心

当前,soundexmetaphonedmetaphonedmetaphone_alt函数使用多字节编码(例如 UTF-8)下工作得不好。

这个模块被视为trusted,就是说,它可由在当前数据库上拥有CREATE特权的非超级用户安装。

F.15.1. Soundex

语音表示法系统是一种将相似发音的名字转换成相同的代码来匹配它们的方法。这最初由美国国家统计局在 1880 年、1900 年和 1910 年使用。注意语音表示法对于非英语名称不是很有用。

fuzzystrmatch模块提供了两个函数用于语音表示法代码:

soundex(text) 返回 text
difference(text, text) 返回 int

soundex函数将一个字符串转换成它的语音表示法代码。difference函数将两个字符串转换成它们的语音表示法代码并且接着报告能匹配代码位置的数量。由于语音表示法代码具有四个字符,结果可以从零到四,零表示没有匹配而四表示完全匹配(因此这个函数的命名并不适当 — similarity才是更合适的名称)。

这里有一些例子:

SELECT soundex("hello world!");

SELECT soundex("Anne"), soundex("Ann"), difference("Anne", "Ann");
SELECT soundex("Anne"), soundex("Andrew"), difference("Anne", "Andrew");
SELECT soundex("Anne"), soundex("Margaret"), difference("Anne", "Margaret");

CREATE TABLE s (nm text);

INSERT INTO s VALUES ("john");
INSERT INTO s VALUES ("joan");
INSERT INTO s VALUES ("wobbly");
INSERT INTO s VALUES ("jack");

SELECT * FROM s WHERE soundex(nm) = soundex("john");

SELECT * FROM s WHERE difference(s.nm, "john") > 2;

F.15.2. Levenshtein

这个函数计算两个字符串之间的编辑距离。

levenshtein(text source, text target, int ins_cost, int del_cost, int sub_cost) 返回 int
levenshtein(text source, text target) 返回 int
levenshtein_less_equal(text source, text target, int ins_cost, int del_cost, int sub_cost, int max_d) 返回 int
levenshtein_less_equal(text source, text target, int max_d) 返回 int

source以及target都可以是任何非空字符串, 最长为 255 个字符。代价参数分别指定一个字符插入、删除或替换的开销。 你可以像这个函数的第二种版本那样忽略代价参数,那样它们都会默认为 1。

levenshtein_less_equal是 Levenshtein 函数的速度更快 的版本,它被用于只对小距离感兴趣的情况。如果实际距离小于等于max_d, 那么levenshtein_less_equal返回正确的距离。否则它返回某个 大于max_d的值。如果 max_d是负值,那么其行为等同于 levenshtein

例子:

test=# SELECT levenshtein("GUMBO", "GAMBOL");
 levenshtein
-------------
           2
(1 row)

test=# SELECT levenshtein("GUMBO", "GAMBOL", 2,1,1);
 levenshtein
-------------
           3
(1 row)

test=# SELECT levenshtein_less_equal("extensive", "exhaustive",2);
 levenshtein_less_equal
------------------------
                      3
(1 row)

test=# SELECT levenshtein_less_equal("extensive", "exhaustive",4);
 levenshtein_less_equal
------------------------
                      4
(1 row)

F.15.3. Metaphone

和 Soundex 相似,Metaphone 的思想是构建一个输入字符串的一种代码。如果两个字符串具有相同的代码则认为它们相似。

这个函数计算一个输入字符串的变音位代码:

metaphone(text source, int max_output_length) 返回 text

source必须是一个非空字符串,最大长度为 255 个字符。max_output_length设置输出的变音位代码的最大长度,如果超长,输出会被截断到这个长度。

例子:

test=# SELECT metaphone("GUMBO", 4);
 metaphone
-----------
 KM
(1 row)

F.15.4. 双 Metaphone

双变音位系统为一个给定输入字符串计算两个听起来像的字符串 — 一个主要代码和一个次要代码。在大部分情况下它们是相同的,但是对于非英语名称它们可能有一点不同,这取决于发音。这些函数计算主要和次要代码:

dmetaphone(text source) 返回 text
dmetaphone_alt(text source) 返回 text

对输入字符串没有长度限制。

例子:

test=# SELECT dmetaphone("gumbo");
 dmetaphone
------------
 KMP
(1 row)


阅读全文
以上是鳄鱼CMS为你收集整理的 PostgreSQL fuzzystrmatch全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  •  PostgreSQL pgstattuple

    PostgreSQL pgstattuple

    2023-04-20

    F.30.1. 函数 pgstattuple模块提供多种函数来获得元组层的统计信息。由于这些函数返回详细的页面级信息,因此默认访问权限是受限...

  • oracle distinct 用法 Oracle Distinct用法

    oracle distinct 用法 Oracle Distinct用法

    2023-05-18 Oracle教程

    SELECTDISTINCT可以用来过滤结果集中的重复行,确保SELECT子句中返回指定的一列或多列的值是唯一的。本文将为大家带来SELECT...

  • sqlwhere多个条件 SQL WHERE 子句

    sqlwhere多个条件 SQL WHERE 子句

    2023-06-03 MySQL教程

    SQL WHERE 子句WHERE 子句用于过滤记录。SQL WHERE 子句 WHERE 子句用于提取那些满足指定标准的记录。 SQL WHER...

  • sql 操作符 SQL LIKE 操作符

    sql 操作符 SQL LIKE 操作符

    2023-06-09 MySQL教程

    SQL LIKE 操作符LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。SQL LIKE 操作符 LIKE 操作符用于在 WHERE 子句中...

  •  SQL CREATE TABLE 语句

    SQL CREATE TABLE 语句

    2023-06-20 MySQL教程

    SQL CREATE TABLE 语句SQL CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表。 表由行和列组成,每个表都必须有个表名...

© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们