精华内容
下载资源
问答
  • 长尾关键词的批量自动获取思路及实现
    2021-04-10 15:24:37

    以百度为例,思路如下:

    1、搜索主关键词,分析相关搜索链接,存入网址库,标记为未抓取。

    2、读取数据库中标记为未抓取的网址,抓取后分析相关搜索,存入网址库,标记为未抓取。

    3、重复2直到指定深度(一般热门关键词6层左右深度差不多全部读取,一般关键词4层即可,理论上可以无限层,但需要抓取的数据量呈级数增长,相关性也越来越差,没必要)。

    4、人工处理长尾词,这里需要人工去除一些无关的关键词,保留合适的(当前搜素引擎的语义处理能力还很弱)。

    至此,基本完成了对长尾关键词的处理,可以获得一个比较全的长尾关键词列表了。由于个人还需要研究不同层次关键词之间的关系,所以存储了搜索结果的网页,定义了父子关系,也没有过滤不同层之间相同的关键词,这些对找长尾词用处不大。

    自动获取文件指定目标关键词的php实现见附件:spider_keywords

    这是我自用程序,提供一个实现方式,打算用的话还需要根据自己使用环境修改,要求懂php,SQL。关键部分如相关关键词分析提取已经做的比较稳定,请放心使用。其中:

    mykeyword.dat为存放关键词的文件,每行一个主关键词。

    $depth为抓取深度,默认5层,对于一般关键词够深。

    程序挖掘数据后存放在我的PostgreSQL数据库,数据库默认UTF-8编码,可以根据自己的实际需要修改。数据表结构如下:

    – Table: mykeywords

    – DROP TABLE mykeywords;

    CREATE TABLE mykeywords

    (id serial NOT NULL,

    father text,

    "content" text,

    sons text,

    depth text,

    keyname text,

    remark text,

    is_spidered boolean,

    CONSTRAINT mykeywords_pkey PRIMARY KEY (id)

    )

    WITH (OIDS=FALSE);

    ALTER TABLE mykeywords OWNER TO postgres;

    本文由seo蜘蛛站长所写,出处:http://www.seozzj.com/seo-tips/long-tail-keywords-bulk/ 转载请注明!

    更多相关内容
  • 文章中关键词加链接的思路和php的实现。文章中关键词加链接的思路和php的实现代码,类文件 链接 文章热
  • 在web开发过程当中,我们经常需要在前台页面输入关键词进行数据的搜索,我们通常使用的搜索方式是将搜索结果用另一个页面显示,这样的方式对于搭建高性能网站来说不是最合适的,今天给大家分享一下如何使用 jQuery,...
  • 而我们实际要做的就是根据一个网址能够检索出这个网址的在各个搜索引擎的收录次数以及在不同关键词下的网址排行,这里出入的只有网址还有若干的关键词,而输出则是该网址在不同搜索引擎下的收录次数以及在各个关键词...
  • 在搜索引擎眼中,貌似不同的关键词,很可能是相同的,比如下面4个关键词:周杰伦演唱会...思路是,将关键词去除空白符及停止并分词,然后将分词之后的每个数字化,然后将数值相加,得到关键词对应的数值。显然的...

    在搜索引擎眼中,貌似不同的关键词,很可能是相同的,比如下面4个关键词:

    周杰伦演唱会上海
    周杰伦演唱会 上海
    周杰伦上海演唱会
    周杰伦上海的演唱会

    经过分词,去除空白符及停止词,主体其实是一样的。但用一般的方法,很难对这样的关键词去重。

    今天介绍一种SEO关键词去重方法,解决这个问题。思路是,将关键词去除空白符及停止词并分词,然后将分词之后的每个词数字化,然后将数值相加,得到关键词对应的数值。显然的,如果两个关键词对应的数值相同,说明这两个关键词是重复的。代码实现如下:

    import hashlib,jieba

    输出结果如下:

    683221891786635452844523343366495723666

    可以看到,4个关键词对应的数值是一样的,即是重复关键词,保留一个即可。

    最后,附上停止词表,可以去https://github.com/goto456/stopwords下载。

    964db912ac11123e64cca6760bad7ed6.png

    展开全文
  • 战神关键词工具 v7.1

    2019-11-05 11:02:51
    战神关键词工具是一款优秀的中文关键词分析工具,其最核心优势就是超强的长尾关键词挖掘和关键词数据分析能力,可以极大拓展您的SEO思路!软件独有关键词百度指数和搜索量实时批量查询功能。多线程挖掘、云关键词...
  • 有木有大神有有关这个的代码,跪求!或者讲解思路也行,谢谢了。 最近在做关键词扩展的毕设,谢谢各位大神了!
  • 主要思路是将已分词的素材 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 的读取来批量得到对应的相似词,从而避免人工一个一个词查询。

    展开全文
  • 中文文本关键词抽取的三种方法-python

    万次阅读 多人点赞 2020-07-22 22:52:23
    目前,用于文本关键词提取的主要方法有四种:基于TF-IDF的关键词抽取、基于TextRank的关键词抽取、基于Word2Vec聚类的关键词抽取,以及多种算法相融合的关键词抽取。笔者在使用前三种算法进行关键词抽取的学习过程...

    利用Python实现中文文本关键词抽取的三种方法

    转自github

    文本关键词抽取,是对文本信息进行高度凝练的一种有效手段,通过3-5个词语准确概括文本的主题,帮助读者快速理解文本信息。目前,用于文本关键词提取的主要方法有四种:基于TF-IDF的关键词抽取、基于TextRank的关键词抽取、基于Word2Vec词聚类的关键词抽取,以及多种算法相融合的关键词抽取。笔者在使用前三种算法进行关键词抽取的学习过程中,发现采用TF-IDF和TextRank方法进行关键词抽取在网上有很多的例子,代码和步骤也比较简单,但是采用Word2Vec词聚类方法时网上的资料并未把过程和步骤表达的很清晰。因此,本文分别采用TF-IDF方法、TextRank方法和Word2Vec词聚类方法实现对专利文本(同样适用于其它类型文本)的关键词抽取,通过理论与实践相结合的方式,一步步了解、学习、实现中文文本关键词抽取。

    1 概述

    一篇文档的关键词等同于最能表达文档主旨的N个词语,即对于文档来说最重要的词,因此,可以将文本关键词抽取问题转化为词语重要性排序问题,选取排名前TopN个词语作为文本关键词。目前,主流的文本关键词抽取方法主要有以下两大类:

    (1)基于统计的关键词提取方法

    该方法根据统计信息,如词频,来计算得到文档中词语的权重,按权重值排序提取关键词。TF-IDF和TextRank均属于此类方法,其中TF-IDF方法通过计算单文本词频(Term Frequency, TF)和逆文本频率指数(Inverse Document Frequency, IDF)得到词语权重;TextRank方法基于PageRank的思想,通过词语共现窗口构建共现网络,计算词语得分。此类方法简单易行,适用性较强,然而未考虑词序问题。

    (2)基于机器学习的关键词提取方法

    该方法包括了SVM、朴素贝叶斯等有监督学习方法,以及K-means、层次聚类等无监督学习方法。在此类方法中,模型的好坏取决于特征提取,而深度学习正是特征提取的一种有效方式。由Google推出的Word2Vec词向量模型,是自然语言领域中具有代表性的学习工具。它在训练语言模型的过程中将词典映射到一个更抽象的向量空间中,每一个词语通过高维向量表示,该向量空间中两点之间的距离就对应两个词语的相似程度。

    基于以上研究,本文分别采用TF-IDF方法、TextRank方法和Word2Vec词聚类方法,利用Python语言进行开发,实现文本关键词的抽取。

    2 开发环境准备

    2.1 Python环境

    在python官网https://www.python.org/downloads/下载计算机对应的python版本,笔者使用的是Python2.7.13的版本。

    2.2 第三方模块

    本实验Python代码的实现使用到了多个著名的第三方模块,主要模块如下所示:

    (1)Jieba

    目前使用最为广泛的中文分词组件。下载地址:https://pypi.python.org/pypi/jieba/

    (2)Gensim

    用于主题模型、文档索引和大型语料相似度索引的python库,主要用于自然语言处理(NLP)和信息检索(IR)。下载地址:https://pypi.python.org/pypi/gensim

    本实例中的维基中文语料处理和中文词向量模型构建需要用到该模块。

    (3)Pandas

    用于高效处理大型数据集、执行数据分析任务的python库,是基于Numpy的工具包。

    下载地址:https://pypi.python.org/pypi/pandas/0.20.1

    (4)Numpy

    用于存储和处理大型矩阵的工具包。

    下载地址:https://pypi.python.org/pypi/numpy

    (5)Scikit-learn

    用于机器学习的python工具包,python模块引用名字为sklearn,安装前还需要Numpy和Scipy两个Python库。

    官网地址:http://scikit-learn.org/stable/

    本实例中主要用到了该模块中的feature_extraction、KMeans(k-means聚类算法)和PCA(pac降维算法)。

    (6)Matplotlib

    Matplotlib是一个python的图形框架,用于绘制二维图形。

    下载地址:https://pypi.python.org/pypi/matplotlib

    3 数据准备

    3.1 样本语料

    文本将汽车行业的10篇专利作为样本数据集,见文件“data/sample_data.csv”。文件中依顺序包含编号(id)、标题(title)和摘要(abstract)三个字段,其中标题和摘要都要参与到关键词的抽取。各位可根据自己的样本数据进行数据读取相关代码的调整。

    3.2 停用词词典

    本文使用中科院计算所中文自然语言处理开放平台发布的中文停用词表,包含了1208个停用词。下载地址:http://www.hicode.cc/download/view-software-13784.html

    另外,由于本实例的样本是专利文本,词汇专业性较高,需要人工新增停用词,可直接在上述停用词表中添加,一行为一个停用词,见文件“data/stopWord.txt”。在本例中,笔者在文件最前面人工新增了“包括、相对、免受、用于、本发明、结合”这六个停用词,用于示范,各位可根据实际情况自行删减或新增停用词。

    4 基于TF-IDF的文本关键词抽取方法

    4.1 TF-IDF算法思想

    词频(Term Frequency,TF)指某一给定词语在当前文件中出现的频率。由于同一个词语在长文件中可能比短文件有更高的词频,因此根据文件的长度,需要对给定词语进行归一化,即用给定词语的次数除以当前文件的总词数。

    逆向文件频率(Inverse Document Frequency,IDF)是一个词语普遍重要性的度量。即如果一个词语只在很少的文件中出现,表示更能代表文件的主旨,它的权重也就越大;如果一个词在大量文件中都出现,表示不清楚代表什么内容,它的权重就应该小。

    TF-IDF的主要思想是,如果某个词语在一篇文章中出现的频率高,并且在其他文章中较少出现,则认为该词语能较好的代表当前文章的含义。即一个词语的重要性与它在文档中出现的次数成正比,与它在语料库中文档出现的频率成反比。

    计算公式如下:

    TF-IDF计算公式

    4.2 TF-IDF文本关键词抽取方法流程

    由以上可知,TF-IDF是对文本所有候选关键词进行加权处理,根据权值对关键词进行排序。假设Dn为测试语料的大小,该算法的关键词抽取步骤如下所示:

    (1) 对于给定的文本D进行分词、词性标注和去除停用词等数据预处理操作。本分采用结巴分词,保留’n’,‘nz’,‘v’,‘vd’,‘vn’,‘l’,‘a’,'d’这几个词性的词语,最终得到n个候选关键词,即D=[t1,t2,…,tn] ;

    (2) 计算词语ti 在文本D中的词频;

    (3) 计算词语ti 在整个语料的IDF=log (Dn /(Dt +1)),Dt 为语料库中词语ti 出现的文档个数;

    (4) 计算得到词语ti 的TF-IDF=TF*IDF,并重复(2)—(4)得到所有候选关键词的TF-IDF数值;

    (5) 对候选关键词计算结果进行倒序排列,得到排名前TopN个词汇作为文本关键词。

    4.3 代码实现

    Python第三方工具包Scikit-learn提供了TFIDF算法的相关函数,本文主要用到了sklearn.feature_extraction.text下的TfidfTransformer和CountVectorizer函数。其中,CountVectorizer函数用来构建语料库的中的词频矩阵,TfidfTransformer函数用来计算词语的tfidf权值。

    注:TfidfTransformer()函数有一个参数smooth_idf,默认值是True,若设置为False,则IDF的计算公式为idf=log(Dn /Dt ) + 1。

    基于TF-IDF方法实现文本关键词抽取的代码执行步骤如下:

    (1)读取样本源文件sample_data.csv;

    (2)获取每行记录的标题和摘要字段,并拼接这两个字段;

    (3)加载自定义停用词表stopWord.txt,并对拼接的文本进行数据预处理操作,包括分词、筛选出符合词性的词语、去停用词,用空格分隔拼接成文本;

    (4)遍历文本记录,将预处理完成的文本放入文档集corpus中;

    (5)使用CountVectorizer()函数得到词频矩阵,a[j][i]表示第j个词在第i篇文档中的词频;

    (6)使用TfidfTransformer()函数计算每个词的tf-idf权值;

    (7)得到词袋模型中的关键词以及对应的tf-idf矩阵;

    (8)遍历tf-idf矩阵,打印每篇文档的词汇以及对应的权重;

    (9)对每篇文档,按照词语权重值降序排列,选取排名前topN个词最为文本关键词,并写入数据框中;

    (10)将最终结果写入文件keys_TFIDF.csv中。

    最终运行结果如下图所示。

    TF-IDF方法运行结果

    5 基于TextRank的文本关键词抽取方法

    5.1 PageRank算法思想

    TextRank算法是基于PageRank算法的,因此,在介绍TextRank前不得不了解一下PageRank算法。

    PageRank算法是Google的创始人拉里·佩奇和谢尔盖·布林于1998年在斯坦福大学读研究生期间发明的,是用于根据网页间相互的超链接来计算网页重要性的技术。该算法借鉴了学术界评判学术论文重要性的方法,即查看论文的被引用次数。基于以上想法,PageRank算法的核心思想是,认为网页重要性由两部分组成:

    ① 如果一个网页被大量其他网页链接到说明这个网页比较重要,即被链接网页的数量;

    ② 如果一个网页被排名很高的网页链接说明这个网页比较重要,即被链接网页的权重。

    一般情况下,一个网页的PageRank值(PR)计算公式如下所示:

    PageRank计算公式

    其中,PR(Pi)是第i个网页的重要性排名即PR值;ɑ是阻尼系数,一般设置为0.85;N是网页总数;Mpi 是所有对第i个网页有出链的网页集合;L(Pj)是第j 个网页的出链数目。

    初始时,假设所有网页的排名都是1/N,根据上述公式计算出每个网页的PR值,在不断迭代趋于平稳的时候,停止迭代运算,得到最终结果。一般来讲,只要10次左右的迭代基本上就收敛了。

    5.2 TextRank算法思想

    TextRank算法是Mihalcea和Tarau于2004年在研究自动摘要提取过程中所提出来的,在PageRank算法的思路上做了改进。该算法把文本拆分成词汇作为网络节点,组成词汇网络图模型,将词语间的相似关系看成是一种推荐或投票关系,使其可以计算每一个词语的重要性。

    基于TextRank的文本关键词抽取是利用局部词汇关系,即共现窗口,对候选关键词进行排序,该方法的步骤如下:

    (1) 对于给定的文本D进行分词、词性标注和去除停用词等数据预处理操作。本分采用结巴分词,保留’n’,‘nz’,‘v’,‘vd’,‘vn’,‘l’,‘a’,'d’这几个词性的词语,最终得到n个候选关键词,即D=[t1,t2,…,tn] ;

    (2) 构建候选关键词图G=(V,E),其中V为节点集,由候选关键词组成,并采用共现关系构造任两点之间的边,两个节点之间仅当它们对应的词汇在长度为K的窗口中共现则存在边,K表示窗口大小即最多共现K个词汇;

    (3) 根据公式迭代计算各节点的权重,直至收敛;

    (4) 对节点权重进行倒序排列,得到排名前TopN个词汇作为文本关键词。

    说明:Jieba库中包含jieba.analyse.textrank函数可直接实现TextRank算法,本文采用该函数进行实验。

    5.3 代码实现

    基于TextRank方法实现文本关键词抽取的代码执行步骤如下:

    (1)读取样本源文件sample_data.csv;

    (2)获取每行记录的标题和摘要字段,并拼接这两个字段;

    (3)加载自定义停用词表stopWord.txt;

    (4)遍历文本记录,采用jieba.analyse.textrank函数筛选出指定词性,以及topN个文本关键词,并将结果存入数据框中;

    (5)将最终结果写入文件keys_TextRank.csv中。

    最终运行结果如下图所示。

    TextRank方法运行结果

    6 基于Word2Vec词聚类的文本关键词抽取方法

    6.1 Word2Vec词向量表示

    众所周知,机器学习模型的输入必须是数值型数据,文本无法直接作为模型的输入,需要首先将其转化成数学形式。基于Word2Vec词聚类方法正是一种机器学习方法,需要将候选关键词进行向量化表示,因此要先构建Word2Vec词向量模型,从而抽取出候选关键词的词向量。

    Word2Vec是当时在Google任职的Mikolov等人于2013年发布的一款词向量训练工具,一经发布便在自然语言处理领域得到了广泛的应用。该工具利用浅层神经网络模型自动学习词语在语料库中的出现情况,把词语嵌入到一个高维的空间中,通常在100-500维,在新的高维空间中词语被表示为词向量的形式。与传统的文本表示方式相比,Word2Vec生成的词向量表示,词语之间的语义关系在高维空间中得到了较好的体现,即语义相近的词语在高维空间中的距离更近;同时,使用词向量避免了词语表示的“维度灾难”问题。

    就实际操作而言,特征词向量的抽取是基于已经训练好的词向量模型,词向量模型的训练需要海量的语料才能达到较好的效果,而wiki中文语料是公认的大型中文语料,本文拟从wiki中文语料生成的词向量中抽取本文语料的特征词向量。Wiki中文语料的Word2vec模型训练在之前写过的一篇文章“利用Python实现wiki中文语料的word2vec模型构建”( http://www.jianshu.com/p/ec27062bd453 )中做了详尽的描述,在此不赘述。即本文从文章最后得到的文件“wiki.zh.text.vector”中抽取候选关键词的词向量作为聚类模型的输入。

    另外,在阅读资料的过程中发现,有些十分专业或者生僻的词语可能wiki中文语料中并未包含,为了提高语料的质量,可新增实验所需的样本语料一起训练,笔者认为这是一种十分可行的方式。本例中为了简便并未采取这种方法,各位可参考此种方法根据自己的实际情况进行调整。

    6.2 K-means聚类算法

    聚类算法旨在数据中发现数据对象之间的关系,将数据进行分组,使得组内的相似性尽可能的大,组件的相似性尽可能的小。

    K-Means是一种常见的基于原型的聚类技术,本文选择该算法作为词聚类的方法。其算法思想是:首先随机选择K个点作为初始质心,K为用户指定的所期望的簇的个数,通过计算每个点到各个质心的距离,将每个点指派到最近的质心形成K个簇,然后根据指派到簇的点重新计算每个簇的质心,重复指派和更新质心的操作,直到簇不发生变化或达到最大的迭代次数则停止。

    6.3 Word2Vec词聚类文本关键词抽取方法流程

    Word2Vec词聚类文本关键词抽取方法的主要思路是对于用词向量表示的文本词语,通过K-Means算法对文章中的词进行聚类,选择聚类中心作为文章的一个主要关键词,计算其他词与聚类中心的距离即相似度,选择topN个距离聚类中心最近的词作为文本关键词,而这个词间相似度可用Word2Vec生成的向量计算得到。

    假设Dn为测试语料的大小,使用该方法进行文本关键词抽取的步骤如下所示:

    (1) 对Wiki中文语料进行Word2vec模型训练,参考我的文章“利用Python实现wiki中文语料的word2vec模型构建”( http://www.jianshu.com/p/ec27062bd453 ),得到词向量文件“wiki.zh.text.vector”;

    (2) 对于给定的文本D进行分词、词性标注、去重和去除停用词等数据预处理操作。本分采用结巴分词,保留’n’,‘nz’,‘v’,‘vd’,‘vn’,‘l’,‘a’,'d’这几个词性的词语,最终得到n个候选关键词,即D=[t1,t2,…,tn] ;

    (3) 遍历候选关键词,从词向量文件中抽取候选关键词的词向量表示,即WV=[v1,v2,…,vm];

    (4) 对候选关键词进行K-Means聚类,得到各个类别的聚类中心;

    (5) 计算各类别下,组内词语与聚类中心的距离(欧几里得距离),按聚类大小进行升序排序;

    (6) 对候选关键词计算结果得到排名前TopN个词汇作为文本关键词。

    步骤(4)中需要人为给定聚类的个数,本文测试语料是汽车行业的专利文本,因此只需聚为1类,各位可根据自己的数据情况进行调整;步骤(5)中计算各词语与聚类中心的距离,常见的方法有欧式距离和曼哈顿距离,本文采用的是欧式距离,计算公式如下:

    欧式距离计算公式

    6.4 代码实现

    Python第三方工具包Scikit-learn提供了K-Means聚类算法的相关函数,本文用到了sklearn.cluster.KMeans()函数执行K-Means算法,sklearn.decomposition.PCA()函数用于数据降维以便绘制图形。

    基于Word2Vec词聚类方法实现文本关键词抽取的代码执行步骤如下:

    (1)读取样本源文件sample_data.csv;

    (2)获取每行记录的标题和摘要字段,并拼接这两个字段;

    (3)加载自定义停用词表stopWord.txt,并对拼接的文本进行数据预处理操作,包括分词、筛选出符合词性的词语、去重、去停用词,形成列表存储;

    (4)读取词向量模型文件’wiki.zh.text.vector’,从中抽取出所有候选关键词的词向量表示,存入文件中;

    (5)读取文本的词向量表示文件,使用KMeans()函数得到聚类结果以及聚类中心的向量表示;

    (6)采用欧式距离计算方法,计算得到每个词语与聚类中心的距离;

    (7)按照得到的距离升序排列,选取排名前topN个词作为文本关键词,并写入数据框中;

    (8)将最终结果写入文件keys_word2vec.csv中。

    最终运行结果如下图所示。

    Word2Vec词聚类方法运行结果

    7 结语

    本文总结了三种常用的抽取文本关键词的方法:TF-IDF、TextRank和Word2Vec词向量聚类,并做了原理、流程以及代码的详细描述。因本文使用的测试语料较为特殊且数量较少,未做相应的结果分析,根据观察可以发现,得到的十个文本关键词都包含有文本的主旨信息,其中TF-IDF和TextRank方法的结果较好,Word2Vec词向量聚类方法的效果不佳,这与文献[8]中的结论是一致的。文献[8]中提到,对单文档直接应用Word2Vec词向量聚类方法时,选择聚类中心作为文本的关键词本身就是不准确的,因此与其距离最近的N个词语也不一定是关键词,因此用这种方法得到的结果效果不佳;而TextRank方法是基于图模型的排序算法,在单文档关键词抽取方面有较为稳定的效果,因此较多的论文是在TextRank的方法上进行改进而提升关键词抽取的准确率。

    另外,本文的实验目的主要在于讲解三种方法的思路和流程,实验过程中的某些细节仍然可以改进。例如Word2Vec模型训练的原始语料可加入相应的专业性文本语料;标题文本往往包含文档的重要信息,可对标题文本包含的词语给予一定的初始权重;测试数据集可采集多个分类的长文本,与之对应的聚类算法KMeans()函数中的n_clusters参数就应当设置成分类的个数;根据文档的分词结果,去除掉所有文档中都包含某一出现频次超过指定阈值的词语;等等。各位可根据自己的实际情况或者参考论文资料进行参数的优化以及细节的调整,欢迎给我留言或者私信讨论,大家一起共同学习。

    参考文献:

    [1] http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

    [2] http://www.cnblogs.com/biyeymyhjob/archive/2012/07/17/2595249.html

    [3] https://yq.aliyun.com/articles/69934

    [4] https://www.cnblogs.com/rubinorth/p/5799848.html

    [5]余珊珊, 苏锦钿, 李鹏飞. 基于改进的TextRank的自动摘要提取方法[J]. 计算机科学, 2016, 43(6):240-247.

    [6] http://www.doc88.com/p-8955287687257.html

    [7] http://www.doc88.com/p-4711540891452.html

    [8] 夏天. 词向量聚类加权TextRank的关键词抽取[J]. 现代图书情报技术, 2017, 1(2):28-34.

    [9]吴军.数学之美(第二版).

    展开全文
  • 下面就跟大家聊聊我在寻找产品关键词的一些思路。 1.在平台的搜索框中寻找关键词 怎么查找产品关键词?查找产品关键词的几种常用方法 这是最常见的找到我们的方式。关键词的设置可以包含产品的属性、材质、特点、...
  • 知己知彼百战不殆通过对关键词竞争强度的分析通过对该关键词的竞争对手的分析 再来调整SEO思路从而按照制定的详细的SEO实施计划势必也会事半功倍同时SEO 外包服务商在给客户提供SEO服务前也会根据关键词竞争强大来...
  • NLP关键词提取方法总结及实现

    万次阅读 多人点赞 2019-07-23 21:09:41
    五、Word2Vec聚类的关键词提取算法及实现 六、信息增益关键词提取算法及实现 七、互信息关键词提取算法及实现 八、卡方检验关键词提取算法及实现 九、基于树模型的关键词提取算法及实现 十、总结 一、关键词...
  • TF-IDF(Terms Frequency-Inverse Document Frequency)主要思想:如果某个单词在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此或者短语具有很好的类别区分能力,适合用来分类。 词频(Term ...
  • 中文分词与关键词提取概述

    千次阅读 2019-10-16 15:22:10
    此外,关于TF-IDF,关键词提取的一个基本方法是:一个在该文本中出现越多,其他文本中出现越少,该作为关键字的概率就越大。因此,在实际应用中,处理有限文本集或某一垂直领域文本集时,先对该有限文本集或垂直...
  • n: f.write(str(item[0])+' '+str(item[1])) f.write('\n') f.write("动词关键词-前200个\n") for item in keywords_v: f.write(str(item[0])+' '+str(item[1])) f.write('\n') f.write("形容词关键词-前200个\n") ...
  • 关键词是SEM竞价推广工作最核心也是最基础的组成部分,一个合理科学且推广效果明显的账户,首当其冲是肯定有良好的关键词作为基石来支撑,简言之,搜索竞价推广就是对关键词的推广,让关键词出现在合适的广告位,...
  • 本文想针对一些特殊场合的需要关键词的文本生成工作,在这里把思路记录一下。这里使用的是传统方式,有机会会尝试深度学的方式。(1)依赖的语法选择如果想让句子读起来通顺,就需要一定的语法框架,但是常规的语法...
  • 将一段文本中的指定 多个关键词 标红。 需求分析及特殊情况 多关键词需要逐一匹配 标红即:将 命中关键词 的套上 <span style="color: red"><span> 标签 例1:['你好', '你好呀'] 为关键词,文本中有 ...
  • python怎么提取关键词import re f = open("D:/xiangmu/python/xiangmu/gjc.txt", "r", encodi欢迎来到四十五资源网, 那个r'.*?('+ lste +').*?‘ 会吧你这个关键字前面和后面的文字都匹配了,所以当你的那个关键字...
  • 用Py做文本分析5:关键词提取

    千次阅读 2020-12-30 02:36:59
    针对一篇语段,在不加人工干预的情况下提取出其关键词首先进行分词处理关键词分配:事先给定关键词库,然后在文档中进行关键词检索关键词提取:根据某种规则,从文档中抽取最重要的作为关键词有监督:抽取出候选...
  • 本文主要是给出了关键词的一种新的定义,并且基于Word2Vec给出了一个实现方案。这种关键词的定义是自然的、合理的,Word2Vec只是一个简化版的实现方案,可以基于同样的定义,换用其他的模型来实现。说到提取关键词,...
  • 这个脚本有什么用:从结果能很快选出哪些关键词是我们想要的,大家都知道英文关键词,有很多时候顺序一遍就容易产生歧义,一眼看过去不会发现什么问题。但是你去国际站网站搜索出来的产品八竿子和你的产品打不着,...
  • 使用Python快速统计关键词及其词频

    千次阅读 2021-01-29 10:15:00
    https://blog.csdn.net/weixin_43886356/article/details/86711012思路:1.通过jieba库分词获取所有的词语列表;2.计算列表里出现词语及其对应的频次,存储为字典;3.删除字典中键为无关且频次高的词语的键值对;4....
  • 如何从大量数据中出高频? 题目描述 有一个 1GB 大小的文件,文件里每一行是一个,每个的大小不超过 16B,内存大小限制是 1MB,要求返回频数最高的 100 个(Top 100)。 解答思路 由于内存限制,我们依然...
  • 1、基于TF-IDF的文本关键词抽取方法词频(Term Frequency,TF)指某一给定词语在当前文件中出现的频率。由于同一个词语在长文件中可能比短文件有更高的词频,因此根据文件的长度,需要对给定词语进行归一化,即用给定...
  • 什么是长尾关键词_举例_拓方法思路 长尾关键词主要针对核心关键词而言,给核心关键词加上前缀、后缀、中间修辞,即形成相应的长尾关键词
  • word2vec+KNN 关键词提取

    千次阅读 2020-09-11 22:18:35
    Word2Vec聚类文本关键词抽取方法的主要思路是对于用词向量表示的文本词语,通过K-Means算法对文章中的进行聚类,选择聚类中心作为文章的一个主要关键词,计算其他与聚类中心的距离即相似度,选择topN个距离...
  • 在上一篇博客中,介绍了关键词提取的无监督方法:点击这里查看文章。本篇主要是介绍关键词提取的有监督方法。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,530
精华内容 7,412
关键字:

关键词找词的思路