文本数据分析是指对文本数据进行收集、清理、加工和分析的过程,旨在从大量的文本信息中抽取有用的信息和知识
1. 数据收集
使用如Python中的BeautifulSoup库进行网络爬虫,寻找并下载网页上的文本内容
2. 数据清洗
在收集到文本数据后,通常需要进行数据清洗,以去除文本中的噪声数据,如去除特殊字符、标点符号、HTML标签等
3. 数据处理
分词
将文本分割成一个个独立的词语
# 文本预处理:分词、去除标点和停用词seg_list = jieba.cut(text, cut_all=False)filtered_words = [word for word in seg_list if word not in stopword_list an word.strip().isalnum()]filtered_text = ' '.join(filtered_words)
去除停用词
# 加载停用词列表
with open("./stopwords.txt", encoding='gb18030') as f:stopword_list = set(line.strip() for line in f.readlines())
常见的停用词列表如下:
中文停用词表; 哈工大停用词表; 百度停用词表; 机器智能实验室停用词库
链接:https://pan.baidu.com/s/1wb3CdvL-OOWsveKzfkG8og?pwd=0oq7 提取码:0oq7
词向量转化
将文本中的词语转换成数值向量表示,常见的方法有词袋模型、TF-IDF和Word2Vec等。
TF-IDF:
from sklearn.feature_extraction.text import TfidfVectorizer
# 初始化TfidfVectorizer
vectorizer = TfidfVectorizer() # 使用fit_transform方法将文本数据转换为TF-IDF矩阵
X = vectorizer.fit_transform(documents) # 输出TF-IDF矩阵
print("TF-IDF矩阵:\n", X.toarray())
词袋模型
from sklearn.feature_extraction.text import CountVectorizer
# 初始化CountVectorizer
vectorizer = CountVectorizer() # 使用fit_transform方法将文本数据转换为词频矩阵
X = vectorizer.fit_transform(documents) # 输出词频矩阵
print("词频矩阵:\n", X.toarray())
Word2Vec
- 提出者:由Google公司于2013年提出。
- 架构:
- CBOW(Continuous Bag of Words):通过上下文预测目标词语。
- Skip-gram:通过目标词语预测上下文。
- 特点:能够生成高维稠密的词向量,更好地保留词语的语义信息
文本特征提取
从文本中提取出有用的特征,例如提取关键词词频,绘制词云,生成面板数据,计算余弦相似度等
文本挖掘统计词频完整代码如下所示:
import os
import jieba
import collections
import pandas as pd
import re# 设置文件夹路径
base_dir = 'processed_data'# 用于存储所有文件的词频
word_freq = collections.Counter()def is_valid_word(word):# 排除空格、单个字符、数字等if len(word) == 1 or word.isdigit() or not re.match(r'[\u4e00-\u9fa5]+', word): # 只保留中文字符return Falsereturn True# 遍历文件夹和文件
for root, dirs, files in os.walk(base_dir):for file in files:if file.endswith('.txt'):file_path = os.path.join(root, file)with open(file_path, 'r', encoding='utf-8') as f:content = f.read()# 使用jieba进行分词words = jieba.cut(content, cut_all=False)# 筛选有效的词语并更新全局词频计数器for word in words:if is_valid_word(word):word_freq.update([word])# 对词频进行排序,这里选择前1000个高频词
top_words = word_freq.most_common(1000)# 将高频词及其词频转换为DataFrame
df = pd.DataFrame(top_words, columns=['Word', 'Frequency'])# 写入Excel文件
df.to_excel('words.xlsx', index=False)