# 文本挖掘
## 一、文本读入
1、使用 os 库读入批量文件名:txtLists = os.listdir(txtPath),并保存为一个列表 txtLists
2、提取训练集的文件名的第一个字母 s 的即为论文类别,作为训练集的输出变量。
## 二、文本预处理
### 1、基础处理
使用的方法有:单词大小写转换,去掉论文摘要 ABSTRACT,去标点,去换行符,去”,去英文停词,最后按照空格划分为列表。
### 2、词干提取
由于词性还原对并不能把所有的单词都还原为词根的形式,所以我们采用了词干提取的方法来进行分词。虽然词干提取会将 written 这类的单词提取为 writ,但当所有的 write 的派生词都被提取为 writ 时,分词就可以达到很好的效果。
## 三、模型训练以及预测
### 1 随机森林
验证集中我们得到了 100% 的准确率,预测集的提交结果为 76.25%
### 2 朴素贝叶斯
验证集中我们得到了 97.5% 的准确率,但预测集的提交结果为 85%
## 四、总结
1、通过这次大作业,我们了解到了文本挖掘的入门知识,python 数据处理能力以及文本分词的基础方法得到了训练。
2、85% 的成绩看似不错,但由于训练集和测试集的样本数太少以及提交次数有限,无法对现有模型和预处理过程做过多的调整,所以后续调参没有方向。
## 代码
```
import pandas as pd
import os
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
import nltk.stem
from nltk.corpus import stopwords
import string
## 路径读取
txtPath = r'C:\Users\admin\Desktop\wenben\train'
txtPath2 = r'C:\Users\admin\Desktop\wenben\test\5'
txtLists = os.listdir(txtPath)
txtLists2 = os.listdir(txtPath2)
## ---------------预处理-----------------##
X_TRAIN = []
X_TRIAL = []
label = []
label2 = []
name = []
############# 训练集文本预处理
for txtlist in txtLists:
## 提取标签
label.append(txtlist[0])
path = os.path.join(txtPath,txtlist)
f = open(path)
s = f.read()
## 去掉'ABSTRACT'
s = s.lstrip('ABSTRACT')
## 去标点
remove = str.maketrans('','',string.punctuation)
without_punctuation = s.translate(remove)
## 换行符
s = without_punctuation.replace('\n',' ',10000)
## 全部转换为小写
s = s.lower()
## 以空格为间隔划分为列表
s = s.split(' ')
## 去掉''
s = [w for w in s if w is not '']
## 去掉英文停词
without_stopwords = [w for w in s if not w in stopwords.words('english')]
## 词干提取
s = nltk.stem.SnowballStemmer('english')
## 列表转化为字符串
cleaned_text = ' '.join([s.stem(ws) for ws in without_stopwords])
## 存入X
X_TRAIN.append(cleaned_text)
############ 测试集文本预处理
for txtlist2 in txtLists2:
name.append(txtlist2)
label2.append(txtlist2[0])
path2 = os.path.join(txtPath2,txtlist2)
f2 = open(path2)
s2 = f2.read()
s2 = s2.lstrip('ABSTRACT')
remove = str.maketrans('','',string.punctuation)
without_punctuation2 = s2.translate(remove)
s2 = without_punctuation2.replace('\n',' ',10000)
s2 = s2.lower()
s2 = s2.split(' ')
s2 = [w for w in s2 if w is not '']
without_stopwords2 = [w for w in s2 if not w in stopwords.words('english')]
s2 = nltk.stem.SnowballStemmer('english')
cleaned_text2 = ' '.join([s2.stem(ws) for ws in without_stopwords2])
X_TRIAL.append(cleaned_text2)
## -------------预测 ------------##
# TF-IDF
tfidf_vect = TfidfVectorizer(analyzer='word', token_pattern=r'\w{1,}'\
, max_features=5000)
## 词向量转化
X_TRAIN = tfidf_vect.fit_transform(X_TRAIN)
X_TRIAL = tfidf_vect.transform(X_TRIAL)
## 朴素贝叶斯模型训练
rfc = MultinomialNB().fit(X_TRAIN,label)
## 预测
label = rfc.predict(X_TRIAL)
## 保存
data2 = {'name':name,'label': label}
frame2 = pd.DataFrame(data2)
frame2.to_csv(r'C:\Users\admin\Desktop\wenben\result.csv',\
index = False,header = False)
```
基于Python实现文本挖掘【100012708】
版权申诉
4 浏览量
2023-06-12
11:06:31
上传
评论
收藏 4.8MB ZIP 举报
神仙别闹
- 粉丝: 2674
- 资源: 7640
最新资源
- 基于matlab实现配电网三相潮流计算方法,对几种常用的配电网潮流计算方法进行了对比分析.rar
- 基于matlab实现配电网潮流 经典33节点 前推回代法潮流计算 回代电流 前推电压 带注释.rar
- 基于matlab实现模拟退火遗传算法的车辆调度问题研究,用MATLAB语言加以实现.rar
- 基于matlab实现蒙特卡洛的的移动传感器节点定位算法仿真代码.rar
- 华中数控系统818用户说明书
- 基于matlab实现卡尔曼滤波器完成多传感器数据融合 对多个机器人的不同传感器数据进行融合估计足球精确位置.rar
- 基于matlab实现进行简单车辆识别-车辆检测.rar
- 基于JSP物流信息网的设计与实现
- 基于matlab实现车牌识别程序,和论文,自己做的,做毕业设计的可以看看 .rar
- Windows系统下安装与配置Neo4j的步骤
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈