Python Postgresql:子字符串匹配的Levenshtein编号
问题:我正在提取在长描述字段中具有术语“posthole”的行。这些经常拼错。我使用Levenshtein函数创建了一个字段来计算描述和术语“posthole”之间的差异,但它匹配整个字符串。我需要找到一种方法来修改它,以计算到最接近术语“posthole”的字符串的子字符串的距离 解决方案:我唯一能想到的是将字符串拆分为空格上的子字符串,并将每个子字符串与搜索词匹配。我只是想看看有没有人知道更好的方法Python Postgresql:子字符串匹配的Levenshtein编号,python,postgresql,levenshtein-distance,fuzzy-search,Python,Postgresql,Levenshtein Distance,Fuzzy Search,问题:我正在提取在长描述字段中具有术语“posthole”的行。这些经常拼错。我使用Levenshtein函数创建了一个字段来计算描述和术语“posthole”之间的差异,但它匹配整个字符串。我需要找到一种方法来修改它,以计算到最接近术语“posthole”的字符串的子字符串的距离 解决方案:我唯一能想到的是将字符串拆分为空格上的子字符串,并将每个子字符串与搜索词匹配。我只是想看看有没有人知道更好的方法 目前这是纯PostgreSQL,但如果有模块处理此问题,我可以将一些Python代码插入数据
目前这是纯PostgreSQL,但如果有模块处理此问题,我可以将一些Python代码插入数据库。您可以将字符串拆分为行:
with inputs (id, textcol) as (
values (1, 'this is a test of postole and some other posthole expressions'),
(2, 'just another posthole entry')
)
select id, word, levenshtein(upper(word), 'POSTHOLE')
from inputs
cross join lateral regexp_split_to_table(textcol, '\y') r(word)
where length(word) > 5
and levenshtein(upper(word), 'POSTHOLE') < 4
;
┌────┬──────────┬─────────────┐
│ id │ word │ levenshtein │
├────┼──────────┼─────────────┤
│ 1 │ postole │ 1 │
│ 1 │ posthole │ 0 │
│ 2 │ posthole │ 0 │
└────┴──────────┴─────────────┘
(3 rows)
输入(id,textcol)为(
值(1,'这是对postole和其他一些posthole表达式的测试'),
(2,‘只是另一个桩孔入口’)
)
选择id、word、levenshtein(上(word)、POSTHOLE)
从输入
交叉连接横向regexp\u split\u到表(textcol,'\y')r(word)
其中长度(字)>5
和levenshtein(上(字),“POSTHOLE”)<4
;
┌────┬──────────┬─────────────┐
│ 身份证件│ 单词│ 列文施坦│
├────┼──────────┼─────────────┤
│ 1.│ 后极│ 1.│
│ 1.│ 桩孔│ 0│
│ 2.│ 桩孔│ 0│
└────┴──────────┴─────────────┘
(3排)