- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经为数周的时间而苦苦挣扎,寻找在逻辑上和技术上最好的方法,同时尝试以连续、轮换的方式匹配 2 个大型文本集。
一方面,我们有歌曲及其歌词(约 3000 万行文本,每行约 1000 个字符),另一方面,我们有歌曲歌词类别(约 20K,每行约 50 个字符)。歌词类别指的是歌曲的内容。
每首歌都应该被分配到一个或多个类别,在我看来,这只能通过比较每个类别中的单词与歌曲歌词的相关性来完成,然后是选择具有最高全文搜索分数的那个(或超过 1 个类别,对于具有相同最高分数的那些),同时考虑同义词、词干提取、停用词以及适当的全文搜索引擎的所有附加功能。如果您有更好的方法来解决这个问题,请不要犹豫给我提示。
举个例子,根据歌词,歌曲“Unchained Melody”应该归入以下类别:
它的歌词确实包含了该类别(它的整个路径)中包含的所有这些词,包括它们的变形和同义词,多次,所以这个类别的文本应该与歌曲的文本相比排名很好。
所以问题是使用哪种可能的方法将所有这些类别文本与所有这些歌曲文本匹配?
请记住,自然地,如今每天都会发布数千首歌曲,而且类别也在不断变化/改进,甚至有可能发生根本性变化。
到目前为止,我已经尝试了以下方法:
保存类别的 SQL Server 2014,链接到在其全文索引中保存歌词文本的 Sphinx 搜索引擎。基于这些构建的应用程序对单首歌曲文本执行 20K 次查询(即,获取每个类别与歌曲文本的相关性),选择排名最好的结果。这意味着要匹配所有歌曲的 20K * 30M 查询。当然,这在 40 核机器 + 256 GB RAM 上需要很长时间,到那时,会有新歌,并且可能会更改/更新类别结构。
这个很有趣:保存歌词的 SQL Server 2014,链接到保存类别文本的 Sphinx。为每首歌曲匹配类别的查询是通过将歌曲文本拆分为单词创建的,在它们之间使用“或”运算符,如果在一行中找到更多单词(包含类别文本及其完整文本),则结果排名更高小路)。结果:速度更快,因为每首歌曲只有 1 个大查询才能获得其排名靠前的类别,但速度仍然不够快,而且准确性稍差。
同时保存歌词和类别的 SQL Server 2014,启用全文搜索,同时使用第一种方法(没有 Sphinx,只有 SQL 的 FT)在最初由第二种方法产生的一组有限类别上方法(同样,没有 Sphinx,只有 SQL 的 FT),一切都分成数百个异步批处理的工作。所以,它是以上两者的结合。结果:更准确,并赋予它全部的力量,更快一点,但仍然不够我认为可能的。匹配所有歌曲和歌词大约需要 3 天。
如果您有任何其他想法可供我尝试,我将不胜感激。我对准确性 (40%) 和速度 (60%) 很感兴趣,而且我真的觉得有更简单的方法来完成这项工作。
最佳答案
就我个人而言,我可能会坚持使用您的 1. 但有两个改进
批量更新,而不是简单地为每个类别/文档组合运行一个查询。每个类别运行一个查询 - 并获得所有文档的结果。更少的大查询。您可以进行一些优化以使这些“大”查询更加高效。
Delta 更新,而不是每个周期,只是运行“完整”过程,定期使用一个单独的较小的特定系统。知道如何运行更有针对性的更新以避免重复工作的人。例如:
您添加一个新类别,只需运行其大查询即可找到该类别的文档。删除的类别只会删除记录。对类别的“编辑”可以是先删除再插入。
新文档,也可以是一个特殊的 sphinx 索引,它只包含新文档(一个 main+delta 索引系统可能已经提供了!)。然后针对这个小得多的增量索引运行每个类别的主查询。
...更聪明地工作,而不是更努力地工作
关于c# - 匹配大型文本数据集——如何更快地匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29357028/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!