1
haiyang416 2014-07-27 09:36:44 +08:00
好奇葩的需求,既然评论和选项是挂钩的,我觉得就不应该考虑随即选项。
|
2
bufannao OP @haiyang416 随机选项是为了不让用户记忆性答题,评论功能也是必要的需求
大家帮帮忙,试试这个问题能否解决。 |
3
haiyang416 2014-07-27 09:41:52 +08:00
@bufannao 你的思路又问题,防止记题的方法应该加大题目量,然后随即选题,而不是随即选项。
|
4
bufannao OP @haiyang416 不要纠结思路问题了吧,问题中的场景只是举个例子,实际需求就是类似问题这样,不一定是选择题,用选择题举例形象一些
|
5
raincious 2014-07-27 09:48:38 +08:00 2
看不出这个机制实现的意义。
如果需要实现的话,只能进行绑定。 首先,所有的答案都记录一个唯一标识(AID)。 然后写一个解析器(Javascript)来实时解析用户的输入并且给出选项让用户进行确认(确认真的是提到了那个选项),当检测到用户提及答案选项的时候(ABCD),将输入绑定在这个AID上(相当于“提到”功能,只是没有@符号,这也是难的地方)。 读取的时候,先取出问题和答案列,然后根据评论绑定的AID来再次解析用户输入,将内容替换到对应答案的友好序号。 你想通过纯后台实现目前个人感觉是不可能的,除非你能通过PHP这样缓慢的脚本语言来实现语言分析。 |
6
RemRain 2014-07-27 09:56:56 +08:00
我觉得这个问题可能无解,因为评论是用户对自己看到的现象的描述,而每个人看到的现象都是不一样的。比如人家评论了这么一条: I think a is not a right answer.
|
7
RemRain 2014-07-27 09:58:22 +08:00
或者这么一条:“答案不应该是C么。。。A_A”
|
8
bufannao OP @RemRain 下面的正则能处理一些情况,但还不够
$_relation = array('A'=>'#1','B'=>'#2",'C'=>'#3','D'=>'#4'); $comment = preg_replace( array( '/([^A-Za-z0-9\“\”]+|^)\s*([a-eA-E\、\.\,\,\s]+)\s*([^A-Za-z0-9\“\”]+?|$)/iuesm', ), array( "'\$1'.(((strpos('$question', '\$2') === FALSE AND substr_count('$comment', '\$2') < 3) OR (strpos('$question', substr('\$1', -1).'\$2'.substr('\$3', 0, 1)) === FALSE AND preg_match('/(解析*|答案*|排*除|正确|对|错误*|选|项|是)/iues', '\$1\$2\$3'))) ? strtr(strtoupper('\$2'), $_relation) : '\$2').'\$3'", ), $comment ); |
10
RemRain 2014-07-27 10:23:41 +08:00 1
I think a is not a right answer. -> I think D is not D right answer.
答案不应该是C么。。。A_A -> 答案不应该是B么。。。C_C 再来一条:I think the first answer is not right. 人对于同一现象的描述可以有很多种,你的需求保持语义不变,进行转换。但语义的分析程序很难达到大脑的程度,例如,“答案A”对应的说法有 第一个答案、第一个、第1个、first、1st、A(全角)、A(半角)等,很难进行枚举 |
11
foxwoods 2014-07-27 10:30:10 +08:00 1
需求包括以下两点:
1. 随机选项 每次显示的时候选项是随机变化的 2. 评论功能 评论中对选项有引用,在评论显示的时候引用随选项变化 第1点需求,把选项存数据库的时候不要按选项序号(ABCDE),而是按与序号无关的id存,把加序号的逻辑放在显示的部分就可以了。 第2点需求比较复杂,不容易做好。像 @raincious 说的一样,相当于“提到”功能。我觉得可以这样做: 1. 设计一种语法来引用选项,类似微博上的@, #, YouTube上的时间,因为有明确的格式以后不容易产生歧义。比如,可以用 [A] 来引用当前题目的选项A。 2. 在数据库存评论内容的时候,先保存用户输入的原文。 3. 用之前定义的引用选项的语法规则解析评论原文,得到当前上下文内,选项序号和选项ID的对应关系列表,把这个列表存到数据库 4. 在显示评论内容时,取出第2步和第3步的数据,再加上随机显示序号的逻辑,就可以显示出正确的评论了。 |
12
rming 2014-07-27 10:39:59 +08:00 1
楼上分析的这么复杂。。。
|
13
bufannao OP @foxwoods 是的,分析用户的评论是难点,“设计一种语法来引用选项" 这个之前也想过,但是这个从用户体验上考虑怎么让用户习惯呢?比如在V2的回复框中,怎么让用户自己输入时把A B C D变成[A] [B] [C] [D]
|
15
foxwoods 2014-07-27 11:11:24 +08:00
@bufannao
我觉得,不应该是这样: 让用户自己输入时把A B C D变成[A] [B] [C] [D] 应该是这样: 让用户习惯输入[A] [B] [C] [D] 可以参考新浪微博和Twitter的@和#,Google Plus的+和# |
16
bufannao OP @rming 打乱和保留索引这是需求的一部分,实现较容易。在这个基础上还要把用户的评论根据索引关系提取出索引(选项)关键字,涉及语意,这个难度大,一直没搞定。
|
17
raincious 2014-07-27 11:18:19 +08:00
|
18
wavingclear 2014-07-27 11:21:48 +08:00 via Android 1
做题时随机选项
评论和看评论时用固定选项 反正做题的时候不能看评论,看了不就泄露答案了。 |
19
bufannao OP |
20
jianghu52 2014-07-27 11:35:04 +08:00
评论这个部分已经涉及到了语境分析的问题了。这个东西除非有库配合,否则的话单靠php语言来分析,基本不太可能产生比较 [像人话] 的评论
|
21
wavingclear 2014-07-27 11:37:31 +08:00 via Android
@bufannao 评论完刷新一下页面发现自己说的啊ABCD被系统给“改”了这个变化似乎更不适XDD
如果允许评论下跟贴(楼中楼那种)用户会更混乱 个人认为用户可以理解答题时随机打乱选项这件事,很难理解评论奇怪的输入选项的方式。 答题时扭一下大家还是会回答,评论时别扭了那评论率不就少很多。 |
22
wavingclear 2014-07-27 11:40:07 +08:00 via Android
答题时换一个符号系统用数字,或者直接不显示ABCD,在网页上点击。
|
23
dongk 2014-07-27 12:33:03 +08:00
这个功能的设计有问题,基于有问题的设计去考虑算法没有意义。
|
25
barbery 2014-07-27 13:48:11 +08:00
我觉得楼上有几个答案不错啊,评论的时候ABCD不要让用户输入,而是通过按钮让用户引用某个选项,每个答案的选项都有主键id,只要引用把id带上,在输出题目的时候,打乱下选项,把打乱后的选项存起来,输出评论时做下正则替换。。。
|
26
zungmou 2014-07-27 14:25:52 +08:00
每个选项 A, B, C, D 都对应一个编号,例如: 1, 2, 3, 4,保存评论的同时,对评论内容作替换,只记录 1, 2, 3, 4 编号,加载答案时,再替换回来。无论怎么随机,都可以呈现。
|
27
imn1 2014-07-27 16:55:23 +08:00
无解,因为评论是自由发言,如果不是写“答案A有问题”,而是写“第一个答案有问题”呢?类推……
建议写/显示评论有固定的顺序,且与答题分开,就是答题时随机其他时候固定 而且答题前或答题中显示评论本来就有违“闭卷”原则 |
28
solupro 2014-07-27 17:53:07 +08:00
|
29
solupro 2014-07-27 17:59:35 +08:00
想了想,能不能换个思路。用户评论不是归属哪个题目,而且归属哪题的哪个选项。
|
30
barbery 2014-07-27 19:23:11 +08:00
@solupro 不行,因为一个讨论里面会引用超过1个选项。。。
对于这类问题只能把搅局者排除掉或者写多点正则尽可能的适配多的类型。。 |
32
micate 2014-07-27 20:18:00 +08:00
思路:
1. 用户发表评论并提交时,一并提交用户看到的答案顺序(A -> 0001,B -> 002 ...); 2. 后端接收到评论后,对该评论按照用户看到的顺序进行替换:A -> 0001,B -> 0002 ...; 3. 输出评论到前台时,根据当前答案的顺序,比如 A -> 0002,B -> 0001,再将字母替换回来; 这个输入和输出可能都需要些辅助字符:如用户输入的可能并不是 A,而是 #A;替换为的并不是 0001,而是有特殊前后缀的,比如 __0001__,只是为了可以分隔有效字符。 同时可以结合前后端检测,比如当用户输入了系统可能分辨不出来的选项时,可以提示用户一些输入规范。 针对用户会感觉混乱的问题: 可以鼠标滑过 A、B 的时候,浮框显示 A、B 对应的答案,这需要替换的时候,包裹一些辅助标签,如 <span data-option="0001">A</span> |
33
kmvan 2014-07-28 09:04:52 +08:00 via Android 1
输入框弄个 abcd 按钮,让用户写答案评论时需要引用的选项点按钮引用,按钮输出 #a 这样。输出到前台的时候自动替换呗!这个我想应该是最优解决方案
|
34
hisway 2014-07-28 09:41:02 +08:00 1
1,引导用户使用#A,@A之类的方式对某个选项评论
2,提交评论时保存下当前选项顺序 3,随机时根据顺序替换#A,@A之类评论内容 |