如何对一个文本文档进行文本特征向量抽取词袋、LDA、词向量等特征。数据预处理

这样的文本文件
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最恐怖弹跳?拉文格林各有千秋,乔丹是飞人但未必第一

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7469485
  • 以下回答由chatgpt基于相关博客总结生成:

    针对文本特征向量抽取的词袋、LDA和词向量等特征,对一个文本文档进行预处理的步骤:

    1. 数据读入和查看

    读入文本文件,可以使用Python的open函数或者pandas库中的read_csv函数。查看文件中正负样本的数量。

    1. 数据清洗 针对文本进行清洗,可以通过以下步骤进行处理:

    2. 去除HTML标签等非文本字符

    3. 分词,将每个单词分离开来
    4. 去除停用词,如'and', 'a', 'the'等这些常见词汇,这些词汇对所训练模型的贡献较小

    5. 特征向量抽取

    通过词袋、LDA或词向量等方法进行特征向量抽取,其中:

    • 词袋模型:统计文档中每个单词的出现频率,并将所有单词组成向量,每个单词是向量的一个维度。
    • LDA:将文本中的单词转化为主题,主题可以看作是类别,再将这些主题组成向量。
    • 词向量:将文本中的单词转换成向量,在向量空间中计算单词之间的相似度。

    • 选取有效特征

    可以使用PCA等方法对特征向量进行降维,选取其中具有较高方差的特征。

    1. 构建模型

    根据实际需求选取适当的模型进行训练和预测。常见的模型有朴素贝叶斯、逻辑回归、SVM等。

    示例代码:

    1. 数据读入和查看
    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))
    
    1. 数据清洗
    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)
    
    1. 特征向量抽取
    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'])
    
    1. 选取有效特征
    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())
    
    1. 构建模型
    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. 数据清洗:去除空格,换行符等无用信息。可以使用字符串replace()方法。
  2. 分词:使用中文分词工具jieba对文本进行分词,得到词列表。
  3. 词袋模型:将分词结果进行词频统计,得到每个词的词频,作为词袋模型特征。
  4. LDA主题模型:使用LDA模型对分词结果进行主题提取,得到每个文档的主题分布,作为特征。
  5. 词向量:使用Word2Vec等词向量工具,将每个词映射到词向量空间,将文档内所有词向量取平均或叠加,得到文档向量,作为特征。
  6. Tf-idf:计算每个词的Tf-idf权重,并归一化,作为特征。

数据预处理主要是第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起来组成特征向量。