共现,顾名思义 ,共同出现。共现分析有多种,比如分析参考文献、作者、词汇对(关键词)、作者机构等同时出现的情况,分析两者之间的密切联系。
在科研中貌似出现最多的是共词分析,即根据词汇在同一篇论文中共同出现的次数来确定联系,根据词频分析或者聚类分析可以找出词语之间的联系,从而更好地找出文章的主题。还 可以基于某一领域多篇文章的关键词,利用词频分析、聚类分析、关联分析等揭示主题间的依存关系,从而找出该领域的研究热点或者主题的发展演变。
词汇之间的度量不像数学中的向量,计算欧式距离即可,因此要想办法转化为向量,从而计算相似度(欧式距离、余弦相似度),在共现分钟中,我们采用的是共现矩阵,一般是通过词汇对同时出现的 频数来刻画。以下面例子说明:
I like the star.
I like to go shopping.
词汇 | I | like | the | star | to | go | shopping |
---|---|---|---|---|---|---|---|
I | 0 | 2 | 1 | 0 | 1 | 0 | 0 |
like | 2 | 0 | |||||
the | 1 | 1 | 0 | ||||
star | 0 | 1 | 1 | 0 | |||
to | 1 | 1 | 0 | 0 | 0 | ||
go | 0 | 1 | 0 | 0 | 1 | 0 | |
shopping | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
首先我们需要将两个句子构成 一个词袋{I like the star to go shopping} 然后以此建立矩阵分析词汇对共同出现的次数,这时候需要确定窗口长度 (给度量词汇对共同出现一个限制,超过该窗口长度便不再认为共同出现),这时候设定窗口长度为5,即选定的中心词左右长度为2,2个词以内认为共同出现。这时候利用词频可构建上述共现矩阵。
其实共现矩阵中的行|列可以作为该词的词向量,当然这时候需要大样本量来训练但是这会涉及到一个问题,所涉及的样本量越多,词向量的维度也会随之增大(向量长,维数灾难),向量稀疏性高(向量内积均等于0/两个词语的词向量多数正交,不易分类),向量不够稳健。若用此来构建词向量这时候可以采用的一个方法是利用奇异值分解降为低维向量。
利用词频构造词向量缺乏考虑词汇间的语义关系,语言的博大精深,不能只考虑字面。word2vec可以解决此问题,有时间再详细解释。
本来想基于知网的关键词进行研究,在爬虫时总有些问题,于是转变策略,研究了最近热门剧《冰糖炖雪梨》的人物关系。
基于小说做了个词云图,贴个代码
import requests
import os
import json
import time
import random
from wordcloud import WordCloud, ImageColorGenerator
from os import path
#from scipy.misc import imread
import matplotlib.pyplot as plt
from matplotlib.pyplot import imread
import jieba
import numpy
# 添加自己的词库分词
def add_word(list):
for items in list:
jieba.add_word(items)
d = path.dirname(__file__)# 获取当前文件路径
def jiebaclearText(text):
my_words_list = ['黎语冰','棠雪'] # 在结巴的词库中添加新词
add_word(my_words_list)
mywordlist = []
stopwords_path ='E:\Python\爬虫学习\stopwords1893.txt' # 停用词词表
seg_list = jieba.cut(text, cut_all=False)
liststr="/ ".join(seg_list)
f_stop = open(stopwords_path)
try:
f_stop_text = f_stop.read( )
f_stop_text=str