Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Python untuk NLP: Bagaimana untuk menyusun dan mengklasifikasikan teks secara automatik dalam fail PDF?

Python untuk NLP: Bagaimana untuk menyusun dan mengklasifikasikan teks secara automatik dalam fail PDF?

王林
王林asal
2023-09-28 09:12:161380semak imbas

Python for NLP:如何自动整理和分类PDF文件中的文本?

Python untuk NLP: Bagaimana untuk menyusun dan mengklasifikasikan teks secara automatik dalam fail PDF?

Abstrak:
Dengan perkembangan Internet dan pertumbuhan maklumat yang pesat, kami berhadapan dengan sejumlah besar data teks setiap hari. Dalam era ini, secara automatik menyusun dan mengklasifikasikan teks telah menjadi semakin penting. Artikel ini akan memperkenalkan cara menggunakan Python dan fungsi pemprosesan bahasa semula jadi (NLP) yang berkuasa untuk mengekstrak teks secara automatik daripada fail PDF, menyusun dan mengelaskannya.

1. Pasang perpustakaan Python yang diperlukan

Sebelum kita mula, kita perlu memastikan bahawa perpustakaan Python berikut dipasang:

  • pdfplumber: digunakan untuk mengekstrak teks daripada PDF.
  • nltk: untuk pemprosesan bahasa semula jadi.
  • sklearn: untuk pengelasan teks.
    Boleh dipasang menggunakan arahan pip. Contohnya: pip install pdfplumber

2. Ekstrak teks daripada fail PDF

Pertama, kita perlu menggunakan perpustakaan pdfplumber untuk mengekstrak teks daripada fail PDF.

import pdfplumber

def extract_text_from_pdf(file_path):
    with pdfplumber.open(file_path) as pdf:
        text = ""
        for page in pdf.pages:
            text += page.extract_text()
    return text

Dalam kod di atas, kami mentakrifkan fungsi yang dipanggil extract_text_from_pdf untuk mengekstrak teks daripada fail PDF yang diberikan. Fungsi ini menerima laluan fail sebagai parameter dan membuka fail PDF menggunakan perpustakaan pdfplumber, kemudian melelang melalui setiap halaman melalui gelung dan mengekstrak teks menggunakan kaedah extract_text().

3. Prapemprosesan teks

Sebelum pengelasan teks, biasanya kita perlu mempraproses teks. Ini termasuk langkah-langkah seperti penyingkiran perkataan henti, tokenisasi, stemming, dsb. Dalam artikel ini, kami akan menggunakan perpustakaan nltk untuk menyelesaikan tugasan ini.

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import SnowballStemmer

def preprocess_text(text):
    # 将文本转换为小写
    text = text.lower()
    
    # 分词
    tokens = word_tokenize(text)
    
    # 移除停用词
    stop_words = set(stopwords.words("english"))
    filtered_tokens = [word for word in tokens if word not in stop_words]
    
    # 词干提取
    stemmer = SnowballStemmer("english")
    stemmed_tokens = [stemmer.stem(word) for word in filtered_tokens]
    
    # 返回预处理后的文本
    return " ".join(stemmed_tokens)

Dalam kod di atas, kita mula-mula menukar teks kepada huruf kecil dan kemudian menggunakan kaedah word_tokenize() untuk menandakan teks. Seterusnya, kami menggunakan pustaka stopwords untuk mengalih keluar perkataan stop dan SnowballStemmer untuk stemming. Akhir sekali, kami mengembalikan teks yang telah diproses.

4. Klasifikasi Teks

Sekarang kami telah mengekstrak teks daripada fail PDF dan memprosesnya terlebih dahulu, kami boleh menggunakan algoritma pembelajaran mesin untuk mengklasifikasikan teks. Dalam artikel ini, kami akan menggunakan algoritma Naive Bayes sebagai pengelas.

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

def classify_text(text):
    # 加载已训练的朴素贝叶斯分类器模型
    model = joblib.load("classifier_model.pkl")
    
    # 加载已训练的词袋模型
    vectorizer = joblib.load("vectorizer_model.pkl")
    
    # 预处理文本
    preprocessed_text = preprocess_text(text)
    
    # 将文本转换为特征向量
    features = vectorizer.transform([preprocessed_text])
    
    # 使用分类器预测文本类别
    predicted_category = model.predict(features)
    
    # 返回预测结果
    return predicted_category[0]

Dalam kod di atas, kami mula-mula memuatkan model pengelas Naive Bayes terlatih dan model beg-of-words menggunakan perpustakaan joblib. Kami kemudian menukar teks praproses kepada vektor ciri dan kemudian menggunakan pengelas untuk mengklasifikasikan teks. Akhir sekali, kami mengembalikan hasil klasifikasi teks yang diramalkan.

5 Sepadukan kod dan proses fail PDF secara automatik

Kini, kami boleh menyepadukan kod di atas dan memproses fail PDF secara automatik, mengekstrak teks dan mengklasifikasikannya.

import os

def process_pdf_files(folder_path):
    for filename in os.listdir(folder_path):
        if filename.endswith(".pdf"):
            file_path = os.path.join(folder_path, filename)
            
            # 提取文本
            text = extract_text_from_pdf(file_path)
            
            # 分类文本
            category = classify_text(text)
            
            # 打印文件名和分类结果
            print("File:", filename)
            print("Category:", category)
            print("--------------------------------------")

# 指定待处理的PDF文件所在文件夹
folder_path = "pdf_folder"

# 处理PDF文件
process_pdf_files(folder_path)

Dalam kod di atas, kami mula-mula menentukan fungsi yang dipanggil process_pdf_files untuk memproses fail secara automatik dalam folder PDF. Kemudian, gunakan kaedah listdir() pustaka os untuk beralih melalui setiap fail dalam folder, ekstrak teks fail PDF dan klasifikasikannya. Akhir sekali, kami mencetak nama fail dan keputusan klasifikasi.

Kesimpulan

Menggunakan fungsi Python dan NLP, kami boleh mengekstrak teks dengan mudah daripada fail PDF dan menyusun serta mengelaskannya. Artikel ini menyediakan kod sampel untuk membantu pembaca memahami cara memproses teks secara automatik dalam fail PDF, tetapi senario aplikasi tertentu mungkin berbeza dan perlu dilaraskan dan diubah suai mengikut situasi sebenar.

Rujukan:

  • pdfdokumen rasmi tukang paip: https://github.com/jsvine/pdfplumber
  • nltk dokumen rasmi: https://www.nltk.org/
  • sklearn dokumen rasmi: https://scikit - belajar.org/

Atas ialah kandungan terperinci Python untuk NLP: Bagaimana untuk menyusun dan mengklasifikasikan teks secara automatik dalam fail PDF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn