【ML】312shan的文本分类实验

Tfidf

①我只会对矩阵直接sklearn的TfidfVectorizer,调用char

②老师的方法

  • 如果是xml,先用Beautiful取出文本
  • 如果是一个个文本
  • 先取出”\t”, “\n”, “ “
  • 再转Unicoode
  • 使用jieba.cut
  • 再转回str
  • 再写入汇总的txt,每个文本写入汇总时中间加个 ‘/t’
  • 然后自己算一遍
    TF_IDF_result[word] = ((word_n / word_sum)) * (math.log10(files_num / with_word_sum))

老师项目里的方法

老师真skr神奇的东西(132shan第二个实验)

1
2
3
4
5
f.read().replace('\n', '')
data_temp = text.decode('utf-8') # 转换为unicode编码形式
data = ''.join(re.findall(u'[\u4e00-\u9fff]+', data_temp)) # 必须为unicode类型,取出所有中文字符
data2 = jieba.cut(data.encode('utf-8')) # 分词
data3 = " ".join(data2) # 结果转换为字符串(列表转换为字符串)

感受下整体操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def get_text(item):
filelist = os.listdir(base_path + 'data_train/' + item)
data_dict = {}
for files in filelist:
# print (files)
f = open(base_path + 'data_train/' + item + '/' + files, 'r')
text = f.read().replace('\n', '')
data_temp = text.decode('utf-8') # 转换为unicode编码形式
data = ''.join(re.findall(u'[\u4e00-\u9fff]+', data_temp)) # 必须为unicode类型,取出所有中文字符
data2 = jieba.cut(data.encode('utf-8')) # 分词
data3 = " ".join(data2) # 结果转换为字符串(列表转换为字符串)
data_dict[data3] = item

f2 = open('%s.txt' % item, 'a+')
for (k, v) in data_dict.items():
f2.write(v + ',' + k + ' ' + '\n')
f2.close()

结论: 老师贼牛逼的纯手工实现了一遍,没了。