当前位置:   article > 正文

文本预处理——分词+TF-IDF_sklearn 分词

sklearn 分词

1.分词

1.1 基础分词

jieba.cut()

import jiaba
cut_result=' '.join(jieba.cut('给我点赞吧!哈,哈。哈;哈?'))
  • 1
  • 2

结果:
在这里插入图片描述
注意这里,用‘ ’来join就代表着用空格来将词分开,也可以使用“、”“/”等

1.2 去除标点符号

想要去除标签符号,可以使用replace()

sen_exp='给我点赞吧!哈,哈。哈;哈?'
#sen_exp.replace('!',' ').replace(',',' ').replace('。',' ').replace(';',' ').replace('?',' ')
sen_exp=sen_exp.replace('!',' ').replace(',',' ').replace('。',' ').replace(';',' ').replace('?',' ')
cut_result=' '.join(jieba.cut(sen_exp))
  • 1
  • 2
  • 3
  • 4

结果:
在这里插入图片描述
注意一定要sen_exp=一下,不然是不会有改变的

1.3 自定义词典

方法1:直接load_userdict()
txt的格式为
在这里插入图片描述
也可以在每个词后面加词频、词性;以空格分隔。

方法二:利用add_word()

jieba.add_word('给我')
cut_result=' '.join(jieba.cut(sen_exp))
  • 1
  • 2

结果变为了:
在这里插入图片描述
和上面的是不是不一样!

import codecs
import jieba
jieba.load_userdict("指标.txt")
with codecs.open('指标.txt','r',encoding='utf-8') as f:
    zhibiao=f.readlines()
for i in range(len(zhibiao)):
    jieba.add_word(zhibiao[i].replace('\r\n',''),tag='d')#记得把换行符去掉啊
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1.4 去除停用词

停用词表可以自行下载,网上很多

with codecs.open('停用词.txt','r',encoding='gbk') as f:
    text=f.read()
stoplists=text.splitlines()
cut_stopw=[]
cut_stopw.append(''.join(list([word for word in cut_result if word not in stoplists])))
  • 1
  • 2
  • 3
  • 4
  • 5

综上,分词就完成啦

1.5 提取关键词

import jieba
import jieba.analyse
sen_exp='给我点赞吧!哈,哈。哈;哈?'
print(jieba.analyse.extract_tags(sen_exp, topK = 70, withWeight = False, allowPOS = ()))
  • 1
  • 2
  • 3
  • 4

注意,提取关键词,第一个参数放的是原始句子,不需要分词,不需要去除停用词。第二个参数代表着最大保留多少个词。
结果是:
在这里插入图片描述
是不是很方便。

2. TF-IDF

应用的时候,只要修改 cut_stopw 为你需要得到词频的数据(已分词)就好,格式为list,其他不变,就能应用

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer()   #该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频  
transformer=TfidfTransformer() #该类会统计每个词语的tf-idf权值  
tfidf=transformer.fit_transform(vectorizer.fit_transform(cut_stopw))#cut_stopw是列表形式的分词结果;如果是DataFrame格式,要list(data['列名'])
#第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵  
word=vectorizer.get_feature_names()#获取词袋模型中的所有词语  
weight=list(tfidf.toarray().T)#将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

存储

import pandas as pd
pd.concat([pd.DataFrame(word),pd.DataFrame(weight)],axis=1).to_excel(path+'.xlsx')
  • 1
  • 2

结果:
在这里插入图片描述
TF-IDF也可以用来查看这个词是否出现,可以用于标签one-hot编码
文本的读入可以参考之前的博客

接下来我们将会统计文本特征,训练word2vec模型,敬请期待

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/743976
推荐阅读
  

闽ICP备14008679号