Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan teknologi pengekstrakan ciri teks dalam Python?

Bagaimana untuk menggunakan teknologi pengekstrakan ciri teks dalam Python?

WBOY
WBOYasal
2023-06-04 11:10:342325semak imbas

Python ialah bahasa pengaturcaraan popular yang boleh digunakan untuk memproses data teks. Dalam bidang sains data dan pemprosesan bahasa semula jadi, pengekstrakan ciri teks ialah teknik penting yang menukar teks bahasa semula jadi mentah kepada vektor berangka untuk digunakan dalam pembelajaran mesin dan algoritma pembelajaran mendalam. Artikel ini akan memperkenalkan cara menggunakan teknologi pengekstrakan ciri teks dalam Python.

1. Prapemprosesan data teks

Sebelum pengekstrakan ciri teks, beberapa prapemprosesan mudah teks asal diperlukan. Prapemprosesan biasanya termasuk langkah berikut:

  1. Tukar semua teks kepada huruf kecil. Ini kerana Python ialah bahasa sensitif huruf besar dan kecil Jika semua teks tidak ditukar kepada huruf kecil, hasil pengekstrakan ciri teks mungkin dipengaruhi oleh huruf besar.
  2. Alih keluar tanda baca. Tanda baca tidak bermakna untuk pengekstrakan ciri teks dan harus dialih keluar.
  3. Alih keluar perkataan berhenti. Kata henti merujuk kepada perkataan yang terlalu kerap digunakan dalam bahasa semula jadi, seperti "the", "and", dsb. Ia tidak bermakna untuk pengekstrakan ciri teks dan harus dialih keluar.
  4. Stemming. Stemming merujuk kepada menukar variasi berbeza perkataan yang sama (seperti "lari", "lari", "lari") kepada bentuk perkataan bersatu. Ini boleh mengurangkan bilangan ciri dan meningkatkan keupayaan generalisasi semantik model.

Untuk prapemprosesan teks dalam Python, kami bergantung terutamanya pada perpustakaan pemprosesan bahasa semula jadi sumber terbuka seperti nltk dan spaCy. Berikut ialah contoh kod Python yang boleh melaksanakan langkah prapemprosesan di atas untuk teks bahasa Inggeris:

import string
import nltk
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize

def preprocess_text(text):
    # 将文本转换为小写
    text = text.lower()
    # 去除标点符号
    text = text.translate(str.maketrans("", "", string.punctuation))
    # 分词
    words = word_tokenize(text)
    # 去除停用词
    words = [word for word in words if word not in stopwords.words("english")]
    # 词干化
    stemmer = PorterStemmer()
    words = [stemmer.stem(word) for word in words]
    # 返回预处理后的文本
    return " ".join(words)

2. Model beg-of-words

Dalam pengekstrakan ciri teks, model yang paling biasa digunakan ialah model beg-of-words ( Bag-of-Words). Model beg-of-words mengandaikan bahawa perkataan dalam teks adalah set tidak tertib, menggunakan setiap perkataan sebagai ciri dan kekerapan kejadiannya dalam teks sebagai nilai ciri. Dengan cara ini, teks boleh diwakili sebagai vektor yang terdiri daripada frekuensi perkataan.

Terdapat banyak perpustakaan sumber terbuka dalam Python yang boleh digunakan untuk membina model beg-of-word, seperti sklearn dan nltk. Berikut ialah contoh kod Python Anda boleh menggunakan sklearn untuk melaksanakan model beg-of-word untuk teks bahasa Inggeris:

from sklearn.feature_extraction.text import CountVectorizer

# 定义文本数据
texts = ["hello world", "hello python"]

# 构建词袋模型
vectorizer = CountVectorizer()
vectorizer.fit_transform(texts)

# 输出词袋模型的特征
print(vectorizer.get_feature_names())
# 输出文本的特征向量
print(vectorizer.transform(texts).toarray())

Dalam kod di atas, CountVectorizer pertama kali digunakan untuk membina model beg-of-word , dan data teks "hello world" dan "hello python" adalah sebagai input. Akhir sekali, gunakan kaedah get_feature_names() untuk mendapatkan ciri model beg-of-word, gunakan kaedah transform() untuk menukar teks kepada vektor ciri, dan gunakan kaedah toarray() untuk mewakili matriks jarang sebagai tatasusunan NumPy umum.

3. Model TF-IDF

Model beg-of-words boleh mewakili kekerapan perkataan dalam teks, tetapi ia tidak mengambil kira kepentingan berbeza bagi perkataan yang berbeza untuk teks pengelasan. Contohnya, dalam masalah pengelasan teks, beberapa perkataan mungkin muncul dalam berbilang kategori teks, dan mereka tidak memainkan peranan besar dalam membezakan kategori yang berbeza. Sebaliknya, sesetengah perkataan mungkin hanya muncul dalam kategori teks tertentu, dan ia penting untuk membezakan kategori yang berbeza.

Untuk menyelesaikan masalah ini, teknologi pengekstrakan ciri teks yang lebih maju ialah menggunakan model TF-IDF. TF-IDF (Term Frequency-Inverse Document Frequency) ialah kaedah statistik yang digunakan untuk menilai kepentingan sesuatu perkataan dalam dokumen. Ia mengira nilai TF-IDF sesuatu perkataan dengan mendarabkan kekerapan perkataan dalam dokumen dengan songsangan kekerapan kejadiannya dalam keseluruhan koleksi dokumen.

Terdapat juga banyak perpustakaan sumber terbuka dalam Python yang boleh digunakan untuk membina model TF-IDF, seperti sklearn dan nltk. Berikut ialah contoh kod Python Anda boleh menggunakan sklearn untuk melaksanakan model TF-IDF untuk teks bahasa Inggeris:

from sklearn.feature_extraction.text import TfidfVectorizer

# 定义文本数据
texts = ["hello world", "hello python"]

# 构建TF-IDF模型
vectorizer = TfidfVectorizer()
vectorizer.fit_transform(texts)

# 输出TF-IDF模型的特征
print(vectorizer.get_feature_names())
# 输出文本的特征向量
print(vectorizer.transform(texts).toarray())

Dalam kod di atas, mula-mula gunakan TfidfVectorizer untuk membina model TF-IDF, dan tukarkan data teks "hello world" dan "hello python" sebagai input. Akhir sekali, gunakan kaedah get_feature_names() untuk mendapatkan ciri model TF-IDF, gunakan kaedah transform() untuk menukar teks kepada vektor ciri, dan gunakan kaedah toarray() untuk mewakili matriks jarang sebagai NumPy umum tatasusunan.

4. Model Word2Vec

Selain model bag-of-words dan model TF-IDF, terdapat juga teknologi pengekstrakan ciri teks lanjutan yang dipanggil model Word2Vec. Word2Vec ialah model rangkaian saraf yang dibangunkan oleh Google yang digunakan untuk mewakili perkataan sebagai vektor padat supaya perkataan yang serupa lebih dekat dalam ruang vektor.

Dalam Python, model Word2Vec boleh dilaksanakan dengan mudah menggunakan perpustakaan gensim. Berikut ialah contoh kod Python, yang boleh menggunakan perpustakaan gensim untuk melaksanakan model Word2Vec untuk teks bahasa Inggeris:

from gensim.models import Word2Vec
import nltk

# 定义文本数据
texts = ["hello world", "hello python"]

# 分词
words = [nltk.word_tokenize(text) for text in texts]

# 构建Word2Vec模型
model = Word2Vec(size=100, min_count=1)
model.build_vocab(words)
model.train(words, total_examples=model.corpus_count, epochs=model.iter)

# 输出单词的特征向量
print(model["hello"])
print(model["world"])
print(model["python"])

Dalam kod di atas, perpustakaan nltk mula-mula digunakan untuk membahagikan teks, dan kemudian Word2Vec kelas digunakan untuk membina model Word2Vec, di mana parameter saiz Menentukan dimensi vektor setiap perkataan, parameter min_count menentukan kekerapan perkataan minimum, dalam kes ini 1, supaya semua perkataan dipertimbangkan ke dalam model. Seterusnya, gunakan kaedah build_vocab() untuk membina perbendaharaan kata dan kaedah train() untuk melatih model. Akhir sekali, vektor ciri bagi setiap perkataan boleh diakses menggunakan kurungan segi empat sama, seperti model["hello"], model["world"], model["python"].

Ringkasan

Artikel ini memperkenalkan cara menggunakan teknologi pengekstrakan ciri teks dalam Python, termasuk model beg-of-words, model TF-IDF dan model Word2Vec. Apabila menggunakan teknik ini, prapemprosesan teks mudah diperlukan untuk mengatasi hingar dalam data teks. Di samping itu, perlu diingatkan bahawa teknologi pengekstrakan ciri teks yang berbeza sesuai untuk senario aplikasi yang berbeza, dan teknologi yang sesuai perlu dipilih mengikut masalah tertentu.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan teknologi pengekstrakan ciri teks dalam Python?. 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
Artikel sebelumnya:Apakah senarai dalam Python?Artikel seterusnya:Apakah senarai dalam Python?