当前位置:   article > 正文

利用python文章关键信息提取_python 格式不固定的关键信息抽取

python 格式不固定的关键信息抽取

1.Count Vector

单词在一句话中出现的频数,向量化表示,句子——>数值向量。

优点:简单易理解。

缺点:当语料库很大时,向量化后可能会是稀疏矩阵,后续计算会出现麻烦。

优化:可用出现最频繁的词来构建语料库。

例子:

句子1:这只皮靴号码大了,那只号码合适

句子2:这只皮靴号码不小,那只更合适

  1. import pandas as pd
  2. import math
  3. import jieba
  4. # 用jieba进行分词
  5. textA = '这只皮靴号码大了,那只号码合适'
  6. textB = '这只皮靴号码不小,那只更合适'
  7. bowA = list(jieba.cut(textA))
  8. # print(bowA)
  9. print('/'.join(bowA))
  10. bowA.remove(',')
  11. # print(bowA)
  12. bowB = list(jieba.cut(textB))
  13. print('/'.join(bowB))
  14. bowB.remove(',')
  15. list_ = [bowA, bowB]
  16. #print(list_)
  17. # 构建语料库
  18. word_set = set(bowA).union(set(bowB))
  19. print(word_set)
  20. word_dictA = dict.fromkeys(word_set, 0)
  21. word_dictB = dict.fromkeys(word_set, 0)
  22. # 构建语料库中单词所对应的索引
  23. word_index_dict = {}
  24. for index, word in enumerate(word_set):
  25. word_index_dict[word]=index
  26. #print(word_index_dict)
  27. # 计算count vector
  28. count_vector = []
  29. for text in list_:
  30. vector_list=[0]*len(word_set)
  31. for word in text:
  32. vector_list[word_index_dict[word]]+=1
  33. #print(vector_list)
  34. count_vector.append(vector_list)
  35. print('count vector:',count_vector)

2.TF-IDF

TF-IDF(词频-逆文件频率):对于一个word,在文档出现的频率高,但在语料库里出现频率低,那么这个word对该文档的重要性比较高,用于找出文章中的关键词。

优点:简单快速,好理解。

缺点:单纯用词频来衡量重要性,忽略了单词在文章中位置带来的影响,不够全面。

2.1.计算方法

TF(词频计算方法):

(1)某个词在文章中出现的次数 / 文章的总词数(常用)

(2)某个词在文章中出现的次数 / 该文出现次数最多词的出现次数

IDF (逆文件频率计算方法):

    反文档频率(IDF)= log( 语料库的文档总数 / (包含该词的文档数 + 1) )

TF-IDF:

   TF-IDF= TF*IDF

 例子:

句子1:这只皮靴号码大了,那只号码合适

句子2:这只皮靴号码不小,那只更合适

  1. import pandas as pd
  2. import math
  3. import jieba
  4. import numpy as np
  5. # 用jieba进行分词
  6. textA = '这只皮靴号码大了,那只号码合适'
  7. textB = '这只皮靴号码不小,那只更合适'
  8. bowA = list(jieba.cut(textA))
  9. # print(bowA)
  10. '/'.join(bowA)
  11. bowA.remove(',')
  12. #print(bowA)
  13. bowB = list(jieba.cut(textB))
  14. '/'.join(bowB)
  15. bowB.remove(',')
  16. # 构建语料库
  17. word_set=set(bowA).union(set(bowB))
  18. #print(word_set)
  19. word_dictA = dict.fromkeys(word_set,0)
  20. word_dictB = dict.fromkeys(word_set,0)
  21. for word in bowA:
  22. word_dictA[word] += 1
  23. for word in bowB:
  24. word_dictB[word] += 1
  25. print('出现次数:\n',pd.DataFrame([word_dictA,word_dictB]))
  26. # 计算TF
  27. def computeTF(word_dict,bow):
  28. tf_Dict = {}
  29. bowcount = len(bow)
  30. for key,values in word_dict.items():
  31. tf_Dict[key] = values / float(bowcount)
  32. return tf_Dict
  33. tfbowa = computeTF(word_dictA,bowA)
  34. tfbowb = computeTF(word_dictB,bowB)
  35. print('TF:\n',pd.DataFrame([tfbowa,tfbowb]))
  36. # 计算IDF
  37. def computeIDF(dolist):
  38. idf_dict={}
  39. # 语料库文档总数
  40. n=len(dolist)
  41. # 初始化idf字典
  42. idf_dict = dict.fromkeys(dolist[0].keys(),0)
  43. # 包含该词文档数
  44. for doc in dolist:
  45. for word, val in doc.items():
  46. if val>0:
  47. idf_dict[word] += 1
  48. # 计算idf
  49. for word, val in idf_dict.items():
  50. idf_dict[word]=math.log10(n+10/(float(val)+1))
  51. print('文档总数:',n)
  52. #print('IDF:\n',idf_dict)
  53. return idf_dict
  54. idf = computeIDF([word_dictA,word_dictB])
  55. print('IDF:\n',pd.DataFrame([idf]))
  56. # 计算TF-IDF
  57. def computeTF_IDF(tfbow, idf):
  58. tfidf={}
  59. for word,val in tfbow.items():
  60. tfidf[word] = idf[word]*val
  61. return tfidf
  62. tfidf_A=computeTF_IDF(tfbowa,idf)
  63. tfidf_B=computeTF_IDF(tfbowb,idf)
  64. print('TF-IDF:\n',pd.DataFrame([tfidf_A,tfidf_B]))

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

闽ICP备14008679号