查询postgresql DB列中使用的所有语言的列表

时间:2017-11-29 18:58:25

标签: postgresql utf-8

我有一个可以包含任何语言的列。是否可以获取该列中表示的所有语言的列表。例如,如果我的列包含以下行:

  • 您好,你好吗?
  • こんにちは,元気ですか?
  • Salut评论allez-vous?

我希望我的查询能够返回英语,日语和法语(或者语言的合理指示)。

注意事项:

  • 我的数据库是UTF8。
  • 单个单元格通常只包含1种语言,但可以混合使用。
  • 该解决方案最好使用本机postgresql工具。

1 个答案:

答案 0 :(得分:1)

据我所知,大多数数据库管理系统(包括PostgreSQL)只知道字符集,而不是语言。由于许多语言共享字符而很少有包含自己独有的字符,因此通过检查特定字符的存在来尝试确定任何准确度的语言是不切实际的。如果不是不可能的话。

您的问题的真正挑战在于独家使用本机PostgreSQL工具。 PostgreSQL支持extensions

  

PostgreSQL旨在轻松扩展。因此,加载到数据库中的扩展可以像内置的功能一样运行。

但是,到目前为止,我还没找到一个涉及人类语言的人。有可能利用PostgreSQL扩展框架编写自己的。

如果您真的非常渴望尝试使用PostgreSQL本地解决方案,我想您可以尝试在user-defined function中实现语言检测算法。关于如何完成这项任务的描述超出了这个答案的范围。

然而,我的第一个倾向是设置ETL(提取,转换,加载)管道,该管道适用于您的语言字段,确定其语言,并写入一系列表格,一个索引。每次ETL系统检测到尚未看到的语言时,它都会将其添加到语言表中,该表对语言名称和/或ISO 639 code具有唯一约束。然后,多对多关系表将您的源语言记录与检测到的语言代码记录相关联。

我可能会尝试使用可供您选择的语言的第三方库(例如:  {}适用于Python)或第三方服务(例如langdetect)。该文档详细说明了Google Translation API

的无痛使用
  

您可以使用以下格式的网址发送HTTP请求来检测文本字符串的语言:https://translation.googleapis.com/language/translate/v2/detect

对于第三方服务,您可能需要付费帐户,具体取决于您的数据量。批量API请求将是有益的。对于图书馆和服务,我还会尝试通过阅读文档,查找用户报告和评论以及运行我自己的实证测试来确定结果的平均准确度。