按类似词汇分组

时间:2016-08-25 14:27:50

标签: regex postgresql text-mining

有没有办法按文本字段对表进行分组,计算出这个文本字段并不总是完全相同?

示例:

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" (或者包含所有的数组,这不是问题)以及包含它们之间类似内容的所有单元格的计数。

我不知道这是否可行。也许某些功能可以用于文本分析或类似的东西?

1 个答案:

答案 0 :(得分:1)

SELECT COUNT(*), `etc` FROM table GROUP BY textfield LIKE '%sili%'; 

// The '%' is a SQL wildcard, which matches as many of any character as required.

你可以做上面这样的事情,为'喜欢'选择一个单词。最适合用户使用的拼写。

可以帮助解决的问题是

SELECT COUNT(*), textfield FROM table GROUP BY textfield ORDER BY textfield;

选择最平均的'拼写你的话。 否则你开始进行一些语言处理,为此你需要在SQL之外编写一些代码。

这就像https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance

查找在任意误差范围内相同的单词。

这里有一个MySQL实现,您应该能够根据需要进行转置 https://stackoverflow.com/a/6392380/1287480

(credit https://stackoverflow.com/a/3515291/1287480

(关于该主题的个人想法)

你真的想要考虑限制用户的输入,这些用户可以首先解决这个问题。为用户提供一个可供选择的地方列表,远比推动潜在的“肮脏”地方要好得多。信息到你的数据库。最终总是随着你试图在以后清理信息而结束。一个让很多人受雇多年的问题。