使用非精确测量(模糊逻辑)查找一系列数据

ada*_*101 7 sql sql-server algorithm fuzzy-search sql-server-2008

这是一个更复杂的后续问题:查找顺序值的有效方法

每个产品可以有许多Segment行(数千).每个段的位置列从每个产品(1,2,3,4,5等)开始为1,列可以包含任何值,如(323.113,5423.231,873.42,422.64,763.1等). ).数据是只读的.

将产品视为歌曲并将片段视为歌曲中的一组音符可能会有所帮助.

给定一个连续片段的子集,如歌曲的片段,我想确定产品的潜在匹配.但是,由于测量潜在的错误,子集中的片段可能匹配数据库中的部分正好.

如何通过查找与我测量的细分子集最匹配的产品细分来识别候选产品?此外,数据库是此类数据的最佳媒介吗?

-

以下是关于我如何解决这个问题的一些想法.请不要将这些作为确切要求.我对任何类型的算法都持开放态度,以使这项工作尽可能最好.我认为需要有多个阈值变量来确定贴近度.一种可能性是实现接近阈值和匹配阈值.

例如,给定以下值:

Product A contains these segments: 11,21,13,13,15.
Measurement 1 has captured: 20,14,14,15.
Measurement 2 has captured: 11,21,78,13.
Measurement 3 has captured: 15,13,21,13,11.
Run Code Online (Sandbox Code Playgroud)

如果接近度阈值所允许的测量段为1以上或实际段的下方,然后测量1可能因为尽管许多段不匹配匹配产品A 完全相同,它们相对于实际值的接近度阈值内.

如果匹配阈值允许匹配为3或更多的测量,则测量2可以返回产品A,因为尽管其中一个段(78)远远超过接近阈值,但它仍然以正确的顺序匹配3个段,因此在匹配门槛.

测量3与产品A不匹配,因为尽管所有测量的段都存在于实际段中,但它们不在接近或匹配阈值内.

更新:其中一个答案要求我定义最接近匹配的意思.我不确定如何回答这个问题,但我会试着通过继续这首歌的比喻来解释.假设片段代表录制歌曲的最大频率.如果我再次录制同一首歌,它会有相似之处,但是由于背景噪音和录音设备的其他限制,有些频率会匹配,有些会很接近,有些会很接近.在这种情况下,您如何定义一个录音与另一个录音"匹配"的时间?这是我正在寻找在这个问题中使用的相同类型的匹配逻辑.

mcd*_*lla 1

如果您以歌曲为例,一种方法是将您的输入归结为位向量指纹,然后在数据库中查找该指纹​​作为完全匹配。您可以通过从输入中提取多个指纹和/或尝试例如距离您的指纹仅 1 个或位错误的所有位向量来增加找到良好匹配的机会。

如果您有权访问 ACM 数字图书馆,则可以在“Shazam 音乐识别服务”中阅读此类方法的说明,网址为 acm=1321038137_73cd62cf2b16cd73ca9070e7d5ea0744">http://delivery.acm.org/10.1145/1150000/1145312/ p44-wang.pdf?ip=94.195.253.182&acc=ACTIVE%20SERVICE&CFID=53180383&CFTOKEN=41480065& acm =1321038137_73cd62cf2b16cd73ca9070e7d5ea0744.还有一些信息http://www.music.mcgill.ca/~阿拉斯泰尔/621/porter11fingerprint-summary .pdf

您描述的输入格式表明您可以使用http://en.wikipedia.org/wiki/Locality_sensitive_hashing中描述的随机投影方法执行某些操作。

要回答第二个问题,根据位置对应的具体内容,您可以考虑将数字归结为由位或字符组成的哈希指纹,并将它们存储在文本搜索数据库中,例如 Apache Lucene。