我正在将一个项目从solr转换为cloudsearch,并且遇到一个问题,经过长时间搜索文档和网络后,我无法找到解决方法。我希望别人可以提供帮助。
我无法描述真实的细节,但我能找到的最接近我的问题的例子是抄袭检测。想象一下,已经将一堆已发布的文档加载到cloudsearch中,然后将业余文档作为查询来查看是否存在匹配。
给出一个索引文档 - 比如维基百科的暴龙页面:
与其他霸王龙一样,霸王龙是一种双足食肉动物 一条巨大的头骨,由长而重的尾巴平衡。
然后是业余文件:
我是食肉动物,我喜欢霸王龙,因为他也是一只双足食肉动物。
由于对项目很重要的原因,我正在创建有趣单词的分布,而不是用全文查询,例如:
carnivore: 2
tyrannosaurus: 1
我想更多地偏向于在维基百科文章中找到“食肉动物”一词,而不是“霸王龙”。
在solr中,我使用“^”运算符来增强查询,例如“食肉动物^ 2”。
根据我的发现,cloudsearch确实提升为“排名表达式”,但我没有发现任何类似于我的问题。
有什么想法吗?
答案 0 :(得分:1)
寻找Zipf定律(也有类似的称为Zipf-Mandelbrot定律,但更难实现)基本上它代表任何语言(特别是在每个特定领域),字频的分布服从Zipfs分配。您可以构建一个词频列表,将其排序以适应zipf分布,您可以从中调整分布参数并推断术语相关性。
根据您的问题,我了解到您正在实施某种类型的td-idf,这比这更先进。不幸的是,我认为你的问题更多的是计算机科学/语言问题,它需要的解释比我在这篇文章中可以写的更多。
我不使用cloudsearch(我也在自然语言处理项目中工作,但我不使用cloudsearch)但是查看我发现了http://docs.aws.amazon.com/cloudsearch/latest/developerguide/rankexpressions.html
您可以使用这些操作数构建zipf分布(或其任何自定义/风格),并为您的排名定义阈值。
这不是一个“干净的代码”答案,但我希望它会对你有帮助。