问答 / 0 / 29 / 创建于 2年前
项目中,需要对上传的试卷题目与题库中的试题数据进行查重检测,题库中的数据可能有上百万条,有没有什么好的算法或者解决方案来实现查重?
查重规则:对比的两道题中,中文连续7个字重复即为重复,需对重复的内容进行标记。
能够实现问题描述的功能,由于是内网,需要自己实现查重功能,无法使用开放平台接口的方案。
当时做过一个作业查重,即老师布置的作业,不同学生可能拿某个作业稍微改改就提交了,甚至不改就提交了。
主要用的到的算法是SimHash 。
丢到队列慢慢查了吧。数据没有特征库吗
@deatil 搜索引擎吗?目前用的meilisearch
百万题库量不算大啊,不行就蛮干吧 从第一题开始,每7个字建立一个编码,0000000001=>'ABCDEFG' ,后面每道题的7个字先查询在插入,查询存在的话,标记,按平均每道题40~50字计算,这也就每道题40来个编码,总计4000来万数据。。。
每道题平均0.05s处理时间,这算很慢的吧,也就10多个小时跑完了,晚上跑起第二天就好了
@Yolver 。。。假如你的编码表叫dicts,提交30道题,
这是小项目蛮干的做法,前提是题量不大,码值表可以用redis如果是论文查重那样字多量大就不行了
是不是可以利用判断量给字符串的相似度去做:PHP两个字符串相似度
买个论文查重系统吧
es
es分词吗?现在项目里用的meilisearch
不过这个,的确和论文查重,一个道理。 有些程序 真正牛逼的不是应用。而是应用背后的技术。
能用redis吗?redis keys *1234567*
100 万条答案,每条 800 字,每连续 7 个字哈希一下记录到位图,大约需要 1000000 * 800 位,也就 100 MB 内存。
不过哈希会冲突,你可以加大内存,或者记录以下原始的 7 个字做一下冲突处理。
按照你们查重规则对题库进行分词,用杰卡德相似度系数计算下
我要举报该,理由是:
当时做过一个作业查重,即老师布置的作业,不同学生可能拿某个作业稍微改改就提交了,甚至不改就提交了。
主要用的到的算法是SimHash 。
丢到队列慢慢查了吧。数据没有特征库吗
百万题库量不算大啊,不行就蛮干吧 从第一题开始,每7个字建立一个编码,0000000001=>'ABCDEFG' ,后面每道题的7个字先查询在插入,查询存在的话,标记,按平均每道题40~50字计算,这也就每道题40来个编码,总计4000来万数据。。。
是不是可以利用判断量给字符串的相似度去做:PHP两个字符串相似度
买个论文查重系统吧
es
不过这个,的确和论文查重,一个道理。 有些程序 真正牛逼的不是应用。而是应用背后的技术。
能用redis吗?redis keys *1234567*
100 万条答案,每条 800 字,每连续 7 个字哈希一下记录到位图,大约需要 1000000 * 800 位,也就 100 MB 内存。
不过哈希会冲突,你可以加大内存,或者记录以下原始的 7 个字做一下冲突处理。
按照你们查重规则对题库进行分词,用杰卡德相似度系数计算下