Python DataFrame子串提取:基于机器学习的文本领域分类任务
文本领域分类解决方案(基于Python DataFrame)
一、文本预处理
先对DataFrame中的文章文本做清洗,提升后续模型效果:
- 移除特殊字符、数字与标点
- 统一转换为小写
- 过滤停用词(如英文的
the/a,中文的的/了) - 词形还原/词干化(可选,进一步精简文本)
代码示例:
import pandas as pd import re from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer # 初始化NLTK工具(需提前下载:nltk.download('stopwords'), nltk.download('wordnet')) stop_words = set(stopwords.words('english')) lemmatizer = WordNetLemmatizer() def clean_text(text): # 清理特殊字符 text = re.sub(r'[^a-zA-Z\s]', '', str(text)) # 转小写 text = text.lower() # 分词+去停用词+词形还原 tokens = [lemmatizer.lemmatize(token) for token in text.split() if token not in stop_words] return ' '.join(tokens) # 处理DataFrame的文章列(假设列名为'article') df['cleaned_article'] = df['article'].apply(clean_text)
二、文本特征提取
将清洗后的文本转换为模型可识别的数值特征,推荐用TF-IDF:
from sklearn.feature_extraction.text import TfidfVectorizer # 初始化TF-IDF转换器,保留前5000个高频特征 tfidf_vectorizer = TfidfVectorizer(max_features=5000) # 生成特征矩阵 text_features = tfidf_vectorizer.fit_transform(df['cleaned_article'])
三、领域分类(分有监督/无监督两种场景)
场景1:有监督分类(已有领域标注)
如果数据集中存在标注好的领域标签(如列名为actual_domain),直接训练分类模型:
from sklearn.model_selection import train_test_split from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import classification_report # 划分训练集与测试集 X_train, X_test, y_train, y_test = train_test_split( text_features, df['actual_domain'], test_size=0.2, random_state=42 ) # 训练朴素贝叶斯模型(适合文本分类) classifier = MultinomialNB() classifier.fit(X_train, y_train) # 评估模型性能 y_pred = classifier.predict(X_test) print(classification_report(y_test, y_pred)) # 对全量数据生成预测结果 df['predicted_domain'] = classifier.predict(text_features)
场景2:无监督分类(无标注标签)
若没有领域标注,用聚类算法自动划分潜在领域:
from sklearn.cluster import KMeans # 假设要划分成5个潜在领域 kmeans = KMeans(n_clusters=5, random_state=42) df['cluster_domain'] = kmeans.fit_predict(text_features)
四、输出结果
处理完成后,可将结果保存为CSV或其他格式:
# 保存带分类结果的DataFrame df.to_csv('classified_articles.csv', index=False)
内容的提问来源于stack exchange,提问作者Moshood
相关产品推荐
相关产品推荐

