精华内容
下载资源
问答
  • 如何通过JavaScript获取搜索引擎搜索关键词最后一次更新与:2020-08-25 16:24发布与:2019-07-15 09:02Look 7570访问获取页面的搜索引擎搜索关键词要想获取当前页面的搜索引擎搜索关键词,首先要获取到当前页面的...

    如何通过JavaScript获取搜索引擎搜索关键词

    最后一次更新与:2020-08-25 16:24

    发布与:2019-07-15 09:02

    Look 7570访问

    获取页面的搜索引擎搜索关键词

    要想获取当前页面的搜索引擎搜索关键词,首先要获取到当前页面的来源地址,我们可以通过document.referrer来获得。

    取到来源URL地址后,可以根据&进行数据拆分,拆分出一共有多少个参数,然后再根据=获得参数的值。本文将通过JavaSvript来获取当前页面的搜索关键词来源。

    6530793448b7b8098c0a5e2fabb090ae.png

    网上找了非常多,但是感觉都没用。

    想实现一个用户通过百度搜索某个关键词,然后让网页上显示出 用户搜索的那个关键词。

    比如 甲 搜索 张三 进入到我的网站 网站里 就显示 出 张三这个词

    现在不行了,百度做了个跳转,来源是跳转的网址,不再是搜索结果的那个url地址了。

    目前只能通过搜索引擎官方提供的搜索Referer API 根据eqid获取关键词

    如何获取eqid

    function GetQueryString($name){

    var $index=document.referrer.indexOf($name+"="),$e='';

    if($index>1){

    $e=document.referrer.substring($index+$name.length+1);

    if(($index=$e.indexOf("&"))>0){

    $e=$e.substring(0,$index);

    }

    }

    return $e;

    }

    // 调用方法

    var $wd=GetQueryString("wd");

    if($wd&&$wd.length>0){}else{$wd=GetQueryString("word")}

    if($wd&&$wd.length>0){

    $wd=decodeURIComponent($wd);

    alert('关于【“'+$wd+'”】的问题,很荣幸为您解答疑问!');

    }else{

    alert(' 您好,请问有什么可以帮到您?');

    }

    变量$wd的值就是所需要的eqid,存储到数据库然后使用指定方法获取。

    以上是百度搜索引擎的获取方法;

    搜狗是根据 「link?url」后的参数进行使用官方Referer API 获取搜索引擎搜索关键词。

    搜狗、好搜「360」也是同样的道理。

    今天的分享就到这里,有什么疑问或者错误可以在下方指出。

    扩展

    document.referrer属性是一个获取当前页面来源地址的方法。

    为空时表示直接输入连接访问页面。

    如何通过JavaScript获取搜索引擎搜索关键词:https://www.yzdlm.com/web/43.html

    上一篇:返回列表

    下一篇:JavaScript监听页面复制事件添加版权信息

    展开全文
  • 因为工作需要,前几天写了一爬虫,现在把它改良封装得更通用了。...# 一爬虫,用于在百度百科搜索词条,返回网页内容(以防百度封IP,每秒爬一次) ## #################### import re import requests from bs

    因为工作需要,前几天写了一个爬虫,现在把它改良封装得更通用了。
    
    它需要依赖第三方包requests和BeautifuSoup4,请使用pip3安装即可
    
    
    ####################
    ##
    # 一个爬虫,用于在百度百科搜索词条,返回网页内容(以防百度封IP,每秒爬一次)
    ##
    ####################
    import re
    import requests
    from bs4 import BeautifulSoup
    
    class webCrawlerBaiduBaike(object):
    	"""docstring for webCrawlerBaiduBaike"""
    	def __init__(self, url = 'http://baike.baidu.com/search/word'):
    		super(webCrawlerBaiduBaike, self).__init__()
    		self.url = url
    
    
    	# input keyword
    	# output resquests object
    	# url = 'http://baike.baidu.com/search/word'
    	def search(self, searchItem):
    		word = self.getWordClean(searchItem)
    		res = requests.get(self.url, params={'word':word})
    		res.encoding = 'utf-8'
    		soup = BeautifulSoup(res.text)
    
    		# 查找不到词条,那么对返回的搜索列表进行二次查询
    		if res.url[:35] == "http://baike.baidu.com/search/none?":
    			for soup in self.findInSuggestList(word, soup):
    				yield soup
    
    		# 直接进入词条
    		else:
    			# isDrug, drugCharacterIncluded = findCharacterFromHtml(soup)
    			yield soup
    
    
    	def getWordClean(self, word):
    
    		word = re.sub("\((.*)\)", "", word)
    		word = word.replace(u"★", "")
    		return word
    
    
    	# 直接查询不到条目时,百度会返回推荐条目列表。本程序会在推荐条目列表中尝试搜索合适的条目
    	def findInSuggestList(self, word, soup):
    
    		linkList = soup.find_all('a',class_ = 'result-title')
    
    		for link in linkList:
    			ajdustedItemName = link.text.replace('_百度百科',"")
    			iPos = word.find(ajdustedItemName)
    			# 找到最可能的匹配条目
    			if iPos != -1:
    				# 获得该条目的链接
    				tmpUrl = link['href']
    				res = requests.get(tmpUrl)
    				res.encoding = 'utf-8'
    				soup = BeautifulSoup(res.text)
    				yield soup
    
    
    # 使用方法 | example for using
    if __name__ == '__main__':
    
    	searchItem = input("请输入需要查询的条目:")
    	# searchItem = "待搜索的词"
    
    	crawler = webCrawlerBaiduBaike()
    	soupIter = crawler.search(searchItem)
    	isEmpty = True
    
    	for soup in soupIter:
    		text = re.sub(r"(\n)+", r"\n", soup.body.text)
    		text = re.sub(r"(\r)+", r"\r", text)
    		print(text)
    		isEmpty = False
    
    	if isEmpty:
    		print("搜索结果为空")
    



    展开全文
  • 文章目录前言效果TextRank算法PageRank算法TextRank算法共现关系滑动窗口图构建关键词抽取思路实现过程大体思路Nonebot框架介绍技术细节会话监听数据预处理分词使用TextRank算法抽取关键词并生成词云定时任务设定...

    前言

    发现自己已经很久没有更新博客了,读研的这些日子其实过得并没有想象中的那么顺利。这学期发现自己其实并不适合搞科研…唉,希望能顺利毕业吧。

    言归正传,本篇博文将介绍如何利用TextRank算法实现一个可以提取QQ群聊天热词的机器人。制作这个机器人的初衷是:有的QQ群非常活跃,可能没一会儿,消息就99+了,这样时间久了,就不想去翻历史记录了。但是在这些历史记录中,可能藏有我们感兴趣的话题,利用这个聊天机器人,就可以提取一段时间(例如一天)以内的聊天热词,这样我们就可以快速地了解这一天群内的小伙伴讨论了什么话题。

    由于我比较喜欢科幻,我就把这个机器人称为FG(Fifth Generation),这是刘慈欣长篇科幻小说《超新星纪元》里的一台超级计算机,负责协助管理那个只有孩子们的世界。本文后续也会使用FG来指代这个聊天机器人。

    效果

    在讲解FG实现的过程前,先看下FG的最终效果:
    在这里插入图片描述
    在FG的输出中,有这样几个元素

    • 词云
    • 前Top3个关键热词

    这两个元素可以说是FG的核心功能之一了。之所以说之一,是因为FG还有其他技能,但这并不是本文讨论的重点。

    TextRank算法

    TexkRank算法起源于谷歌的PageRank算法,这里先简单介绍一下PageRank算法。

    PageRank算法

    PageRank算法最早是使用在搜索引擎的网页排序中,也就是可以把某一个搜索关键词相关的,最重要的网页排在前面。这个算法的主要思想是参考了民主投票的思想。

    考虑这样的一幅图结构,图中的每一个节点表示一个网站,节点之间的有向边表示弧头的网站中有一个链接指向了弧尾的网站。

    在这里插入图片描述
    下面介绍PageRank的计算过程,在PageRank算法中,使用PR值来衡量一个网站的重要性:

    • 刚开始的时候,假设所有网站的PR值都是一样的,为 1 n \frac{1}{n} n1,其中 n n n表示网站的总数量。例如上图, n = 4 n=4 n=4,于是每一个网站的初始PR值为 1 4 \frac{1}{4} 41
    • 对于每一个网站,其出度的个数表示了这个网站“投”给其他网站的票数,也就是说,要将自己的PR值平均分给这些网站。例如上图,网站A有3个出度,那么A将自己的PR值平均分给网站B、C、D,每一个站点收到的值为 1 4 ∗ 1 3 = 1 12 \frac{1}{4} * \frac{1}{3} =\frac{1}{12} 4131=121
    • 对于一个网站来说,其一次迭代后的PR值为其他网站“投”给自己票数的总和。例如上图中的网站B,收到了来自网站A和D的投票。因此,网站B的PR值为 1 12 + 1 8 = 5 24 \frac{1}{12} + \frac{1}{8} = \frac{5}{24} 121+81=245
    • 重复第二步和第三步,直到每一个网站的PR值收敛即可

    我们可以引入矩阵来加快计算的过程,这个矩阵叫做概率转移矩阵,其中的每一个元素代表了从某一个网站跳转到其他网站的概率。

    上图的概率转移矩阵如下:

    M = [ 0 1 / 2 0 1 / 2 1 / 3 0 0 1 / 2 1 / 3 1 / 2 0 0 1 / 3 0 1 0 ] M = \begin{bmatrix} 0&1/2& 0& 1/2\\ 1/3& 0& 0& 1/2\\ 1/3 & 1/2 & 0& 0\\ 1/3& 0& 1& 0 \end{bmatrix} M=01/31/31/31/201/2000011/21/200

    注意与图邻接矩阵的区别:

    • 邻接矩阵:行表示出度,列表述入度
    • 概率转移矩阵:行表示入度,列表示出度。也就是说,每一列表示从该网站跳转到其他网站的概率

    然后将所有网站的PR值构建一个列向量:
    r a n k = [ 1 / 4 1 / 4 1 / 4 1 / 4 ] rank = \begin{bmatrix} 1/4\\ 1/4\\ 1/4\\ 1/4\\ \end{bmatrix} rank=1/41/41/41/4

    然后利用矩阵的乘法运算,就可以批量求PR值了

    M ∗ r a n k = [ 1 / 4 5 / 24 5 / 24 1 / 3 ] M * rank = \begin{bmatrix} 1/4 \\ 5/24\\ 5/24\\ 1/3\\ \end{bmatrix} Mrank=1/45/245/241/3

    将上述过程写成一个高大上的公式是这样的:
    P R ( i ) = ∑ j ∈ i n ( i ) P R ( j ) ∣ o u t ( j ) ∣ PR(i) = \sum_{j\in in(i)}{\frac{PR(j)}{|out(j)|}} PR(i)=jin(i)out(j)PR(j)
    其中, i n ( i ) in(i) in(i)表示指向节点i的节点集合, ∣ o u t ( j ) ∣ |out(j)| out(j)表示指向节点i的节点集合中,第j个节点的出度。

    上述就是传统的PageRank算法,但是这样存在两个问题:

    • Rank Leak:等级泄漏,即遍历到后面,所有网站的PR值接近为0。用一句形象一点的话说,就像一桶水,由于桶上有裂缝,水漏光了。这种情况会在一个网页没有指向其他网页时发生
    • Rank Sink:等级沉没,即遍历到后面,PR值无法收敛。这种情况会在一个网页只有出度,没有入度的情况下发生

    为了解决这个问题,需要引入一个随机游走概率 d d d,这个概率 d d d表示用户会有 % d \%d %d的概率在网站内跳转,有 % 1 − d \%1-d %1d的概率通过在浏览器中输入新网址,访问其他的网站。
    改进后的单点迭代公式如下:
    P R ( i ) = d ∗ ∑ j ∈ i n ( i ) P R ( j ) ∣ o u t ( j ) ∣ + ( 1 − d ) ∗ 1 N PR(i) = d * \sum_{j\in in(i)}{\frac{PR(j)}{|out(j)|}} + (1-d) * \frac{1}{N} PR(i)=djin(i)out(j)PR(j)+(1d)N1
    其中 N N N为网站数量, d d d一般取0.85。

    TextRank算法

    讲完了PageRank算法,下面就要介绍TextRank算法了。在我看来,TextRank算法是PageRank算法在自然语言处理领域的一次成功应用。

    TextRank算法的创新在于图构建,下面会介绍两个重要的概念,共现关系滑动窗口

    共现关系

    共现关系从字面上来看就是共同出现,也就是说,“共现”是指文献的特征描述信息共同出现的现象。在文献计量学中,关键词的共现方法常用来确定该文献所代表的学科中各主题词之间的关系。

    例如在分析小说中人物之间的关系时,就可以使用共现关系。

    滑动窗口

    这个概念也比较容易理解,就是在文本上放置一个大小为 n n n的滑窗,让这个滑窗慢慢地滑过整片文章。

    图构建

    有了词共现关系和滑动窗口后,我们就可以开始构建图了,与PageRank算法不同,这里我们需要构建一个无向无权图。至于为什么要构造无向图,我的理解是无向图可以避免PageRank的那两个问题,另外一个原因是官方对无向图测试的比较多。

    在TextRank算法中,图的顶点是候选关键词,对于图的边,做如下定义:

    对于图中的任意两个节点,如果它们之间存在边,当且仅当它们所对应的关键词在滑动窗口中共同出现。

    其中,官方实验表明,滑动窗口的大小越小,得到的结果会越精确

    下面就举例说明如何构建图:

    假设有这样一句话:

    宁波有什么特产能在上海世博会占有一席之地呢?

    我们对其进行分词操作(去除停顿词和语气词),得到以下分词结果:

    宁波、特产、上海、世博会、占有、一席之地
    

    假设滑动窗口的大小为5,那么我们可以构建这样的一副图
    在这里插入图片描述
    图中的黄框和蓝框表示两次滑动窗口的结果。

    关键词抽取思路

    将文字构建成图后,我们可以用一个标记对应图中的一个节点,然后利用以下公式迭代至收敛即可(这个公式与PageRank很像,但是 1 − d 1-d 1d没有乘 1 N \frac{1}{N} N1)。
    P R ( i ) = d ∗ ∑ j ∈ i n ( i ) P R ( j ) ∣ o u t ( j ) ∣ + ( 1 − d ) PR(i) = d * \sum_{j\in in(i)}{\frac{PR(j)}{|out(j)|}} + (1-d) PR(i)=djin(i)out(j)PR(j)+(1d)
    公式中参数的含义是与PageRank一致的。
    将每一个词的PR值迭代到收敛,然后将PR值从大到小排序,就可以抽取出目标文本的关键词。

    实现过程

    大体思路

    经验告诉我们,对于同一个话题的讨论,往往会是上下文连续的,因此我们可以把聊天记录看做是一篇文章,然后利用关键词提取算法就可以提取出某一段时间内的热词了。思想还是非常简单直接的。

    • 可能有的朋友会问为什么不使用词频统计,那是因为单纯的词频统计没有办法将词与词之间的联系表达出来,导致这种方式一般效果都不好,因此不采用词频统计。

    提取出关键词后,可以利用词云进行可视化展示,词云是目前文本可视化最简单直观的方式,但是如果多个关键词的权重差不多,那么就难以分辨轻重,因此,FG将前3个热词使用文本的方式输出。

    Nonebot框架介绍

    Nonebot是一款基于Python的异步QQ机器人框架,在酷Q关停之前是酷Q的插件之一,现在已有大神将其移植到Mirai上,同样作为插件提供。

    技术细节

    会话监听

    Nonebot会监听目标QQ群中所有群成员的会话,并会触发async def handleGroupMsg(session)方法,我们可以在这个方法中,将群内的聊天记录记录到磁盘。
    在FG中,对于每一个监听的群,都会有一个独立的文件夹放置其文件。

    • 由于在抽取关键词的过程中会有IO操作,为了避免对同一个文件既读又写的情况,在FG中设定了两个文件,chatA.txtchatB.txt,它们使用布尔变量进行控制,在进行关键词抽取前完成对文件的切换。
    @bot.on_message('group')
    async def handleGroupMsg(session):
        groupInfo = configuration['groupInfo']
        for each in groupInfo:
            if each['groupId'] == str(session['group_id']):
                # 读取每个群文件夹的pkl
                dataDict = IOUtils.deserializeObjFromPkl(os.path.join(os.getcwd(),'cn','acmsmu','FG','data',each['groupId'],'var.pkl'))
                # 确定flag的值
                flag = dataDict['flag']
                # 确定要往哪一个文件中写入聊天记录
                msg = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + ' ' + str(session['user_id']) + '\n' + session['raw_message'] + '\n'
                if flag:
                    with open(os.path.join(os.getcwd(),'cn','acmsmu','FG','data',each['groupId'],'chatA.txt'), 'a', encoding='utf-8') as fileA:
                        fileA.write(msg)
                else:
                    with open(os.path.join(os.getcwd(),'cn','acmsmu','FG','data',each['groupId'],'chatB.txt'), 'a', encoding='utf-8') as fileB:
                        fileB.write(msg)
                break
    

    数据预处理

    由于原始的聊天记录中,会包含一些链接、QQ号、CQ码(酷Q的历史遗留产物)、还有多余的空行,所以要对聊天记录进行清洗。
    在清洗的过程中,需要记录聊天记录的开始时间,为后面输出做准备。

     # 数据预处理
    def __cleaning(self):
          chatlog = ''
          try:
              with open(os.path.join(os.path.join(os.getcwd(),'cn','acmsmu','FG','data',self.__groupId,self.__useFile)),'r',encoding='utf-8')as f:
                  isFirst = True
                  for eachLine in f:
                      # 获取聊天记录开始时间
                      if isFirst:
                          res = re.search('^\d{4}-\d{2}-\d{1,2} \d{1,2}:\d{2}:\d{2}',eachLine)
                          pos = res.span()
                          self.__beginTime = eachLine[pos[0]:pos[1]]
                          isFirst = False
                      else:
                          if re.search('^\d{4}-\d{2}-\d{1,2} \d{1,2}:\d{2}:\d{2} \d{5,11}',eachLine) is None:
                              # 正则非贪婪模式 过滤CQ码
                              eachLine = re.sub('\[CQ:\w+,.+?\]','',eachLine)
                              #过滤URL
                              eachLine = re.sub('(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]','',eachLine)
                              # 特殊情况过滤
                              eachLine = eachLine.replace('[视频]你的QQ暂不支持查看视频短片,请升级到最新版本后查看。','')
                              if eachLine == '\n':
                                  continue
                              chatlog += eachLine
          except:
              traceback.print_exc()
          return chatlog
    

    分词

    这里先做一个说明:

    • 为了稳定性考虑,TextRank算法我是调库了,textrank4zh,不过我也自己实现了该算法,代码已放在代码仓库中。

    textrank4zh中,是使用jieba分词进行分词的。这一款工具支持自定义词典和停顿词,可以满足用户的定制需求,当然需要实现需要改动textrank4zh的源码,不是很方面,后期考虑将这个功能引入到FG的配置文件中。

    使用TextRank算法抽取关键词并生成词云

    TextRank算法没啥好说的了,聊天记录清洗完毕后,调用库函数就可以直接生成候选关键词的倒序序列了。词云我使用的wordcloud库,TextRank算法对于每一个候选关键词的PR值可以作为wordcloud的词频参数。

    # 关键词抽取
    tr4w = TextRank4Keyword()
    tr4w.analyze(text=chatlog,lower=True,window=windowSize)
    wordDic = dict()
    for item in tr4w.get_keywords(keyWordNum,word_min_len=keyWordLen):
    	# 将PR值作为词频
        wordDic[item.word] = item.weight
    # 生成词云
    wc = WordCloud(font_path=fontPath,mask=mask,background_color='white')
    wc.generate_from_frequencies(wordDic)
    

    定时任务设定

    我们希望FG能在每天的固定时刻触发热词功能,因此需要一个定时器的设定,Nonebot就内置了定时任务的功能。
    我这里是对每一个群设置不同的触发时间,时间在FG的配置文件中设置

    for each in groupInfo:
        hour = each['beginHour']
        minutes = each['beginMinutes']
        nonebot.scheduler.add_job(handleTimer, 'cron',hour=hour,minute=minutes,args=[each['timer'],each['groupId']])
        print('定时器' + each['timer'] + '定时任务添加成功!')
    

    其中handleTimer为处理定时任务的回调函数,可以在其中完成聊天记录文件的切换以及热词的生成。groupInfo为QQ群的基本配置信息,包括群号、热词生成触发时间(时、分、秒)等,这些配置信息会从配置文件中读入。

    代码库

    • FG的Github仓库地址,欢迎Star或者Fork或者提供一些改进建议:https://github.com/mgsky1/FG
    • 目前FG为Nonebot生态中的示例项目

    参考资料

    1、共现关系-tian_panda的博客-CSDN
    2、MIHALCEA R, TARAU P. TextRank: Bringing Order into Text

    展开全文
  • 主要思路是将已分词的素材 source.txt 通过 word2vec 训练出一个模型 vectors.bin,再把人工挑选的种子库 feed.txt 中的种子输入模型,得到相似的词,最后获得词库。 目录文本预处理准备语料构建种子库Word2vec模拟...
    • 本文主要是记录一下自己过滤分类信息的一个步骤。
    • 主要目的是从爬取的素材中得到一个集中、有效的、有关网络暴力的中文词库。
    • 主要思路是将已分词的素材 source.txt 通过 word2vec 训练出一个模型 vectors.bin,再把人工挑选的种子库 feed.txt 中的种子输入模型,得到相似的词,最后获得词库。

    文本预处理

    我在本篇文章中使用的是从新浪微博中爬取的网友有关网暴态度倾向的材料,总数约有90万条记录,包括用户名、微博内容、发布时间等属性(UTF-8编码)。

    文本的预处理主要包括:

    1. 语料的初步过滤、去除特殊字符、特殊表情文本化和分词;
    2. 种子库的人工采集和同义联想。

    准备语料

    我使用的Excel表格来存放素材,具体结构如下:

    来源/用户名内容
    罗百辉:从0到1直播带货,从1到100打好营销这张牌给到观众的体验会更好,其次就是直播支架和补光灯,这是必备的配置。常用设备:手机、支架、补光灯、背景、T台、礼品桌、笔记本电脑、网络、挂通、熨烫机等4产品选款产品可以是新款上市、季末清仓、反季促销,根据
    许可馨还要点脸吗?为啥十年教育出一个“人渣”更是坑自己。许可馨最后会有怎样的结局,目前她的微博已经被“查封”,她的父母也被很多的网友“人肉”搜索,今后会何去何从,我们根本不关心。但不过她再次给我们提出了思考,这些孩子为何会这么优越呢?在个
    肖战风波后首度发博翻车?后援会凌晨声明,谴责黑粉引导舆论骂战明粉丝,却有人长期冒充他的粉丝蓄意发布恶意言论,以博取关注从中获利,也再次呼吁大家抵制这种行为,勿被恶意人士利用,但也有网友觉得后援会此番是在洗白,称长期有人这么做,是想把227事件甩锅到黑粉
    …………

    根据肉眼判断一些结构化的短语,如一些粉丝的反黑站微博会固定带有【网暴举报+拉黑+禁止人身攻击】类似的内容,但是实质内容与网暴无关。所以我们利用excel的筛选功能过滤这些无效内容。

    由于excel处理文本速度很慢(尤其是这种几十万的数据),所以我们将【内容】复制到记事本中处理,得到 pre_source.txt 文件。

    可以去除无关的标点符号、表情符号等,对于有特定表达形式和含义的表情(如🐴、🐶、🐔、👴等)可以用其对应的文本代替。

    最后我们利用 python 中的 jieba 来对文本进行分词处理。
    具体代码如下:

    import jieba
    
    fR = open('pre_ource.txt', 'r', encoding='UTF-8')
    
    sent = fR.read()
    sent_list = jieba.cut(sent)
    
    fW = open('source.txt', 'w', encoding='UTF-8')//将分词结果输出到"source.txt"中
    fW.write(' '.join(sent_list))
    
    fR.close()
    fW.close()
    
    

    最后的效果大概如下:

    source.txt
    给 到 观众 的 体验 会 更好 其次 就是 直播 支架 和 补 光灯 这是 必备 的 配置 常用 设备 手机 支架 补 光灯 背景 T台 礼品 桌 笔记本电脑 网络 挂通 熨烫 机等 产品 选款 产品 可以 是 新款 上市 季末 清仓 反季 促销 根据
    更是 坑 自己 许可 馨 最后 会 有 怎样 的 结局 目前 她 的 微博 已经 被 查封 她 的 父母 也 被 很多 的 网友 人 肉 搜索 今后 会 何去何从 我们 根本 不 关心 但 不过 她 再次 给 我们 提出 了 思考 这些 孩子 为何 会 这么 优越 呢 在 个
    非常 多 的 女生 也 非常 喜欢 他 可是 人红 是非 多猎 鞠婧 祎 曾经 被 曝光 不止 一 莆次 在 现场 耍 匝 大牌 不 知道 为什么 总有 黑粉 和 营销 兜 号 组团 来 黑手 他 可能 真的 虑 是因为 车基恃于
    ……

    构建种子库

    种子库的构建很简单,就是人工观察内容中与网暴有关的记录,并从中确定出能最大程度还原网暴记录且带来噪声较少的关键词。
    种子数量大概几十个左右,将来用于从种子得到更多的相似词语,所以各种子间要确保一定的独立性,当然也要考虑词语的不同形式(如“脑瘫”、“nt”、“NT”)。
    最后,我们得到了种子库 feed.txt

    feed.txt
    人肉(?)
    黑粉
    人身攻击
    网络暴力
    喷子
    键盘侠
    ……

    • 文件中“人肉”特殊标记,是因为“人肉”会带来较大的噪声,但是它又是网络暴力的重要形式之一,所以针对这个种子的衍生需要进一步的探究。

    Word2vec

    模拟Linux环境(Cygwin)

    因为word2vec需要在Linux环境下运行,所以在Windows系统中,我们需要模拟出Linux的操作环境。其中,Cygwin是最常用的模拟软件之一。
    在Cygwin的安装过程中,注意在【选择要安装的包】步骤中,选择Devel与Utils模块。如下图所示:
    图片源自https://blog.csdn.net/heyongluoyao8/article/details/43488765
    安装完毕后,进入 Cygwin 的安装目录,点开 /home/ 可以看到自己系统名称的文件夹,在其中可以存放 word2vec 和素材文件,对应在 linux 的默认路径下。
    在这里插入图片描述

    word2vec模型训练

    下载C语言版的 word2vec,地址:https://github.com/svn2github/word2vec
    下载解压后把文件夹复制到 Cygwin 相关目录下,如上图。再将分词后的素材文件 source.txt 复制到 word2vec-master 文件夹下。

    打开 Cygwin,输入命令,打开 word2vec 文件夹。

    SHTR@LAPTOP-0QSOUKLB ~
    $ cd word2vec-master/
    

    配置 word2vec

    SHTR@LAPTOP-0QSOUKLB ~/word2vec-master
    $ make
    make: 对“all”无需做任何事。
    

    (可能大家的提示和我不一样,建议先忽略报错,继续做下去)

    开始训练模型

    SHTR@LAPTOP-0QSOUKLB ~/word2vec-master
    $ ./word2vec -train source.txt -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1  
    

    随即,word2vec 开始模型训练。

    训练结束后结果显示如下:

    Starting training using file source.txt
    Vocab size: 146678
    Words in train file: 42853097
    Alpha: 0.000006  Progress: 99.99%  Words/thread/sec: 39.73k
    real    38m4.640s
    user    269m47.171s
    sys     0m20.186s
    

    最后,加载训练好的模型 vectors.bin

    SHTR@LAPTOP-0QSOUKLB ~/word2vec-master
    $ ./distance vectors.bin
    

    加载后,出现以下提示,输入种子词,即可得到相似的词。

    Enter word or sentence (EXIT to break): sb
    
    Word: sb  Position in vocabulary: 2923
    
                                                  Word       Cosine distance
    ------------------------------------------------------------------------
                                                煞笔                0.669515
                                                憨批                0.651499
                                                智障                0.608910
                                                玩意                0.575425
                                                    tm              0.566943
                                                   妈               0.551868
                                                傻批                0.548631
                                             神经病         0.546263
                                                   傻               0.539214
                                                弱智                0.533152
                                             玩意儿         0.532617
                                             没脑子         0.521820
                                                恶心                0.509597
                                                   tmd              0.507793
                                                    md              0.506143
                                                有病                0.500755
                                                傻狗                0.499303
                                                脑残                0.497105
                                             真服了         0.491169
                                                沙币                0.484326
                                                无语                0.472168
                                                天天                0.471431
                                                   ctm              0.470460
                                                尼玛                0.469824
                                                死妈                0.468571
                                                辣鸡                0.467711
                                                  nmsl              0.466579
                                                老子                0.459713
                                                    fw              0.459623
                                             没妈养         0.458109
                                                    sl              0.457547
                                                随主                0.457141
                                                    TM              0.456615
                                                脑瘫                0.455201
                                                   cnm              0.454635
                                                   TMD              0.451271
                                                他妈                0.450716
                                                母狗                0.449706
                                                孤儿                0.448423
                                                垃圾                0.448065
    Enter word or sentence (EXIT to break): 网络
    
    Word: 网络  Position in vocabulary: 13
    
                                                  Word       Cosine distance
    ------------------------------------------------------------------------
                                                暴力                0.802902
                                                校园                0.577842
                                             施暴者         0.529357
                                             互联网         0.511295
                                                网路                0.477932
                                                舆论                0.477668
                                                霸凌                0.475106
                                             受害者         0.465842
                                                可怕                0.465204
                                                网暴                0.459172
                                          社会舆论          0.449941
                                                网民                0.434657
                                                伤害                0.427830
                                                网上                0.425253
                                             抑郁症         0.420694
                                                欺凌                0.417121
                                                抑郁                0.416275
                                                施加                0.412934
                                          以暴制暴          0.412061
                                          暴力事件          0.411169
                                          家庭暴力          0.411111
                                                恐怖                0.408639
                                                社会                0.403121
                                                恶评                0.402864
                                          无形之中          0.397039
                                                遭受                0.394655
                                                狂欢                0.392182
                                                语言                0.391798
                                                无辜                0.390650
                                                谩骂                0.390484
                                          虚拟世界          0.390321
                                                事件                0.389930
                                             何时休         0.388254
                                          始作俑者          0.385578
                                                行为                0.381619
                                             实施者         0.380958
                                             无休止         0.380143
                                             加害者         0.378034
                                                讨伐                0.374142
                                                帮凶                0.373178
    
    

    由此,就可以获得相近词,从而拓展词库了。

    当然最后可以通过脚本或者代码来实现对种子库文件 feed.txt 的读取来批量得到对应的相似词,从而避免人工一个一个词查询。

    展开全文
  • 如何快速了解某一个行业的需求 如何找到该行业主要的领导者 怎么通过关键词理解它背后的想法 如何查到一个网站的上下游流量 如何有效且高效的了解自己的用户 。。。。等等 还有很,就不一一列举了...
  • 今天开发小程序的时候, 有一个搜索功能是需要有 关键词变色 的效果, 第一次做小程序的 “关键词变色” 功能, 没什么思路, 果断百度, 然后找到一方法可以实现, 虽然可以实现效果, 但是在搜索列表数据比较的情况下...
  • 开始我直接将错误的第行放到搜索引擎中去搜答案,很回答都指向一个问题,就是有可能项目中引用了svg,且引用的时候是使用的单引号。我的项目刚好使用了amaze-vue插件(amazeUI基于vue生态的定制插件),里面有...
  • 3.利用向量空间模型实现多关键词排序搜索; 4.基于安全K近邻算法对维度扩展后的索引和查询向量进行加密。安全性分析表明。 5.该方案在已知密文模型下是安全的且具有动态更新时的前向安全和后向安全。 关键词:对称可...
  • 微信的公众平台是一个非常非常庞大的文章素材库,各个行业各种类型的文章都能在微信公众号里面找到,不管对于自媒体写手来说,还是对于普通用户,这无疑是我们一个好的文章素材平台。 现在微信APP上面可以直接搜索...
  • 首先功能需求是在页面上搜索一个关键词,并将滚动条滚动到搜索到的关键词位置。 直接上js代码: $("#bt_search").on("click",function(){ var str=$("#search_word").val(); if(str==""){alert("搜索关键词为...
  • 关键词抽取

    千次阅读 2017-01-17 10:34:03
    可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词项。 除了这些,关键词还可以在文本聚类、分类、自动摘要
  • 用户的搜索越来越复杂:25.61%用户用3个关键词, 32.58%使用2个关键词,19.02使用1个关键词。Searches Get More Complex New study shows, " Of all...
  • 想快速获取到百度搜索结果原始URL,一次一次输入搜索太慢了,所以就写了一个小爬虫,效率提升10000倍,平均耗时一个关键词爬取百度搜索结果前30页的链接耗时4秒内。 1、你要准备一些搜索词,我的环境下我的搜索词是...
  • 用C#实现在Word文档中搜索文本本文关键词: C# word 文档 搜索word应用程序中搜索和替换文本是举手之劳的事情,通过word的对象模型,我们也可以使用编程方式来实现。 Word的对象模型有比较详细的帮助文档,放在...
  • 关键词提取技术

    千次阅读 2019-09-27 18:06:01
    python自然语言处理实战 第五章 关键词提取算法 中管方法分析: ...一个方向是将关键词抽取看做是二分类任务; 另一个方向是基于语言模型。 优势:通过大量文本训练得到,相比于无监督的抽取方法得到...
  • 一次使用PHPCMS V9的时候就感觉这东西在输入完标题后就直接生成关键词挺有意思的,后来发现他的搜索也很有意思,将每一篇文章都自动生成一串的关键词然后存放到一数据表中,再作全文索引搜索。原来一直没有...
  • NLP -关键词提取

    2021-03-25 14:55:52
    文章目录关于关键词提取TF-IDF思想由来用处名词/概念解释缺点TextRankLDALSA/LSIRake特点 ...TF-IDF(注意:这里不是减号)是种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中
  • 问题由来前些天工作中遇到一个问题:有 60万 条短消息记录日志,每条约 50 字,5万 关键词,长度 2-8 字,绝大部分为中文。要求将这 60万 条记录中包含的关键词全部提取出来并统计各关键词的命中次数。本文完整介绍...
  • 问题涉及到数据挖掘、文本处理、信息检索等很计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它简单到都不需要高等数学,普通人只用10分钟就可以...
  • elasticsearch 关键词查询-实现like查询

    万次阅读 2018-09-05 22:40:41
    背景:我们项目需要对es索引里面的一个字段进行关键词(中文+英文+数字混合,中文偏多)...考虑到实际应用场景,一次查询会查询多个字段,我们项目采用query_string query方式,下面只考虑关键词字段。 数据准备 ...
  • 关键词提取是文本挖掘领域一个很重要的部分,通过对文本提取的关键词可以窥探整个文本的主题思想,进一步应用于文本的推荐或文本的搜索。 常用的关键词提取算法:TF-IDF算法、TextRank算法 2.jieba关键词提取简介 ...
  • 有监督:主要通过分类的方式进行,通过构建一个丰富完善的词表,判断每文档与词表中每词的匹配度,以类似打标签的形式达到关键词提取的效果。 无监督:受青睐的主流 TF/IDF算法 种基于统计的计算方法,常...
  • 关键词抽取——结巴分词

    千次阅读 2018-03-05 15:06:31
    结巴分词5--关键词抽取作者...这可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词项。除了这些,关键词还可以在文本聚类、分...
  • 前些天工作中遇到一个问题: 有 60万 条短消息记录日志,每条约 50 字,5万 关键词,长度 2-8 字,绝大部分为中文。要求将这 60万 条记录中包含的关键词全部提取出来并统计各关键词的命中次数。 本文完整介绍了我的...
  • es 多个词 and 搜索, 多词搜索

    千次阅读 2018-08-13 16:36:21
    es接口....如果用户指定了5查询关键字,而一个文档只包含了其中的4?将'operator'设置为'and'会排除这文档。 https://es.xiaoleilu.com/100_Full_Text_Search/10_Multi_word_queries.html...
  • TF(Termfrequency)-...TF-IDF是种度量关键词权重的方法。主要的应用场景:(1)搜索(2)关键词提取(可用于文本分类) 刚开始的时候利用的是词频来确定关键词的权重,即 词语在语料库中出现的频率。 记作 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,599
精华内容 6,239
关键字:

word一次搜索多个关键词