NLP文本分类引导
NLP文本分类引导
en
1. 数据读取
python原生读取txt文件
1 | f = open(filedir, mode='r') |
f.read()
一次读取全部数据。f.readline()
分行读取,一次读取一行。f.readlines()
读取全部数据,保留\n
换行符。
pandas读取txt文件
pd.read_table(filedir, splitsign, header=指定第几行为列名, names=如果没有列名手动指定[‘x’, ‘y’])
2. 数据预处理
分词
去除停词 去除低频词
1 | def optimize_words_dict(self, data, stop_words, threshold): |
通过TF-IDF算法筛选单词
1 | def tf_idf(self, data): |
在预处理时,因为是要为生成词典做准备,所以TF-IDF应该是以整个corpus计算TF,而提取特征时建立词袋模型中的TF-IDF方法则是对每个Sample的单词计算TF-IDF值。
3. 建立词典
词典 = {‘单词’:索引}
4. 提取特征
词袋模型(BOW)
假设建立的词典有1000维,那么我们将为数据集中的每一个Sample建立一个1000维的向量。
词袋模型有三种形式:
- 对于每个Smaple单词是否出现
- 对于每个Sample单词出现次数
- 对于每个Smaple单词的TF-IDF值
在预处理时,因为是要为生成词典做准备,所以TF-IDF应该是以整个corpus计算TF,而提取特征时建立词袋模型中的TF-IDF方法则是对每个Sample的单词计算TF-IDF值。
例:
词典:1000. [北京,天气,真,好,北京] = [0, 1, 0, …,0], 或 [0, 2, 0, …,0],或 [0, 0.4, 0, …, 0]
独热编码(One-Hot)
对于一个特征有N个状态则可以用N位来表示
例:Feature_2有2个状态
Sample_1 = [0, 1], Sample_2 = [1, 0] …
例:Feature_1有4个状态
Sample_1 = [0, 0, 1, 0], Sample_2 = [0, 1, 0, 0] …
当一个样本有多个状态时
Sample_1 = [0, 1, 0, 0, 1, 0], Sample_2 = [1, 0, 0, 1, 0, 0] …
一点想法
不确定应该建立多大的词典时,可以考虑Corpus的大小或是每个Sample中Word的个数
词典的大小就与Corpus或Sample中Word的个数成某个比例
zh
1. 数据处理
- 去除空格
- 符号转换(省略号->句号)?
- 去除无意义符号
- 繁体转换简体