当前位置:编程学习 > C#/ASP.NET >>

批量文档相似度比对,TFIDF算法

正在做一个批量文档比对器,核心的需求就是判断给定的文档是否是抄袭的,以及多个文档中找出哪些是抄袭的。通过判定相似度的大小在用户要求的相似度之上则为抄袭。目前采用TF-IDF算法已经能够做到两两比较得到相似度。遇到的唯一的问题是:假如,用户设定的相似度是40%,A抄袭B,C,D,E,F,G各10%,通过TF-IDF算法得出的结论是A没有抄袭,这显然是违背了用户的需求,想了几天依然没有好的解决方案,请大家帮帮忙,给建议,不胜感激! --------------------编程问答--------------------
引用楼主  的回复:
遇到的唯一的问题是:假如,用户设定的相似度是40%,A抄袭B,C,D,E,F,G各10%,通过TF-IDF算法得出的结论是A没有抄袭,这显然是违背了用户的需求


不懂你说什么。 --------------------编程问答-------------------- 就是,假如A写了一篇文章,但是在这篇文章中有10%的内容是从B的文章中抄袭的,同样从C,D,E,F,G的文章中各抄袭10%;从相似度的角度来说A分别和C,D,E,F,G有10%相似度,问题就是,怎么样从相似度的角度去证明A的文章是抄袭的?? --------------------编程问答-------------------- 你打算用什么依据来判定抄袭。。我觉得设定某阈值,A和语料库中逐一TFIDF,超过阈值则累加如结果,最后结果高于设定值则判定抄袭。 --------------------编程问答--------------------
引用 3 楼  的回复:
A和语料库中逐一TFIDF

怎么逐一TFIDF,请详细说下。最初的想法是通过设置相似度的阀值去判断,但上述情况肯定可以规避这种判断方法 --------------------编程问答--------------------
引用 4 楼  的回复:
引用 3 楼  的回复:

A和语料库中逐一TFIDF

怎么逐一TFIDF,请详细说下。最初的想法是通过设置相似度的阀值去判断,但上述情况肯定可以规避这种判断方法


我觉得你弄错了一件事。你把「照一篇抄」和「东抄西抄」搞混了。相似度只是针对两个语料之间,是一对一,不是一对多。一对多再Σ是没有意义的,不然所有文章都在互相抄袭,因为都有相同的文字出现。要解决你的问题你只能判断比如超过5%(阈值1)算抄袭,那么A分别抄袭了C、D、E、F、G(假设都是10%),那么A的content里面有10%×5=50%的内容非原创,超过了40%(阈值2),判定抄袭。。
阈值1可以简单的等于阈值2÷语料数量。

现在稍微动点脑子的抄袭都不会原样了,基本都会改头换面,统计词频我个人感觉意义不大。。 --------------------编程问答--------------------
引用 5 楼  的回复:
我觉得你弄错了一件事。你把「照一篇抄」和「东抄西抄」搞混了。相似度只是针对两个语料之间,是一对一,不是一对多。一对多再Σ是没有意义的,不然所有文章都在互相抄袭,因为都有相同的文字出现……

       考虑过这种做法,但还是有个问题,假如,A,B,C,D,E,F,G均从H中抄袭10%,且抄袭的内容相同;其余内容均是原创的,用您刚才说的那种做法就会被认定为抄袭。您说的那种做法确实能够将东拼西凑出来的文档认定为抄袭,但同时有些应属于原创(相似度小于用户设置的阀值)的文档被误认为抄袭。
      单纯的统计词频意义确实不大,但它能做到两两比较,判断相似度,来判断这两个文档是否是抄袭的,能不能这个算法的基础上做些改进,使之能够做到一对多的比较

--------------------编程问答-------------------- 。。考虑多了。。 --------------------编程问答-------------------- B,C,D,E,F,G合为一篇来对比 --------------------编程问答-------------------- TFIDF的方法只能是算一个权重,比较文本相似度最常用的是计算余弦值,利用权重来建模型 --------------------编程问答--------------------
引用 9 楼  的回复:
TFIDF的方法只能是算一个权重,比较文本相似度最常用的是计算余弦值,利用权重来建模型

  可能我没说太明白,是用您说的方法求余弦值来作为相似度,这也只能是两两比较,做不到【批量】 --------------------编程问答--------------------
引用 8 楼  的回复:
B,C,D,E,F,G合为一篇来对比

  谢谢,是个思路,我试试看效果怎么样 --------------------编程问答-------------------- 怎么就沉下去了
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,