亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

python共現(xiàn)矩陣的實(shí)現(xiàn)代碼

89542767 / 1000人閱讀


  小編寫這篇文章的主要目的,主要是給大家介紹,關(guān)于python中,共現(xiàn)矩陣代碼實(shí)現(xiàn)方式的問題,下面就給大家進(jìn)行詳細(xì)的解答。


  python共現(xiàn)矩陣實(shí)現(xiàn)


      最近在學(xué)習(xí)python詞庫的可視化,其中有一個(gè)依據(jù)共現(xiàn)矩陣制作的可視化,感覺十分炫酷,便以此復(fù)刻。

0.png

  項(xiàng)目背景


  本人利用搜索引擎爬蟲,以此用來獲取各大博客網(wǎng)站的文章,在進(jìn)行jieba分詞,得到每篇文章的關(guān)鍵詞,對(duì)這些關(guān)鍵詞進(jìn)行共現(xiàn)矩陣的可視化。


  什么是共現(xiàn)矩陣


  比如我們有兩句話:


  

ls=['我永遠(yuǎn)喜歡小澤瑪利亞','小澤瑪利亞又出新作了']


  在jieba分詞下我們可以得到如下效果:

1.png

  我們就可以構(gòu)建一個(gè)以關(guān)鍵詞的共現(xiàn)矩陣:


  ['','我','永遠(yuǎn)','喜歡','小澤','瑪利亞,'又','出','新作','了']
  ['我',0,1,1,1,1,0,0,0,0]
  ['永遠(yuǎn)',1,0,1,1,1,0,0,0,0]
  ['喜歡'1,1,0,1,1,0,0,0,0]
  ['小澤',1,1,1,0,1,1,1,1,1]
  ['瑪利亞',1,1,1,1,0,1,1,1,1]
  ['又',0,0,0,1,1,0,1,1,1]
  ['出',0,0,0,1,1,1,0,1,1]
  ['新作',0,0,0,1,1,1,1,0,1]
  ['了',0,0,0,1,1,1,1,1,0]]


  解釋一下,“我永遠(yuǎn)喜歡小澤瑪利亞”,這一句話中,“我”和“永遠(yuǎn)”共同出現(xiàn)了一次,在共現(xiàn)矩陣對(duì)應(yīng)的[i][j]和[j][i]上+1,并依次類推。


  基于這個(gè)原因,我們可以發(fā)現(xiàn),共現(xiàn)矩陣的特點(diǎn)是:


  共現(xiàn)矩陣的[0][0]為空。


  共現(xiàn)矩陣的第一行第一列是關(guān)鍵詞。


  對(duì)角線全為0。


  共現(xiàn)矩陣其實(shí)是一個(gè)對(duì)稱矩陣。


  當(dāng)然,在實(shí)際的操作中,這些關(guān)鍵詞是需要經(jīng)過清洗的,這樣的可視化才干凈。


  共現(xiàn)矩陣的構(gòu)建思路


  每篇文章關(guān)鍵詞的二維數(shù)組data_array。


  所有關(guān)鍵詞的集合set_word。


  建立關(guān)鍵詞長度+1的矩陣matrix。


  賦值矩陣的第一行與第一列為關(guān)鍵詞。


  設(shè)置矩陣對(duì)角線為0。


  遍歷formated_data,讓取出的行關(guān)鍵詞和取出的列關(guān)鍵詞進(jìn)行組合,共現(xiàn)則+1。


  共現(xiàn)矩陣的代碼實(shí)現(xiàn)


 

 #coding:utf-8
  import numpy as np
  import pandas as pd
  import jieba.analyse
  import os
  #獲取關(guān)鍵詞
  def Get_file_keywords(dir):
  data_array=[]#每篇文章關(guān)鍵詞的二維數(shù)組
  set_word=[]#所有關(guān)鍵詞的集合
  try:
  fo=open('dic_test.txt','w+',encoding='UTF-8')
  #keywords=fo.read()
  for home,dirs,files in os.walk(dir):#遍歷文件夾下的每篇文章
  for filename in files:
  fullname=os.path.join(home,filename)
  f=open(fullname,'r',encoding='UTF-8')
  sentence=f.read()
  words="".join(jieba.analyse.extract_tags(sentence=sentence,topK=30,withWeight=False,
  allowPOS=('n')))#TF-IDF分詞
  words=words.split('')
  data_array.append(words)
  for word in words:
  if word not in set_word:
  set_word.append(word)
  set_word=list(set(set_word))#所有關(guān)鍵詞的集合
  return data_array,set_word
  except Exception as reason:
  print('出現(xiàn)錯(cuò)誤:',reason)
  return data_array,set_word
  #初始化矩陣
  def build_matirx(set_word):
  edge=len(set_word)+1#建立矩陣,矩陣的高度和寬度為關(guān)鍵詞集合的長度+1
  '''matrix=np.zeros((edge,edge),dtype=str)'''#另一種初始化方法
  matrix=[[''for j in range(edge)]for i in range(edge)]#初始化矩陣
  matrix[0][1:]=np.array(set_word)
  matrix=list(map(list,zip(*matrix)))
  matrix[0][1:]=np.array(set_word)#賦值矩陣的第一行與第一列
  return matrix
  #計(jì)算各個(gè)關(guān)鍵詞的共現(xiàn)次數(shù)
  def count_matrix(matrix,formated_data):
  for row in range(1,len(matrix)):
  #遍歷矩陣第一行,跳過下標(biāo)為0的元素
  for col in range(1,len(matrix)):

  共現(xiàn)矩陣(共詞矩陣)計(jì)算


  共現(xiàn)矩陣(共詞矩陣)


  統(tǒng)計(jì)文本中兩兩詞組之間共同出現(xiàn)的次數(shù),以此來描述詞組間的親密度


  code(我這里求的對(duì)角線元素為該字段在文本中出現(xiàn)的總次數(shù)):


  import pandas as pd
  def gx_matrix(vol_li):
  #整合一下,輸入是df列,輸出直接是矩陣
  names=locals()
  all_col0=[]#用來后續(xù)求所有字段的集合
  for row in vol_li:
  all_col0+=row
  for each in row:#對(duì)每行的元素進(jìn)行處理,存在該字段字典的話,再進(jìn)行后續(xù)判斷,否則創(chuàng)造該字段字典
  try:
  for each1 in row:#對(duì)已存在字典,循環(huán)該行每個(gè)元素,存在則在已有次數(shù)上加一,第一次出現(xiàn)創(chuàng)建鍵值對(duì)“字段:1”
  try:
  names['dic_'+each][each1]=names['dic_'+each][each1]+1#嘗試,一起出現(xiàn)過的話,直接加1
  except:
  names['dic_'+each][each1]=1#沒有的話,第一次加1
  except:
  names['dic_'+each]=dict.fromkeys(row,1)#字段首次出現(xiàn),創(chuàng)造字典
  #根據(jù)生成的計(jì)數(shù)字典生成矩陣
  all_col=list(set(all_col0))#所有的字段(所有動(dòng)物的集合)
  all_col.sort(reverse=False)#給定詞匯列表排序排序,為了和生成空矩陣的橫向列名一致
  df_final0=pd.DataFrame(columns=all_col)#生成空矩陣
  for each in all_col:#空矩陣中每列,存在給字段字典,轉(zhuǎn)為一列存入矩陣,否則先創(chuàng)造全為零的字典,再填充進(jìn)矩陣
  try:
  temp=pd.DataFrame(names['dic_'+each],index=[each])
  except:
  names['dic_'+each]=dict.fromkeys(all_col,0)
  temp=pd.DataFrame(names['dic_'+each],index=[each])
  df_final0=pd.concat([df_final0,temp])#拼接
  df_final=df_final0.fillna(0)
  return df_final
  if __name__=='__main__':
  temp1=['狗','獅子','孔雀','豬']
  temp2=['大象','獅子','老虎','豬']
  temp3=['大象','北極熊','老虎','豬']
  temp4=['大象','狗','老虎','小雞']
  temp5=['狐貍','獅子','老虎','豬']
  temp_all=[temp2,temp1,temp3,temp4,temp5]
  vol_li=pd.Series(temp_all)
  df_matrix=gx_matrix(vol_li)
  print(df_matrix)

  輸入是整成這個(gè)樣子的series

1.png

  最后轉(zhuǎn)為df

4.png

  求出每個(gè)字段與各字段的出現(xiàn)次數(shù)的字典

2.png

  補(bǔ)充一點(diǎn)


  這里如果用大象所在列,除以大象出現(xiàn)的次數(shù),比值高的,表明兩者一起出現(xiàn)的次數(shù)多,如果這列比值中,有兩個(gè)元素a和b的比值均大于0.8(也不一定是0.8啦),就是均比較高,則說明a和b和大象三個(gè)一起出現(xiàn)的次數(shù)多?。?!


  即可以求出文本中經(jīng)常一起出現(xiàn)的詞組搭配,比如這里的第二列,大象一共出現(xiàn)3次,與老虎出現(xiàn)3次,與豬出現(xiàn)2次,則可以推導(dǎo)出大象,老虎,豬一起出現(xiàn)的概率較高。


  也可以把出現(xiàn)總次數(shù)拎出來,放在最后一列,則代碼為:


  #計(jì)算每個(gè)字段的出現(xiàn)次數(shù),并列為最后一行


  df_final['all_times']=''


  for each in df_final0.columns:


  df_final['all_times'].loc[each]=df_final0.loc[each,each]


  放在上述代碼df_final=df_final0.fillna(0)的后面即可


  結(jié)果為

5.png

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/127711.html

相關(guān)文章

  • Python 提取《釜山行》人物關(guān)系

    摘要:項(xiàng)目代碼下載地址基于共現(xiàn)提取釜山行人物關(guān)系更多經(jīng)典項(xiàng)目全部項(xiàng)目 項(xiàng)目簡介:本項(xiàng)目將帶大家使用 Python 提取《釜山行》人物關(guān)系,對(duì)于給定的劇本文本,通過分析文本中人物的共現(xiàn)關(guān)系,提取整個(gè)文本表示的人物關(guān)系,并將人物關(guān)系可視化表示。本項(xiàng)目教程由Forec發(fā)布在實(shí)驗(yàn)樓。 一、項(xiàng)目介紹 1. 內(nèi)容簡介 《釜山行》是一部喪尸災(zāi)難片,其人物少、關(guān)系簡單,非常適合我們學(xué)習(xí)文本處理。這個(gè)項(xiàng)目將介...

    hoohack 評(píng)論0 收藏0
  • textrank-jieba 算法復(fù)現(xiàn)

    摘要:根據(jù)算法的思路,手動(dòng)復(fù)現(xiàn)算法。根據(jù)窗口大小,組合共現(xiàn)詞和頻率,頻率代表共現(xiàn)權(quán)重。正反雙向共現(xiàn)詞。根據(jù)每個(gè)詞的權(quán)重的迭代公式,采用冒泡排序的方法,將一個(gè)詞的所有共現(xiàn)詞的權(quán)重代入公式。迭代次,使每個(gè)詞的權(quán)重收斂。根據(jù)權(quán)重排序,輸出。 根據(jù)jieba textrank算法的思路,手動(dòng)復(fù)現(xiàn)textrank算法。思路:1.分詞,確定窗口大小。 2.根據(jù)窗口大小,組合共現(xiàn)詞和頻率,頻率代表共現(xiàn)...

    imingyu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<