当前位置:   article > 正文

自然语言处理 | (19) Python中文文本表示_python中文字能用for i in

python中文字能用for i in

本篇博客将基于TF-IDF获取一段中文文本的嵌入/向量表示,文本是指包含一句或多句话的短文本。

完整代码

目录

 

1.导入必要的包

2. 数据集

3.基于TF-IDF获取文本嵌入表示

4.总结

5. 拓展阅读


1.导入必要的包

  1. import sys,codecs
  2. import pandas as pd
  3. import numpy as np
  4. import jieba.posseg
  5. import jieba.analyse
  6. from sklearn import feature_extraction
  7. from sklearn.feature_extraction.text import TfidfTransformer
  8. from sklearn.feature_extraction.text import CountVectorizer

2. 数据集

  1. #读取数据集
  2. dataFile = './data/sample_data.csv' #数据集路径
  3. data = pd.read_csv(dataFile)
  4. print(len(data)) #数据量
  5. print(data.head(3)) #前三条数据

该数据集包含10条数据,每条数组有id,标题,摘要三个字段。

3.基于TF-IDF获取文本嵌入表示

  1. #数据预处理
  2. def dataPrepos(text):
  3. l = []
  4. pos = ['n','nz','v','vd','vn','l','a','d'] #定义选取的词性
  5. seg = jieba.posseg.cut(text) #对文本进行分词和词性标注
  6. for i in seg: #形式 [pair(word,flag),...]
  7. if i.word and i.flag in pos: #词性筛选
  8. l.append(i.word)
  9. return l
  1. #基于TF-IDF获取文本的嵌入表示
  2. def getTfidfTextEmbedding(data):
  3. #每条数据包含id title 和 abstract三个部分
  4. idList, titleList, abstractList = data['id'], data['title'], data['abstract']
  5. corpus = [] #将所有文本放在一个列表中,列表中的每一个元素代表一段文本
  6. for index in range(len(idList)):#通过索引 遍历每条数据
  7. text = '%s。%s' % (titleList[index],abstractList[index])#拼接标题和摘要
  8. text = dataPrepos(text) #对拼接后的文本进行预处理 返回处理后的单词列表
  9. text = " ".join(text) #用" "把列表中的单词连接起来 构成一个字符串
  10. corpus.append(text)
  11. #Step1:构建词频矩阵,将文本中的词语转换为词频矩阵
  12. vectorizer = CountVectorizer()
  13. '''
  14. X是词频矩阵,X[i][j]表示第j个词在第i个文本中出现的次数
  15. X的各个列对应词典中的各个单词
  16. X的各个行对应各个文本
  17. '''
  18. X = vectorizer.fit_transform(corpus)
  19. #Step2:统计每个词的tf-idf值
  20. transformer = TfidfTransformer()
  21. tfidf = transformer.fit_transform(X)
  22. #Step3:获取词袋模型中的关键词 word为词典
  23. word = vectorizer.get_feature_names()
  24. print(len(word)) #词典大小
  25. #Step4:获取tf-idf矩阵,weight[i][j]代表第j个词在第i个文本中的tf-idf值
  26. '''
  27. weight矩阵的每一行对应一段文本,为该文本的向量表示,维度与词典大小相同
  28. 向量中的值为该文本中词语的tf-idf值,0值表示该文本中没有出现该词
  29. '''
  30. weight = tfidf.toarray()
  31. ids,titles,keys = [],[],[]
  32. for i in range(len(weight)):#遍历每段文本
  33. print(u"-------这里输出第", i+1 , u"篇文本中词语的tf-idf值(向量表示)------")
  34. ids.append(idList[i])
  35. titles.append(titleList[i])
  36. df_word,df_weight = [],[] # 当前文章的所有词汇列表、词汇对应权重列表
  37. for j in range(len(word)):
  38. print (word[j],weight[i][j])
  39. getTfidfTextEmbedding(data)

4.总结

  • 综合所有的文本组成一个语料库,对语料库进行分词,去重,调整顺序得到词典(代码中的方法自动实现)。
  • 每段文本都被表示成了一个237维的向量,237是词典的大小。
  • 对于某个文本中出现的词,计算它的tf-idf值,并把该值填入该文本向量中对应的位置(对应该词在词典中的位置/索引)。
  • 基于TF-IDF不仅可以得到文本的向量表示;还可以得到文本的关键词,在上述代码基础上,可以对文本中词语的TF-IDF值进行排序,选取前K个作为文本关键词,也可以像之前博客中介绍的那样,直接调包得到文本的关键词。

5. 拓展阅读

 

 

 

 

 

 

 

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

闽ICP备14008679号