【发布时间】:2020-05-31 03:34:00
【问题描述】:
我想知道使用 Python 和 PSQL 数据库进行字符串匹配的最佳方法是什么。我的数据库包含酒吧名称和邮政编码。我想检查是否有意见指的是同一个酒吧,但拼写错误。
从概念上讲,我正在考虑遍历所有名称,并且对于同一邮政编码中的每一行,使用strsim 获取字符串相似度度量。如果该指标高于阈值,我将其插入另一个存储匹配候选者的 SQL 表中。
我认为我效率低下。在“伪代码”中,拥有 pub_table、candidates_table 并使用 JaroWinkler 函数,我的意思是:
from similarity.jarowinkler import JaroWinkler
jarowinkler = JaroWinkler()
cursor = conn.cursor()
cur.execute("SELECT name, zip from pub_table")
rows = cur.fetchall()
for r in rows:
cur.execute("SELECT name FROM pub_tables WHERE zip = %s", (r[1],))
search = cur.fetchall()
for pub in search:
if jarowinkler.similarity(r[0], pub[0]) > threshold:
insertion = ("INSERT INTO candidates_table (name1, name2, zip)
VALUES (%s, %s, %s)")
cur.execute(insertion, (r[0], pub[0], zip))
cursor.close ()
conn.commit ()
conn.close ()
如果不清楚,我很抱歉(这里是新手)。任何使用 PSQL 和 Python 进行字符串匹配的指导都将受到高度赞赏。谢谢你。
【问题讨论】:
-
distance_metric的代码在哪里? -
请将其视为一个给定的功能(为了完整起见,我正在使用 Jaro-Winkler 进行编辑)。我的挣扎在于我认为效率低下的配对过程。谢谢,蒂姆。
-
以防万一您不限于 Jaro-Winkler 距离 - PostgreSQL 在其
fuzzystrmatch模块中内置了对 Levenshtein 距离的支持。 -
谢谢,尤金!我打算用几个字符串距离度量来尝试它。您可能拥有的有关 SQL 中字符串匹配最佳实践的任何 cmets 或指导都会非常有用。
标签: python psycopg2 psql string-matching