算法:通过数据库从字符串中提取关键字

标签 algorithm postgresql solr information-extraction

例如我们有以下字符串。 “甲壳虫乐队 - 想象” 此外,我们在 PostgreSQL 中有大量艺术家姓名列表。

鉴于该字符串,我想使用我的数据库来识别艺术家。

我正在寻找最优化、最快速的算法/技术来执行此操作。因此遍历数据库中的所有记录并查找子字符串是不适用的。

字符串可以是“Imagine - The beatles”、“Imagine, The Beatles”。就像 Youtube 视频中的歌曲名称一样。

Solr、ElasticSearch 或其他技术在这里会有帮助吗? 会喜欢一些极客的建议。

最佳答案

这个问题有两个部分。困难的部分是识别艺术家和标题。你有各种各样的变化:

  • 甲壳虫乐队 - 想象一下
  • 甲壳虫乐队 - 想象
  • 想象 - 甲壳虫乐队
  • 甲壳虫乐队,想象一下
  • 想象一下,甲壳虫乐队
  • 想象一下 - 甲壳虫乐队

其他也会包含相册:

  • 想象 - 想象 - 甲壳虫乐队

如果您将这些随机混合在一起,那么您将很难处理它 - 将这些数据规范化为字段将需要一个包含“轨道名称”和“艺术家姓名”的数据库来尝试匹配有很多猜测。

我会做的是忽略整个困惑并将其扔给全文搜索引擎。

test=> select to_tsvector('simple', 'Beatles, The - Imagine');
           to_tsvector           
---------------------------------
 'beatles':1 'imagine':3 'the':2
(1 row)

test=> select to_tsvector('simple', 'Beatles, The - Imagine') @@ to_tsquery('simple', 'Beatles');
 ?column? 
----------
 t
(1 row)

如果您能够将其转换为字段分隔的规范化数据,您的搜索将变得更加强大,因为您可以使用 setweightts_rank 对字段进行加权匹配, tsvector|| 等的连接

关于算法:通过数据库从字符串中提取关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199457/

相关文章:

php - 类似于Axis X, Y - 需要检查多个值,怎么办?

postgresql - 一个 sql 脚本是只被 PostgreSQL 服务器接受,还是被服务器和客户端 psql 接受?

solr - 如何可扩展地实现诸如 Google 警报之类的功能?

database - 是否可以更改 PostgreSQL 连接的事件用户?

html - SQL语句用多个where条件更新多列

exception - 为什么这种情况一直发生? Solr OutOfMemoryError GC超出开销限制

search - Solr高亮

algorithm - 反转并合并链表

java - 从 AVL 树中删除示例代码

根据动态优先级显示结果的算法