:)我试图在PostgreSQL 10.1中找到字符串的相似性。
我使用扩展名
unaccent
和
pg_trgm
并使他们能够:
create extension unaccent;
create extension pg_trgm;
问题是
pg_trgm
不提供utf8支持。因此,如果我执行:
select similarity('×פ×ר','×פ×ר');
它返回的相似性为零。
iso-8859-8
支持希伯来语和英语的编码,我在本例中使用的语言。
但首先我想
绳子,如果我有
×פ×ר - Æ
×פ×ר - f
因此,它将正确地转换为所需的字符编码。
所以
select unaccent('×פ×ר - Æ');
返回正确的结果。
不幸的是:
select convert(unaccent('×פ×ר - Æ'),'UTF8','ISO_8859_8');
返回
[42883]错误:函数转换(文本,未知,未知)不存在提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。职位:8
当我在
https://www.postgresql.org/docs/9.1/functions-string.html
关于
convert()
函数,它需要一个字符串。
如果我试着把某样东西当作弦,我会得到它
type "string" does not exist
好啊因此,使用uncent是我需要解决的第一个问题(也许是唯一的问题)。我接下来所做的是返回正确的结果,而没有看到正确的希伯来语字符串。
我的意思是。。
select convert('×פ×ר','UTF-8','ISO_8859_8');
返回
4 B 00000000 EB F4 E9 F8 ëôéø
并用
select convert('×פ×ר','UTF8','ISO_8859_8')::text;
返回
\xebf4e9f8
因此,如果我不使用重音并执行:
select similarity(convert('×פ××ר ×¢×ר','UTF8','ISO_8859_8')::text, convert('×פ×ר','UTF8','ISO_8859_8')::text);
它返回的相似性为0.5,这是正常的。
-
如何投
不相关
正确地使用它
convert
-
我是否正确地将utf-8希伯来语字符串转换为ASCII?
-
我是否试图以正确的方式解决这个问题?是否有支持utf-8的相似性函数的不同扩展?
-
在执行相似性函数之前,我还想从字符串中删除任何非字母数字的字符,以便根据需要获得更好的相似性结果。我考虑使用正则表达式将字符串转换为ASCII。比如:
regexp_replace('string', '\W+', '', 'g')
非常感谢。