本教程将介绍如何使用机器学习技术(如word2vec和余弦相似度等),在Python中用几行代码制作抄袭检测器。搭建完成后,抄袭检测器将会从文件中载入学生们的作业,然后通过计算相似度来判断学生有无相互抄袭行为。

要求

本教程需要在计算机上安装scikit-learn。

安装

pip install -Uscikit-learn

怎样分析文本?

如你所知,电脑只能理解0和1。首先需要将文本转换成数字再对文本数据进行计算。

词嵌入

将文本数据转换为数字阵列的过程通常称为词嵌入(word embedding),我们将使用sci-kit-learn内置功能来完成此任务。

将文本数据转换为矢量不是随机过程,而是遵循某些算法,从而将单词表示为空间中的位置。这一点将通过使用scikit-learn内置功能来实现。

怎样检测文档的相似性?

这里需要使用向量、点积的基本概念来确定两个文本的相似度,也就是计算学生的文本作业的向量代表之间的余弦相似度值。

此外还需要学生作业中的样本文档来测试模型。文本文件必须与脚本位于同一目录中,扩展名为“.txt”。文件目录如下:

.

├──app.py

├── fatma.txt

├── image.png

├── john.txt

└──juma.txt

一起来搭建抄袭探测器

· 首先载入所有必要的模块

import os

from sklearn.feature_extraction.text import TfidfVectorizer

from sklearn.metrics.pairwise import cosine_similarity

使用OS模块加载文本文件的路径,然后使用TfidfVectorizer对文本数据和余弦相似度执行词嵌入,来计算是否存在抄袭。

· 用列表推导式(List Comprehension)读取所有文本文件

接下来使用列表推导式来加载项目目录中所有的路径文件,如下:

student_files =[doc for doc in os.listdir() if doc.endswith( .txt )]

· 使用Lambda功能来向量化并计算相似性。

需要创建两个lambda函数,一个用来将文本转换成数字数组,另一个用来计算它们的相似性。

vectorize =lambda Text: TfidfVectorizer().fit_transform(Text).toarray()

similarity = lambda doc1, doc2:cosine_similarity([doc1, doc2])

· 将文本数据向量化

加入下列两行代码,将加载的学生文件向量化:

vectors =vectorize(student_notes)

s_vectors = list(zip(student_files,vectors))

创造一个计算相似性的功能。下面是脚本的主要功能,负责管理计算学生之间相似度的整个过程。

def check_plagiarism():

plagiarism_results = set()

global s_vectors

for student_a, text_vector_a in s_vectors:

new_vectors=s_vectors.copy()

current_index = new_vectors.index((student_a,text_vector_a))

del new_vectors[current_index]

for student_b , text_vector_b in new_vectors:

sim_score =similarity(text_vector_a, text_vector_b)[0][1]

student_pair= sorted((student_a, student_b))

score = (student_pair[0], student_pair[1],sim_score)

plagiarism_results.add(score)

return plagiarism_results

Let’s print plagiarism results

for data in check_plagiarism():

print(data)

· 最终代码

完成上述所有操作后会得到如下脚本,可以检测学生作业中是否存在抄袭行为。

import os

from sklearn.feature_extraction.text import TfidfVectorizer

from sklearn.metrics.pairwise import cosine_similarity

student_files = [doc for doc in os.listdir() if doc.endswith( .txt )]

student_notes=[open(File).read() for File in student_files]

vectorize = lambda Text:TfidfVectorizer().fit_transform(Text).toarray()

similarity = lambda doc1, doc2: cosine_similarity([doc1,doc2])

vectors = vectorize(student_notes)

s_vectors= list(zip(student_files, vectors))

def check_plagiarism():

plagiarism_results = set()

global s_vectors

for student_a, text_vector_a in s_vectors:

new_vectors=s_vectors.copy()

current_index = new_vectors.index((student_a,text_vector_a))

del new_vectors[current_index]

for student_b , text_vector_b in new_vectors:

sim_score =similarity(text_vector_a, text_vector_b)[0][1]

student_pair= sorted((student_a, student_b))

score = (student_pair[0], student_pair[1],sim_score)

plagiarism_results.add(score)

return plagiarism_results

for data in check_plagiarism():

print(data)

· 输出:

运行上述app.py,结果如下:

$ python app.py#

__________RESULT ___________

( john.txt , juma.txt , 0.5465972177348937)

( fatma.txt , john.txt , 0.14806887549598566)

( fatma.txt , juma.txt , 0.18643448370323362)

抄袭检测器完成啦!老师们用起来,广大中小学生们的美梦就此结束了。

python文章抄袭检测_中小学生的噩梦:怎样用Python检测抄袭行为?广大中小学生们的美梦就此结束...相关推荐

  1. python文章抄袭检测_翟天临的噩梦:怎样用Python检测抄袭行为?

    全文共3168字,预计学习时长8分钟 图源:Google 本教程将介绍如何使用机器学习技术(如word2vec和余弦相似度等),在Python中用几行代码制作抄袭检测器.搭建完成后,抄袭检测器将会从文 ...

  2. python文章抄袭检测_怎样用Python检测抄袭行为?广大中小学生们的美梦就此结束...

    原标题:怎样用Python检测抄袭行为?广大中小学生们的美梦就此结束 本教程将介绍如何使用机器学习技术(如word2vec和余弦相似度等),在Python中用几行代码制作抄袭检测器.搭建完成后,抄袭检 ...

  3. 读芯术python讲得怎么样_翟天临的噩梦:怎样用Python检测抄袭行为?

    本教程将介绍如何使用机器学习技术(如word2vec和余弦相似度等),在Python中用几行代码制作抄袭检测器.搭建完成后,抄袭检测器将会从文件中载入学生们的作业,然后通过计算相似度来判断学生有无相互 ...

  4. 基于python的移动物体检测_感兴趣区域的移动物体检测,框出移动物体的轮廓 (固定摄像头, opencv-python)...

    感兴趣区域.特定区域.框出移动物体的轮廓.越界检测.入侵物体检测.使用 opencv-python库的函数cv2.findContours.cv2.approxPolyDP.cv2.arcLength ...

  5. python 知乎美女_知乎大神用Python爬取高颜值美女(爬虫+人脸检测+颜值检测)

    原标题:知乎大神用Python爬取高颜值美女(爬虫+人脸检测+颜值检测) 1 数据源 知乎话题『美女』下所有问题中回答所出现的图片 2 抓取工具 Python 3,并使用第三方库 Requests.l ...

  6. python混合编程 优点_很好的c++和Python混合编程文章

    1. 一个有一个参数的例子 python文件 #Filename test2.py def Hello(s): print "Hello, world!" print s cpp文 ...

  7. 经典python项目源码_建议收藏,22个Python迷你项目(附源码)

    在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项目的目的及提示, ...

  8. python迷你停车管理系统_建议收藏,22个Python迷你项目(附源码)

    在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项目的目的及提示, ...

  9. numpy是python标准库吗_吐血 整理!140种Python标准库、第三方库和外部工具都有了...

    Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连接.数 ...

  10. python线上课堂_线上线下相结合的Python编程教学

    线上线下相结合的 Python编程教学 朱军强 广东省韶关市乳源瑶族自治县桂头中学 ,广东 韶关 512736 摘要:Python编程教学是初中信息课堂教学的重要组成模块,高质量的Python编程教学 ...

最新文章

  1. VB.NET 快速向Excel写入大量数据
  2. 两道关于JS的小考题(闭包与中间件)
  3. 数据结构与算法 | 计数排序
  4. 国科大高级人工智能-总结
  5. python高阶函数、map reduce 自己如何去定义_小猿圈python之高阶函数lambda、map和reduce用法...
  6. win10下openpose1.5安装
  7. 以太坊Dapp项目-网页钱包开发手册
  8. 苹果和虫子(信息学奥赛一本通-T1038)
  9. 蓝牙耳机测试软件apk_蓝牙耳机弹窗app下载-蓝牙耳机弹窗软件v3.1.0安卓版_5577安卓网...
  10. 开发日记(01) - uni-app 使用等宽字体对齐数字宽度
  11. 夏天什么适合做引流产品?夏天用什么东西做引流的产品
  12. 这几本值得你一看再看的程序员素养必备好书
  13. 基于pytorch的双模态数据载入
  14. ECLISPE的快捷键大全
  15. 力扣(1053.115)补9.13
  16. 【数据增强】用cv2旋转图像并自定义填充背景颜色(主要用到cv2.getRotationMatrix2D 和 cv2.warpAffine)
  17. NVIDIA Jetson Nano/Xavier NX 扩容教程
  18. linux下程序被Killed
  19. 2020-10-30
  20. 2017第十届成都国际照明及LED展览会会刊(参展商名录)

热门文章

  1. CF724G. Xor-matic Number of the Graph
  2. 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_1 请求参数绑定入门
  3. 我在 B 站学习深度学习(生动形象,跃然纸上)
  4. IT部门域事件与业务分析
  5. STUCTS LABLE ‘S BENEFIT
  6. linux源代码阅读笔记 高速缓冲区管理
  7. 快排算法的非递归实现
  8. android ExpandableListView详解
  9. ASP.NET 页面传值方法的一些事情儿。
  10. linux——文件操作