注册 登录
编程论坛 VFP论坛

关于字符串相似度问题

dbf永动机 发布于 2023-09-16 09:27, 829 次点击
现有一个dbf表在附件:
只有本站会员才能查看附件,请 登录


姓名xm,考场kc,答案ans 三列

答案是由1248码组成的,1=A,2=B,4=C,4=8,还有一些多选题用的是符号代替,这些都不重要,只是为了介绍一下。

现在我想找到的是雷同答案的考生,但是如果仅仅用 ans,count(*)计数的话,只是很简单的找到完全相同的ans串,如果考生作弊的话应该不会这么傻的完全抄的和别人一模一样,ans里面一共有23个字符,假设有3个或以内的字符答案不一样,剩下的都一样,就算雷同,那么如何找打这样的雷同考生呢?

cs表中现在有两个人一模一样的答案,还有两个考生的答案相似,大家可以试一试。

以上是对所有考生的查询,但是考试过程中是有考场的概念的,如果不在一个考场的考生,那么即便答案一样或相似,也不算雷同,只要相同考场中的雷同答案的考生,何如查询呢?

以上两个问题,请大家分别给出查询代码。
15 回复
#2
cssnet2023-09-16 11:59
对学校业务不熟。楼主,这样吧,你先公布你反复思考之后的答案,然后,咱老狐狸们再帮你改。

#3
laowan0012023-09-16 16:06
很像大学论文查重
#4
dbf永动机2023-09-16 17:49
回复 2楼 cssnet
我现在还没有思路
#5
schtg2023-09-17 07:42
回复 楼主 dbf永动机
我的笨办法的思路是:同考场内,两两比较答案中相同位置相同答案字符个数的多少来判断,可以使用两个循环来解决:一个是循环记录,一个是循环比较记录中的答案字符,这个运算量应该不小哦。

[此贴子已经被作者于2023-9-17 07:46编辑过]

#6
xuminxz2023-09-17 07:52
1、你的答案数据结构是什么样的?
2、如果人工判断,什么样的叫有作弊嫌疑?
#7
cssnet2023-09-17 09:34
以下是引用dbf永动机在2023-9-16 09:27:20的发言:

……只是为了介绍一下。
……大家可以试一试。
……以上两个问题,请大家分别给出查询代码。


楼主如此表述,感觉上,就好像是讲台上的老师,居高临下在给台下的学生们出考题。
潜台词就好像是:
“老师我已有了标准答案,同学们且试一试吧,看能否答对?”
呵呵。
#8
csyx2023-09-17 10:14
永动机老师,我的作业如下
程序代码:
Close Databases
Use cs
Select kc from cs group by kc into array aGrp
Select xm, kc, Cast('' as V(50)) as suspect from cs where .f. into cursor result Readwrite

For m.ii = 1 to Alen(m.aGrp)
    Select cs
    Scan all for kc == m.aGrp[m.ii]
        Scatter name oRec
        m.oRec.ans = 0h + m.oRec.ans
        Select xm, Bitxor(m.oRec.ans, 0h+ans) as op, Cast(0 as I) as diff ;
            from cs where (kc == m.oRec.kc) and !(xm == m.oREc.xm) ;
            into cursor temp Readwrite
        Update temp set diff = Len(op) - Occurs(0h00, op)
        Select xm, diff from temp where diff <= 3 order by diff into cursor temp
        If Reccount('temp') > 0
            m.cc = ''
            Scan all
                m.cc = m.cc + Textmerge(',<<Alltrim(xm)>>(不同:<<diff>>)')
            EndScan
            insert into result (xm, kc, suspect) Values (m.oRec.xm, m.oRec.kc, Substr(m.cc,3))
        EndIf
    EndScan
EndFor

Use in temp
Use in cs
Select result
Locate
Browse


[此贴子已经被作者于2023-9-17 10:15编辑过]

#9
schtg2023-09-18 05:36
回复 8楼 csyx
#10
z126892023-09-18 10:18
回复 8楼 csyx
厉害  
#11
dbf永动机2023-09-22 08:39
回复 8楼 csyx
好几天没来了,感谢你的代码,我回头试一下
#12
dbf永动机2023-09-25 08:35
回复 8楼 csyx
代码可以运行,非常感谢你
#13
dbf永动机2023-09-25 14:49
回复 8楼 csyx
干的不错啊,别人给我的代码只查出6个人,你的代码查出12个人
#14
吹水佬2023-09-25 21:05
vfp的SOUNDEX()、DIFFERENCE()函数与字符串相似性有关
#15
dbf永动机2023-09-26 09:02
回复 14楼 吹水佬
difference可以比较两个字段的相似度,但是这里指的是比较一个字段里面的和其他人的字符串相似度,可以用到这个吗?
#16
吹水佬2023-09-28 21:18
回复 15楼 dbf永动机
如果适用的话按SOUNDEX()排序一下看看
1