【发布时间】:2016-08-25 14:27:50
【问题描述】:
有没有办法按文本字段对表格进行分组,考虑到该文本字段并不总是完全相同?
例子:
select city_hotel, count(city_hotel)
from hotels, temp_grid
where st_intersects(hotels.geom, temp_grid.geom)
and potential=1
and part=4
group by city_hotel
order by (city_hotel) desc
我得到的输出是预期的,例如,城市名称和计数:
"Vassiliki ";1
"Vassiliki";1
"Vassilias, Skiathos";1
"Vassilias";5
"Vasilikí";25
"Vasiliki";23
"Vasilias";1
但我想对这个字段进行更多分组,并且只获取一个“Vasiliki”(或一个包含所有内容的数组,这不是问题)和包含它们之间类似内容的所有单元格的计数。
我不知道这是否可能。也许一些文本分析或类似的功能?
【问题讨论】:
-
取决于文本字段的内容。您如何识别“集群”,即属于一起的那些不同的值?
-
这就是我期望 Postgres 做的事情。找到匹配它们的模式,然后连接。有可能还是科幻小说?
-
我手边没有 Postgres 实例,但我看到它支持 soundex:postgresql.org/docs/9.1/static/fuzzystrmatch.html。这有帮助吗?
-
@ppardoz 这可能不是科幻小说,但它也可能不会自动发生。请记住,对于数据库来说,这些名称只是一堆乱七八糟的字符,只有我们才能赋予这些东西以意义。例如,我自己无法判断
Vassiliki和Vassilias应该组合在一起。但是您可能想在信息检索的上下文中查找 stemming,这可能会对您有所帮助。 -
这肯定不是科幻。几年前,我使用来自(前面提到的)fuzzystrmatch 扩展的 levenstein 函数完成了它。您需要做的就是编写自己的,虽然非常简单的函数,它允许您输入相似度百分比作为参数,最后您将获得一个非常优雅和简单的查询。
标签: regex postgresql text-mining