这样的文本文件
6675222202004013572!0!文化!老照片:1907年,山东省泰安府
6679940295825555980 !0!文化!亦舒经典语录100句
6676963806968545799 !0 !文化!乐山大佛整修完成,花脸被清洗干净,网友:美完容变帅”了
6664825683656573448!0!文化!70e0年前的女子,正值花样年华,为何遭受到此残忍的对待?
6679000649759195662!0!文化_!9张图藏9个成语,你能猜对几个?对8个的是天才
6660713507018768910!0!文化!古代骂人最经典的五句脏话,骂人不吐脏字,没文化根本听不出来
6671108188185559565!0!文化!为何齐白石一只蜻蜓卖690万?放大10倍看蝉翼细节,专家:妙极了
6688506889409397255!0!文化!连环画《卖妙郎》
6680853770496115214_!0!文化!人生两大凶德,千万要戒掉(好文)
6664077346779169293!0 !文化!相声届的老前辈你都认识哪几位,郭德纲真的只能被称为小学生!
6659255010456502797!0 !文化!老话:“说曹操,曹操就到”,其实下半句讲的更多,为何无人敢说
6670004083148980748_!0!文化!“-更人、二更火、三更鬼“那四更、五更是什么?十人九不知
6373789876684325121_!1!娱乐!乐童康堡儿童健康管理中心美味来袭
6691206568786002440_!1!娱乐!周杰伦陪昆凌夏纳走红毯任素汐再被前夫证实出轨说好的六点见
6687159887253733892!1!娱乐!为什么国产青春片质量往往不高?
6687421011211584014!1!娱乐!风月已逝,血幕降临张彻的《刺马》与陈可辛的《投名状》
6688950497635729933!1!娱乐!不吐不快!《罗马》让人难以忍受的2大硬伤
6687555668330676739_!1!娱乐!《雪暴》:致敬科恩兄弟的经典犯罪片
6677540377823543816!1!娱乐!成龙当年这一跳,破了吉尼斯纪录,从此全球影迷
6691183566191067662!2!体育!提前认输!韩足协官宣退出亚洲杯申办2023年举办权花落中国
6668402481405362701!2!体育!场面失控!足球场秒变格斗场,都是深藏不露的!
6685519250385273357!2!体育!长得甜,打球帅的刘诗雯
6675292284440805891_!2!体育!谁是NBA最恐怖弹跳?拉文格林各有千秋,乔丹是飞人但未必第一
针对文本特征向量抽取的词袋、LDA和词向量等特征,对一个文本文档进行预处理的步骤:
读入文本文件,可以使用Python的open函数或者pandas库中的read_csv函数。查看文件中正负样本的数量。
数据清洗 针对文本进行清洗,可以通过以下步骤进行处理:
去除HTML标签等非文本字符
去除停用词,如'and', 'a', 'the'等这些常见词汇,这些词汇对所训练模型的贡献较小
特征向量抽取
通过词袋、LDA或词向量等方法进行特征向量抽取,其中:
词向量:将文本中的单词转换成向量,在向量空间中计算单词之间的相似度。
选取有效特征
可以使用PCA等方法对特征向量进行降维,选取其中具有较高方差的特征。
根据实际需求选取适当的模型进行训练和预测。常见的模型有朴素贝叶斯、逻辑回归、SVM等。
示例代码:
import pandas as pd
pos_data = pd.read_csv('pos_data.csv')
neg_data = pd.read_csv('neg_data.csv')
print(len(pos_data))
print(len(neg_data))
import re
import nltk
from nltk.corpus import stopwords
def text_process(text):
#去除HTML等标记
text = re.sub("<.*?>", " ", text)
#分词
tokens = nltk.word_tokenize(text)
#去除停用词
stopwords_list = stopwords.words('english')
clean_tokens = [token for token in tokens if token.lower() not in stopwords_list and len(token)>2]
return clean_tokens
pos_data['clean_text'] = pos_data['text'].apply(text_process)
neg_data['clean_text'] = neg_data['text'].apply(text_process)
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.decomposition import LatentDirichletAllocation
#使用词袋模型
vectorizer = CountVectorizer(analyzer='word',
tokenizer=None,
preprocessor=None,
stop_words=None,
max_features=5000)
X_train = vectorizer.fit_transform(pos_data['clean_text'])
X_test = vectorizer.transform(neg_data['clean_text'])
#使用LDA
lda = LatentDirichletAllocation(n_components=5,
max_iter=50,
learning_method='online',
learning_offset=50.,
random_state=0)
X_train = lda.fit_transform(X_train)
X_test = lda.transform(X_test)
#使用词向量
tfidf = TfidfVectorizer(max_features=5000)
X_train = tfidf.fit_transform(pos_data['text'])
X_test = tfidf.transform(neg_data['text'])
from sklearn.decomposition import PCA
pca = PCA(n_components=50)
X_train = pca.fit_transform(X_train.toarray())
X_test = pca.transform(X_test.toarray())
from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import LogisticRegression
#朴素贝叶斯模型
nb = MultinomialNB()
nb.fit(X_train, pos_data['label'])
nb.predict(X_test)
#逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, pos_data['label'])
lr.predict(X_test)
该回答引用ChatGPT4与博主@晓码自在合作编写:
针对这种文本数据,可以采取以下步骤进行特征提取:
数据预处理主要是第1步和第2步。代码示例:
python
import jieba
from collections import Counter
with open('data.txt', 'r', encoding='utf-8') as f:
docs = f.read()
# 数据清洗
docs = docs.replace('\n', '').replace(' ', '')
# 分词
words = jieba.cut(docs)
# 词频统计
word_count = Counter(words)
# LDA/Word2Vec特征
from sklearn.decomposition import LatentDirichletAllocation
from gensim.models import Word2Vec
# Tf-idf
from sklearn.feature_extraction.text import CountVectorizer
tf_idf = CountVectorizer(tokenizer=jieba.cut, min_df=2)
tf_idf.fit_transform(docs)
这就是一个简单的文本特征提取流程和示例代码。提取出的这些不同特征可以单独使用,也可以concat起来组成特征向量。