Python을 사용하여 텍스트의 표절을 검사하는 방법

소개


안녕하십니까,
이 강좌에서 우리는 몇 줄 코드에서 기계 학습 기술(예를 들어word2vec와 여현의 유사성)을 사용하여 Python에서 표절 검출기를 만드는 방법을 배울 것이다.

개요


일단 완성되면, 우리의 표절 검측기는 문서에서 학생들의 숙제를 불러온 다음, 유사도를 계산하여 학생들이 서로 표절했는지 여부를 확정할 수 있을 것이다.

요구 사항


이 강좌를 완성하기 위해서는 기계에scikitlearn을 설치해야 합니다.

설치


pip install -U scikit-learn

우리는 어떻게 텍스트를 분석합니까?


우리는 컴퓨터가 0과 1만 이해할 수 있다는 것을 알고 있다. 텍스트 데이터에 대한 계산을 하기 위해서는 텍스트를 숫자로 바꾸는 방법이 필요하다.

텍스트 포함


텍스트 데이터를 디지털 그룹으로 변환하는 과정을 통상적으로 문자 삽입이라고 부른다.
텍스트 데이터의 벡터를 벡터로 바꾸는 것은 무작위 과정이 아니라 일부 알고리즘을 따라 문자를 공간의 한 위치로 표시한다.우리는 scikit 학습 내장 기능을 사용하여 이 점을 실현할 것이다.

우리는 어떻게 문서의 유사성을 검사합니까?


여기서 우리는 벡터의 기본 개념, 점적을 사용하여 학생 텍스트 작업의 벡터 표시 간의 여현 유사성 값을 계산하여 두 텍스트의 유사도를 확정할 것이다.

그 밖에 학생 숙제가 있는 샘플 텍스트 문서가 필요합니다. 우리는 모델을 테스트할 때 사용할 것입니다.
텍스트 파일은 스크립트와 같은 디렉터리에 있어야 합니다. 확장자는 입니다.txt, 이 강좌에서 사용한 예시 텍스트 파일을 사용하고 싶다면download here
프로젝트 디렉터리는 다음과 같이 해야 한다
.
├── 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
    
    우리는 운영체제 모듈을 사용하여 텍스트 파일을 불러오는 경로를 사용하고 TfidfVectorizer는 텍스트 데이터에 단어를 삽입하고 여현 유사도를 사용하여 표절을 계산합니다.
  • 목록을 사용하여 모든 텍스트 파일 읽기
  • 목록 이해의 개념을 사용하여 프로젝트 디렉터리에 있는 모든 경로 텍스트 파일을 불러옵니다. 아래와 같습니다.
    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
    Lets 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)
    
  • 출력:
  • 상술한 응용 프로그램을 실행하면py 출력은 다음과 같습니다.
    $ python app.py
    ​
    #__________RESULT ___________
    ('john.txt', 'juma.txt', 0.5465972177348937)
    ('fatma.txt', 'john.txt', 0.14806887549598566)
    ('fatma.txt', 'juma.txt', 0.18643448370323362)
    
    방금 Python으로 표절 탐지기를 제작한 것을 축하합니다. 이제 동갑내기와 공유해서 공유해 주십시오.
    만약 어떤 평론, 건의, 어려움이 있다면, 그것을 아래의 평론 상자에 넣으십시오. 저는 가능한 한 빨리 당신에게 회답할 것입니다.
    original article 에서 찾을 수 있습니다.

    kalebujordan。통신 / 카레브


    이것은 여현의 유사성을 사용하여 텍스트 문서의 표절을 검사하는 간단한 항목이다


    표절 검사자Python


    이 보고서는python 스크립트의 원본 코드로 구성되어 있으며, 여현 유사성을 사용하여 텍스트 문서의 표절을 검사하는 데 사용됩니다
    Plagiarism-checker-Python

    이거 어떻게 하는 거예요?


    텍스트 데이터에 대한 표절 검사를 어떻게 하는지 알고 싶을 수도 있지만, 생각보다 복잡하지 않다.
    우리는 모두 컴퓨터가 숫자에 뛰어나다는 것을 알고 있기 때문에 두 텍스트 문서 간의 유사성을 계산하기 위해 텍스트 원시 데이터는 벡터 = > 디지털 수조로 변환된 다음에 우리는 기본 지식 벡터를 사용하여 그것들 간의 유사성을 계산할 것이다.
    본 환매 협의는 이 점을 어떻게 하는지에 관한 기본적인 예시를 포함하고 있다.

    입문


    이 리포의 코드를 사용하기 시작하려면 이 리포를 복제하거나 기계에 다운로드해야 합니다. 아래와 같습니다.
    $->git 클론https://github.com/Kalebu/Plagiarism-checker-Python

    의존항


    네가 놀기 전에...

    좋은 웹페이지 즐겨찾기