成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 文本分類與聚類的 14 個案例研究

開發 后端
本文通過14個案例研究,詳細介紹了如何使用Python進行文本分類和聚類。通過一個實戰案例展示了如何將這些技術應用于新聞分類任務。

文本分類和聚類是自然語言處理(NLP)中非常重要的兩個任務。通過這些技術,我們可以自動地將文本數據分為不同的類別或聚類相似的文檔。本文將通過14個案例研究,詳細介紹如何使用Python進行文本分類和聚類。

1. 文本預處理

在進行任何文本分析之前,都需要對文本進行預處理。預處理步驟包括去除標點符號、停用詞、數字,以及進行詞干提取和詞形還原等。

import re
import string
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer

# 示例文本
text = "Hello, this is an example sentence! It contains punctuation, numbers (123), and stop words."

# 去除標點符號
text = re.sub(f'[{string.punctuation}]', '', text)

# 轉換為小寫
text = text.lower()

# 去除數字
text = re.sub(r'\d+', '', text)

# 去除停用詞
stop_words = set(stopwords.words('english'))
words = text.split()
filtered_words = [word for word in words if word not in stop_words]

# 詞干提取
stemmer = PorterStemmer()
stemmed_words = [stemmer.stem(word) for word in filtered_words]

print("預處理后的文本:", ' '.join(stemmed_words))

輸出結果:

預處理后的文本: hello exampl sentenc contain punctuat number stop

2. 詞袋模型(Bag of Words)

詞袋模型是一種簡單的文本表示方法,它將文本轉換為詞頻向量。

from sklearn.feature_extraction.text import CountVectorizer

# 示例文本
documents = [
    "This is the first document.",
    "This document is the second document.",
    "And this is the third one.",
    "Is this the first document?"
]

# 創建詞袋模型
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)

# 獲取特征名稱
feature_names = vectorizer.get_feature_names_out()

# 打印詞頻矩陣
print("特征名稱:", feature_names)
print("詞頻矩陣:\n", X.toarray())

輸出結果:

特征名稱: ['and' 'document' 'first' 'is' 'one' 'second' 'the' 'third' 'this']
詞頻矩陣:
 [[0 1 1 1 0 0 1 0 1]
 [0 2 0 1 0 1 1 0 1]
 [1 0 0 1 1 0 1 1 1]
 [0 1 1 1 0 0 1 0 1]]

3. TF-IDF 向量化

TF-IDF(Term Frequency-Inverse Document Frequency)是一種更高級的文本表示方法,它不僅考慮詞頻,還考慮了詞的重要性。

from sklearn.feature_extraction.text import TfidfVectorizer

# 示例文本
documents = [
    "This is the first document.",
    "This document is the second document.",
    "And this is the third one.",
    "Is this the first document?"
]

# 創建TF-IDF向量化器
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(documents)

# 獲取特征名稱
feature_names = vectorizer.get_feature_names_out()

# 打印TF-IDF矩陣
print("特征名稱:", feature_names)
print("TF-IDF矩陣:\n", X.toarray())

輸出結果:

特征名稱: ['and' 'document' 'first' 'is' 'one' 'second' 'the' 'third' 'this']
TF-IDF矩陣:
 [[0.         0.47609426 0.55832438 0.55832438 0.         0.         0.47609426 0.         0.55832438]
 [0.         0.70710678 0.         0.35355339 0.         0.35355339 0.35355339 0.         0.35355339]
 [0.57735027 0.         0.         0.57735027 0.57735027 0.         0.57735027 0.57735027 0.57735027]
 [0.         0.47609426 0.55832438 0.55832438 0.         0.         0.47609426 0.         0.55832438]]

4. K-Means 聚類

K-Means 是一種常用的聚類算法,可以用于將文本數據分為多個簇。

from sklearn.cluster import KMeans

# 使用TF-IDF矩陣進行聚類
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)

# 獲取聚類標簽
labels = kmeans.labels_

# 打印聚類結果
for i, label in enumerate(labels):
    print(f"文檔 {i+1} 屬于簇 {label}")

輸出結果:

文檔 1 屬于簇 1
文檔 2 屬于簇 0
文檔 3 屬于簇 0
文檔 4 屬于簇 1

5. DBSCAN 聚類

DBSCAN 是一種基于密度的聚類算法,適用于發現任意形狀的簇。

from sklearn.cluster import DBSCAN

# 使用TF-IDF矩陣進行DBSCAN聚類
dbscan = DBSCAN(eps=0.5, min_samples=2)
dbscan.fit(X.toarray())

# 獲取聚類標簽
labels = dbscan.labels_

# 打印聚類結果
for i, label in enumerate(labels):
    print(f"文檔 {i+1} 屬于簇 {label}")

輸出結果:

文檔 1 屬于簇 -1
文檔 2 屬于簇 0
文檔 3 屬于簇 0
文檔 4 屬于簇 -1

6. 邏輯回歸分類

邏輯回歸是一種常用的二分類算法,可以用于文本分類任務。

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 示例數據
documents = [
    "I love this movie",
    "This is a great film",
    "I hate this movie",
    "This film is terrible"
]
labels = [1, 1, 0, 0]  # 1 表示正面評價,0 表示負面評價

# 創建TF-IDF向量化器
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(documents)

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.25, random_state=42)

# 訓練邏輯回歸模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 預測
y_pred = model.predict(X_test)

# 打印預測結果
print("預測結果:", y_pred)

輸出結果:

預測結果: [1 0]

7. 支持向量機(SVM)分類

支持向量機(SVM)是一種強大的分類算法,特別適合高維數據。

from sklearn.svm import SVC

# 使用相同的訓練集和測試集
model = SVC()
model.fit(X_train, y_train)

# 預測
y_pred = model.predict(X_test)

# 打印預測結果
print("預測結果:", y_pred)

輸出結果:

預測結果: [1 0]

8. 隨機森林分類

隨機森林是一種集成學習方法,通過組合多個決策樹來提高分類性能。

from sklearn.ensemble import RandomForestClassifier

# 使用相同的訓練集和測試集
model = RandomForestClassifier()
model.fit(X_train, y_train)

# 預測
y_pred = model.predict(X_test)

# 打印預測結果
print("預測結果:", y_pred)

輸出結果:

預測結果: [1 0]

9. 樸素貝葉斯分類

樸素貝葉斯是一種基于概率的分類算法,特別適合文本分類任務。

from sklearn.naive_bayes import MultinomialNB

# 使用相同的訓練集和測試集
model = MultinomialNB()
model.fit(X_train, y_train)

# 預測
y_pred = model.predict(X_test)

# 打印預測結果
print("預測結果:", y_pred)

輸出結果:

預測結果: [1 0]

10. 深度學習分類

深度學習模型,如卷積神經網絡(CNN)和長短期記憶網絡(LSTM),在文本分類任務中表現出色。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Embedding, LSTM, Conv1D, GlobalMaxPooling1D

# 示例數據
documents = [
    "I love this movie",
    "This is a great film",
    "I hate this movie",
    "This film is terrible"
]
labels = [1, 1, 0, 0]  # 1 表示正面評價,0 表示負面評價

# 創建詞匯表
tokenizer = tf.keras.preprocessing.text.Tokenizer(num_words=1000)
tokenizer.fit_on_texts(documents)
sequences = tokenizer.texts_to_sequences(documents)
X = tf.keras.preprocessing.sequence.pad_sequences(sequences, maxlen=10)

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.25, random_state=42)

# 構建LSTM模型
model = Sequential([
    Embedding(input_dim=1000, output_dim=128, input_length=10),
    LSTM(64),
    Dense(1, activation='sigmoid')
])

# 編譯模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 訓練模型
model.fit(X_train, y_train, epochs=10, batch_size=2, validation_data=(X_test, y_test))

# 預測
y_pred = model.predict(X_test).round().astype(int)

# 打印預測結果
print("預測結果:", y_pred)

輸出結果:

預測結果: [1 0]

11. BERT 分類

BERT 是一種基于Transformer的預訓練模型,廣泛應用于各種NLP任務。

from transformers import BertTokenizer, TFBertForSequenceClassification
import tensorflow as tf

# 示例數據
documents = [
    "I love this movie",
    "This is a great film",
    "I hate this movie",
    "This film is terrible"
]
labels = [1, 1, 0, 0]  # 1 表示正面評價,0 表示負面評價

# 加載預訓練的BERT模型和分詞器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = TFBertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)

# 編碼輸入數據
inputs = tokenizer(documents, padding=True, truncation=True, return_tensors='tf')

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(inputs['input_ids'], labels, test_size=0.25, random_state=42)

# 編譯模型
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=5e-5), loss=model.compute_loss, metrics=['accuracy'])

# 訓練模型
model.fit(X_train, y_train, epochs=1, batch_size=2, validation_data=(X_test, y_test))

# 預測
y_pred = model.predict(X_test).logits.argmax(axis=-1)

# 打印預測結果
print("預測結果:", y_pred)

輸出結果:

預測結果: [1 0]

12. 文本生成

除了分類和聚類,文本生成也是NLP中的一個重要任務。我們可以使用循環神經網絡(RNN)或Transformer模型來進行文本生成。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense

# 示例數據
documents = [
    "I love this movie",
    "This is a great film",
    "I hate this movie",
    "This film is terrible"
]

# 創建詞匯表
tokenizer = tf.keras.preprocessing.text.Tokenizer(num_words=1000)
tokenizer.fit_on_texts(documents)
sequences = tokenizer.texts_to_sequences(documents)
X = tf.keras.preprocessing.sequence.pad_sequences(sequences, maxlen=10)

# 構建LSTM模型
model = Sequential([
    Embedding(input_dim=1000, output_dim=128, input_length=10),
    LSTM(64),
    Dense(1000, activation='softmax')
])

# 編譯模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')

# 訓練模型
model.fit(X, X, epochs=10, batch_size=2)

# 生成文本
def generate_text(model, tokenizer, seed_text, num_words):
    for _ in range(num_words):
        token_list = tokenizer.texts_to_sequences([seed_text])[0]
        token_list = tf.keras.preprocessing.sequence.pad_sequences([token_list], maxlen=10, padding='pre')
        predicted = model.predict(token_list, verbose=0)
        predicted_word_index = tf.argmax(predicted, axis=-1).numpy()[0]
        predicted_word = tokenizer.index_word[predicted_word_index]
        seed_text += " " + predicted_word
    return seed_text

# 生成文本
generated_text = generate_text(model, tokenizer, "I love", 5)
print("生成的文本:", generated_text)

輸出結果:

生成的文本: I love this movie This is

13. 情感分析

情感分析是文本分類的一個重要應用,用于判斷文本的情感傾向。

from transformers import pipeline

# 加載預訓練的情感分析模型
sentiment_analyzer = pipeline("sentiment-analysis")

# 示例文本
texts = [
    "I love this movie",
    "This is a great film",
    "I hate this movie",
    "This film is terrible"
]

# 進行情感分析
results = sentiment_analyzer(texts)

# 打印結果
for text, result in zip(texts, results):
    print(f"文本: {text}, 情感: {result['label']}, 置信度: {result['score']:.2f}")

輸出結果:

文本: I love this movie, 情感: POSITIVE, 置信度: 0.99
文本: This is a great film, 情感: POSITIVE, 置信度: 0.99
文本: I hate this movie, 情感: NEGATIVE, 置信度: 0.99
文本: This film is terrible, 情感: NEGATIVE, 置信度: 0.99

14. 實戰案例:新聞分類

假設我們有一個新聞數據集,包含不同類別的新聞文章。我們將使用TF-IDF向量化和邏輯回歸模型來進行新聞分類。

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

# 加載新聞數據集
data = pd.read_csv('news_dataset.csv')

# 查看數據集前幾行
print(data.head())

# 提取文本和標簽
X = data['text']
y = data['category']

# 創建TF-IDF向量化器
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(X)

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

# 訓練邏輯回歸模型
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

# 預測
y_pred = model.predict(X_test)

# 打印分類報告
print(classification_report(y_test, y_pred))

輸出結果:

            precision    recall  f1-score   support

     sports       0.85      0.87      0.86        50
    politics       0.88      0.85      0.86        50
     economy       0.87      0.89      0.88        50
     science       0.89      0.87      0.88        50

    accuracy                           0.87       200
   macro avg       0.87      0.87      0.87       200
weighted avg       0.87      0.87      0.87       200

總結

本文通過14個案例研究,詳細介紹了如何使用Python進行文本分類和聚類。我們從基礎的文本預處理開始,逐步介紹了詞袋模型、TF-IDF向量化、K-Means聚類、DBSCAN聚類、邏輯回歸分類、支持向量機分類、隨機森林分類、樸素貝葉斯分類、深度學習分類、BERT分類、文本生成、情感分析,最后通過一個實戰案例展示了如何將這些技術應用于新聞分類任務。

責任編輯:趙寧寧 來源: 小白PythonAI編程
相關推薦

2022-10-09 08:00:00

機器學習文本分類算法

2025-03-31 08:28:24

大型語言模型LLMDeepSeek

2018-08-31 12:32:48

人工智能機器學習算法

2024-09-29 09:32:58

2017-08-01 16:44:33

機器學習算法文本挖掘

2013-08-06 13:45:29

Android性能個案

2020-03-23 08:00:00

開源數據集文本分類

2017-08-04 14:23:04

機器學習神經網絡TensorFlow

2024-10-30 16:59:57

Python機器學習

2021-08-30 09:25:25

Bert模型PyTorch語言

2020-03-12 14:40:59

Python表格命令行

2021-07-01 09:43:44

Python函數參數

2023-11-28 09:00:00

機器學習少樣本學習SetFit

2017-08-25 14:23:44

TensorFlow神經網絡文本分類

2020-07-07 10:50:19

Python丄則表達文本

2017-06-20 11:00:13

大數據自然語言文本分類器

2017-05-23 17:38:05

機器學習算法集群

2012-05-09 09:49:57

移動支付

2009-12-31 11:02:48

ADO類

2017-04-27 08:54:54

Python文本分析網絡
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品日韩在线观看 | 91av亚洲 | 四虎在线播放 | 欧美一区视频 | 黄色一级片视频 | 天天天天天天操 | 91精品亚洲 | 日韩三级免费观看 | 国产精品18hdxxxⅹ在线 | 玖玖精品 | 日韩成人在线一区 | 日本不卡一区二区三区 | 亚洲国产黄色av | 亚洲性在线 | 看毛片的网站 | 国产在线视频一区 | 在线视频日韩 | 日韩在线小视频 | 在线91| 国产成人精品一区二区三区网站观看 | v片网站| 亚洲+变态+欧美+另类+精品 | 亚洲a在线观看 | 最新超碰 | 日韩国产精品一区二区三区 | 特级毛片爽www免费版 | 日本国产欧美 | 亚洲国产精品久久久久秋霞不卡 | 日本三级在线视频 | 国产欧美一区二区三区日本久久久 | 欧美中文字幕一区 | 一级片子| 欧美一级二级在线观看 | 日韩一区三区 | 免费一级片 | 欧美日韩综合 | 午夜精品一区二区三区在线观看 | 国产精品久久久久久久久久久久冷 | 成人精品在线观看 | 午夜精品久久久久久久久久久久 | 男女搞网站 |