Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 算法:通过数据库从字符串中提取关键字_Algorithm_Postgresql_Solr_Information Extraction - Fatal编程技术网

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

Algorithm 算法:通过数据库从字符串中提取关键字,algorithm,postgresql,solr,information-extraction,Algorithm,Postgresql,Solr,Information Extraction,例如,我们有以下字符串。 “披头士-想象一下” 另外,我们在PostgreSQL中有一个巨大的艺术家名单 给定那个字符串,我想使用我的数据库识别艺术家 我正在寻找最优化、最快速的算法/技术来实现这一点。所以迭代数据库中的所有记录并寻找子字符串是不适用的 弦乐可以是“想象-披头士”,“想象,披头士”。就像Youtube视频中的歌曲名称一样 Solr、ElasticSearch或其他技术是否有帮助? 我希望能得到一些极客的建议。这个问题有两个部分。困难的部分是确定艺术家和头衔。你有各种各样的变化:

例如,我们有以下字符串。 “披头士-想象一下” 另外,我们在PostgreSQL中有一个巨大的艺术家名单

给定那个字符串,我想使用我的数据库识别艺术家

我正在寻找最优化、最快速的算法/技术来实现这一点。所以迭代数据库中的所有记录并寻找子字符串是不适用的

弦乐可以是“想象-披头士”,“想象,披头士”。就像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)

如果您能够将其转换为字段分隔的规范化数据,您的搜索将变得更加强大,因为您可以使用
setweight
ts_rank
tsvector
|
串联等方法对字段进行加权匹配,如果数据库中的任何记录都可能包含搜索字符串,则必须搜索数据库中的所有记录


您可以使用类似的工具同时搜索大量相同长度的搜索字符串:“甲壳虫乐队”,“甲壳虫乐队”。如果你忽略空格和/或标点符号,那么你也许可以减少更多的传球次数:“披头士”,“披头士,the”,“披头士the”。如果你只计算字母,克雷格·林格答案中的所有例子的长度都是相同的;你可以使用拉宾·卡普(Rabin Karp)

以及“披头士乐队”.呃。。。s/披头士/约翰·列侬