精华内容
下载资源
问答
  • 2016-08-08 10:12:56
    <span style="font-family: Arial, Helvetica, sans-serif;">#include <stdio.h></span>
    <span style="font-family: Arial, Helvetica, sans-serif;">#define v 10000</span>
    
    void main()
    {
    	int a[v],i,j,k,m,n;
    	for (i=0;i<v;i++)
    	{
    		a[i]=i;
    	}
    	for (i=3;i<v;i++)
    	{
    		for (j=2;j<a[i];j++)
    		{
    			if (a[i]%j==0)
    			{
    				a[i]=0;
    			}
    		}
    	}
    	m=0;
    	for (i=2;i<v;i++)
    	{
    		if (a[i]!=0)
    		{
    			printf("%5d\n",a[i]);
    			m++;
    		}
    	}
    	printf("total:%d\n",m);
    }

    更多相关内容
  • 总第 284期 计算机与数字工程 Vo1.41No.62013年第 6期 Computer&.DigitalEngineering 899素数筛选法的改进及 C语言实现叶 煜 周洪林 任...

    总第 284期 计算机与数字工程 Vo1.41No.6

    2013年第 6期 Computer&.DigitalEngineering 899

    素数筛选法的改进及 C语言实现

    叶 煜 周洪林 任 华

    (成都农业科技职业学院电子信息分院 成都 611130)

    摘 要 素数的算法在信息学及程序设计中都有广泛的应用。论文在对埃拉托色尼 (Eratosthenes)筛法进行分析的基础之上,提出了

    筛法的改进算法。改进筛法降低了存储需求,缩短了素数筛选的起点和终点,实践证明改进筛法在计算机复杂度方面优于埃拉托色尼筛法。

    关键词 素数;埃拉托色尼筛法;改进筛法

    中图分类号 TP301

    ImprovementonEratosthenesAlgorithmsforPrimeNumberand

    itsImplementation inC Program Language

    YE Yu ZHOU Honglin REN Hua

    (SchoolofElectricalandInformationEngineering,ChengduVo~tionalCollegeofAgriculturalScienceandTechnology,Chengdu 611130)

    Abstract Algorithmsforprimenumberarewidelyusedininformationscienceandprogram design.Inthispaper,theimprovedalgo—

    rithm OnEratosthenesisproposedbasedonanalysisofthesieveofEratosthenes.Practicehasprovedthattheimprovedsievemethodincorn—

    putercomplexitythanEratosthenessievemethodimprovedscreeningmethodtoreducethestoragerequirementsandshortenthestartandend

    pointoftheprimesscreening.

    KeyW ords primenumber,eratosthenes,improvementoneratosthenes

    C:lassNumber TP3O】

    时很多。但是当N很大的时候,比如 N,N

    1 引言

    *sqrt(N)~30000000000,数量级相当大。程序效率很低,

    素数,是数论当中的重要议题。所谓素数l1],指在一个 使人不堪忍受。于是就有了素数筛选法。

    大于 1的自然数中,除了1和此整数 自身以外,不能被其他

    自然数整除的数。比1大但不是素数的数称为合数。1和 3 素数筛选法

    0既非素数也非合数。素数是与合数相对立的两个概念, 所谓 “筛选法”指的是 “埃拉托色尼 (Eratosthenes)筛

    二者构成了数论当中最基础的定义之一。基于素数定义的 法”,他是古希腊的著名数学家。他采取的方法是 ,在一张

    基础之上而建立的问题有很多世界级的难题 ,如哥德 巴赫

    纸上写上 1~N 的全部整数,然后逐个判断它们是否是素

    猜想等。素数的算法在信息学及程序设计中都有广泛的应

    数,找出一个非素数,就把它从数据序列中划掉,最后剩下

    用 。

    展开全文
  • 跟读者们交流过程中,我也发现了一些比较共性的需求,就是 根据关键词筛选 新闻文章。 最初我的想法是,在爬取到全部文章数据的基础上,遍历文件夹,然后将正文中包含关键词的文章筛选出来。 如果你已经下载到了完整...

    上一篇《人民日报》的爬虫文章发布之后,收到了很不错的反馈,文中的爬虫代码也确实帮助到了很多人,我很开心。

    跟读者们交流过程中,我也发现了一些比较共性的需求,就是 根据关键词筛选 新闻文章。

    最初我的想法是,在爬取到全部文章数据的基础上,遍历文件夹,然后将正文中包含关键词的文章筛选出来。

    如果你已经下载到了完整的新闻数据,那用这种方法无疑是最方便快捷的。但是如果没有的话,需要先爬取全部数据,再从中筛选符合条件的数据,无疑是有点浪费时间。

    本篇文章,我将介绍两种方法,一种,是从现有数据中根据关键词筛选,另一种,是利用人民网的搜索功能,爬取关键词的搜索结果。

    1. 爬取关键词搜索结果

    最近有读者跟我请教问题,我才发现,人民网是有搜索功能的 (http://search.people.cn)。

    所以只需要根据关键词检索,然后将搜索结果爬取下来即可。

    1.1 分析网页

    这里我简单教一下大家分析网页的一般思路。

    1.1.1 分析网页主要看什么

    • 我们能获取到哪些数据。
    • 服务器以什么形式发送数据
    • 如何获取全部数据(如何翻页)

    1.1.2 如何使用浏览器的开发者工具

    具体操作也很简单,按 F12 打开 开发者工具 ,切换到 Network ,然后刷新网页,可以看到列表中有很多请求。

    其中有图片,js 代码, css 样式,html 源码等等等等各种各样的请求。

    点击对应的请求项之后,你可以在 Preview 或者 Response 里预览该请求的数据内容,看是不是包含你需要的数据。

    当然,你可以逐条去检查,也可以用顶部的过滤器去筛选请求类型(一般情况下,我们需要的数据,在 XHRDoc 里即可找到。)

    找到对应的请求之后,可以切换到 headers 查看该请求的请求头信息。

    如图所示,主要关注 4 个地方。

    1. Request URL:也就是请求的链接。爬虫请求的 url 填啥是要看这里,不要只知道去浏览器的地址栏里复制网址。
    2. Request Method:请求方法,有 GETPOST 两种,爬虫代码里用 requests.get() 还是 requests.post() 要与这里保持一致,否则可能无法正确获取数据。
    3. Request Headers:请求头,服务器会根据这个来判断是谁在访问网站,一般情况下,你需要设置爬虫请求头中的 User-Agent (有的网站可能需要判断 AcceptCookieRefererHost 等,根据具体情况设置),来将爬虫伪装成正常的浏览器用户,防止被反爬机制拦截。
    4. Request Payload:请求参数,服务器会根据这些参数,来确定返回哪些数据给你,比如说,页码,关键词,等等,找到这些参数的规律,就可以通过构造这些参数,来直接向服务器获取数据了。

    1.1.3 服务器返回的数据有哪些形式

    一般情况下,有htmljson 两种格式,接下来我简单教大家一下如何判断。

    HTML 格式

    一般情况下,是出现在筛选条件中的 Doc 类型里,也非常容易分辨,就是 Response 里面查看,全篇都是 </> 这种标签的。

    如果确定 html 源码中包含你需要的数据的话(这么说,是因为有些情况下数据是通过 js 代码动态加载进去的,直接解析源码是找不到数据的)

    可以在 Elements 中,通过左上角的箭头按钮,来方便快捷地在网页中定位数据所在的标签(具体就不细讲了,自己试一下就懂了)。

    大部分人入门学习爬虫,也都是从解析 html 开始的,应该比较熟悉。解析的方法也很多,如 正则表达式BeautifulSoupxpath 等等。

    Json 格式

    前面也说了,有些情况下,数据并不是放在 html 页面中直接返回的,而是通过其他的数据接口,动态的请求加载进去的。这样就导致的有些同学刚开始学爬虫的时候,明明在网页上分析的时候,标签路径都没问题,但是代码请求时死活找不到标签的情况。

    这种动态加载数据的机制叫 Ajax ,感兴趣的可以去自行搜索了解。

    Ajax 请求一般都是在请求类型中的 XHR 中,数据内容一般以 json 格式展示。(有些同学不知道怎么判断一个请求是不是 ajax,数据是不是 json,怎么办?这里说一个简单的判断方法,在 Preview 里看它是不是类似于下图的形式,大括号,键值对 {“xxx”: “xxx”},以及可以展开合上的小三角形)

    这类请求返回的数据是 json 格式,可以直接使用 python 中的 json 库来解析,非常方便。

    以上给大家简单讲解了一下,如何分析网页,如何抓包的方法,希望对大家有帮助。

    言归正传,通过上面介绍的方法,我们可以很容易知道,人民网搜索结果的数据是通过 Ajax 形式发送的。

    请求方法是 POST,请求链接,请求头,和请求参数都可以在 Headers 里查看到。

    在参数里,我们可以看到 key 应该就是我们搜索的关键词,page 是页码,sortType 是搜索结果排序方式,等等等等,知道这些规律,这样我们就可以自行构造请求了。

    1.2 试探反爬机制

    一般网站为了防止攻击,都会或多或少设置一些反爬机制。这里给大家简单介绍一些常见的反爬机制,以及应对办法。

    1.2.1 User-Agent

    服务器会根据请求头的 User-Agent 字段来判断用户是通过什么来访问的,如:

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36
    

    这里包含了浏览器,电脑系统的一些基本信息。如果你的 python 爬虫代码没有设置这个字段值的话,会默认是 python,这样服务器就可以大概判断出来这个请求是爬虫发起的,然后选择是否拦截。

    应对办法也比较容易,就是用浏览器访问时候,把请求头里的 User-Agent 值复制下来,设置到代码里即可。

    1.2.2 Referer

    有些网站的资源是添加了防盗链的,也就是说,服务器处理请求的时候,是会去判断 Referer 的值的,只有在指定的站点发起请求,服务器才会允许返回数据(这样可以防止资源被盗用在其他网站使用)。

    应对方法也简单,复制浏览器访问时,请求头里的 Referer 值即可。

    1.2.3 Cookie

    有的网站,可能有的数据需要登录账号才能访问,这里就用到了 Cookie 值。

    不设置 Cookie , 设置未登录时候访问的 Cookie ,设置登录账号以后的 Cookie ,可能返回的数据结果都不一样。

    应对方法因网站而异,如果不设置 Cookie 也可以访问,那就不用管;如果需要设置才能访问,那就根据情况(是否要登录,是否要会员等等)复制浏览器请求头中的 Cookie 值来设置。

    1.2.4 JS 参数加密

    请求的参数里,可能会有一些类似于乱码的参数,你不知道它是干什么的但是它又很重要,也不是时间戳,不填或者随便填都会请求失败。

    这种情况就比较难搞了,这是 js 算法加密过的参数,要想自行构造,需要模拟整个参数加密的算法。

    不过由于这个加密过程是前端完成的,所以加密算法的 js 代码是可以完全获取的到的,懂一些前端知识的,或者 Js 逆向的话,可以试着破解一下。

    我个人是不建议这么做的,一是破解麻烦,二是可能会违法。

    换个方法,用 selenium 或者 ``pyppeteer` 自动化去爬,它不香嘛。

    1.2.5 爬取频率限制

    如果长时间高频率地爬取数据的话,对网站服务器的压力是很大的,而且正常人访问也不可能做到这么高强度的访问(比如一秒访问十几次网站),一看就是爬虫干的。所以服务器一般会设置一个访问频率阈值,比如一分钟内如果发起超过 300 次请求,就视为爬虫,对其 IP 进行访问限制。

    应对的话,我建议,如果不是特别赶时间的话,可以设置一个延迟函数,每爬取一次数据,随机睡眠几秒钟,使得访问频率降低到阈值以下,降低对服务器访问的压力,也减少封IP的几率。

    1.2.6 其他

    还有一些不太常见的,但是也比较有意思的反爬机制,给大家举几个例子。

    • 字体反爬,就是网站对一些关键数据使用了特殊的字体,只有用对应的字体文件去解析,才能正确显示,否则源码里只能看到一串乱码。
    • 反调试,就是网站通过屏蔽浏览器开发者工具,屏蔽 selenium 等常用的爬虫工具,来达到一定的反爬效果。
    • 蜜罐反爬,就是检测到你是爬虫的时候,不会直接拒绝访问,而是给你返回一些假数据。爬虫者可能爬完了才发现是假数据,而且甚至不知道是什么时候开始被替换成假数据的。

    以上是常见的一些反爬机制,希望对大家有帮助。

    经过测试,人民网的反爬机制并不是特别严格,参数设置对了的话,基本上爬取不会受到什么限制。

    不过如果是比较大量的数据爬取时,最好设置好爬取延时 以及 断点续爬 功能。

    1.3 完善代码

    首先导入需要的库。

    每个库在本爬虫代码中的用处在注释中已经标注。

    import requests						# 发起网络请求
    from bs4 import BeautifulSoup		# 解析HTML文本
    import pandas as pd					# 处理数据
    import os
    import time			# 处理时间戳
    import json			# 用来解析json文本
    

    发起网络请求函数 fetchUrl

    函数用途及三个参数的含义,已在代码注释中标注,返回值为 json 类型的数据

    '''
    用于发起网络请求
    url : Request Url
    kw  : Keyword
    page: Page number
    '''
    def fetchUrl(url, kw, page):
        # 请求头
        headers={
            "Accept": "application/json, text/plain, */*",
            "Content-Type": "application/json;charset=UTF-8",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36",
        }
        
        # 请求参数
        payloads = {
            "endTime": 0,
            "hasContent": True,
            "hasTitle": True,
            "isFuzzy": True,
            "key": kw,
            "limit": 10,
            "page": page,
            "sortType": 2,
            "startTime": 0,
            "type": 0,
        }
    
        # 发起 post 请求
        r = requests.post(url, headers=headers, data=json.dumps(payloads))
        return r.json()
    

    数据解析函数 parseJson

    解析 json 对象,然后将解析到的数据包装成数组返回

    def parseJson(jsonObj):
        #解析数据
        records = jsonObj["data"]["records"];
        for item in records:
            # 这里示例解析了几条,其他数据项如末尾所示,有需要自行解析
            pid = item["id"]
            originalName = item["originalName"]
            belongsName = item["belongsName"]
            content = BeautifulSoup(item["content"], "html.parser").text
            displayTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(item["displayTime"]/1000))
            subtitle = item["subtitle"]
            title = BeautifulSoup(item["title"], "html.parser").text
            url = item["url"]
            
            yield [[pid, title, subtitle, displayTime, originalName, belongsName, content, url]]
    

    数据保存函数 saveFile

    '''
    用于将数据保存成 csv 格式的文件(以追加的模式)
    path   : 保存的路径,若文件夹不存在,则自动创建
    filename: 保存的文件名
    data   : 保存的数据内容
    '''
    def saveFile(path, filename, data):
        # 如果路径不存在,就创建路径
        if not os.path.exists(path):
            os.makedirs(path)
        # 保存数据
        dataframe = pd.DataFrame(data)
        dataframe.to_csv(path + filename + ".csv", encoding='utf_8_sig', mode='a', index=False, sep=',', header=False )
    
    

    主函数

    if __name__ == "__main__":
    	# 起始页,终止页,关键词设置
        start = 1
        end = 3
        kw = "春节"
        
        # 保存表头行
        headline = [["文章id", "标题", "副标题", "发表时间", "来源", "版面", "摘要", "链接"]]
        saveFile("./data/", kw, headline)
        #爬取数据
        for page in range(start, end + 1):
            url = "http://search.people.cn/api-search/elasticSearch/search"
            html = fetchUrl(url, kw, page)
            for data in parseJson(html):
                saveFile("./data/", kw, data)
            print("第{}页爬取完成".format(page))
        
        # 爬虫完成提示信息
        print("爬虫执行完毕!数据已保存至以下路径中,请查看!")
        print(os.getcwd(), "\\data")
    

    以上为本爬虫的全部代码,大家可以在此基础上进行修改来使用,仅供学习交流,切勿用于违法用途。

    注:这里没有写正文爬取的代码,一是人民网文章正文爬取的函数在上一篇文章中已经写了,大家有需要的话可以自行整合代码;二是,爬取正文的话会引入一些其他的问题,比如链接失效,文章来源于不同网站,解析方式不同等问题,说来话长,本文主要以思路讲解为主。

    1.4 成果展示

    1.4.1 程序运行效果

    1.4.2 爬到的数据展示

    image-20210206201915970

    2. 利用现有数据筛选

    如果你已经提前下载到了全部的新闻文章数据,那用这种方法无疑是最方便的,省去了漫长的爬取数据的过程,也省得跟反爬机制斗智斗勇。

    2.1 数据来源

    下载地址:https://github.com/caspiankexin/people-daily-crawler-date

    以上是一个读者朋友爬取的人民日报新闻数据,包含从 19 年起至今的数据,每月一更新,应该可以满足很大一部分人对数据的需求了。

    此外我还有之前爬的 18 年全年的数据,如果有需要的朋友,可以私聊找我要。

    2.2 检索代码

    以如下图所示的目录结构为例。

    image-20210206202425501

    假设我们有一些关键词,需要检测这些新闻文章中哪篇包含有关键词。

    import os
    
    # 这里是你文件的根目录
    path = "D:\\Newpaper\\2018"
    
    # 遍历path路径下的所有文件(包括子文件夹下的文件)
    def iterFilename(path):
        #将os.walk在元素中提取的值,分别放到root(根目录),dirs(目录名),files(文件名)中。
        for root, dirs, files in os.walk(path):
            for file in files:
                # 根目录与文件名组合,形成绝对路径。
                yield os.path.join(root,file)
    
    # 检查文件中是否包含关键词,若包含返回True, 若不包含返回False
    def checkKeyword(filename, kwList):
        with open(filename, "r", encoding="utf-8") as f:
            content = f.read()
            for kw in kwList:
                if kw in content:
                    return True, kw
        return False, ""
                
    if __name__ == "__main__":
        # 关键词数组
        kwList = ["经济", "贸易"]
        #遍历文章
        for file in iterFilename(path):
            res, kw = checkKeyword(file, kwList)
            if res:
                # 如果包含关键词,打印文件名和匹配到的关键词
                print("文件 ", file," 中包含关键词 ", kw)
    

    2.3 运行结果

    运行程序,即可从文件中筛选出包含关键词的文章。


    2021年9月9日更新

    最近有读者在复现文中的爬虫时,发现有如下报错:

    in parseJson records = jsonObj[“data”][“records”];
    TypeError:“data”

    经过调试检查后,发现这个报错是因为原网站中,关键词搜索的接口更换了,导致数据获取失败。

    解决办法:

    将主函数部分的 url 替换成新的接口 http://search.people.cn/api-search/front/search 即可,如下所示。

    if __name__ == "__main__":
    	# 起始页,终止页,关键词设置
        start = 1
        end = 3
        kw = "春节"
        
        # 保存表头行
        headline = [["文章id", "标题", "副标题", "发表时间", "来源", "版面", "摘要", "链接"]]
        saveFile("./data/", kw, headline)
        #爬取数据
        for page in range(start, end + 1):
            # url = "http://search.people.cn/api-search/elasticSearch/search"
            url = "http://search.people.cn/api-search/front/search"
            html = fetchUrl(url, kw, page)
            for data in parseJson(html):
                saveFile("./data/", kw, data)
            print("第{}页爬取完成".format(page))
        
        # 爬虫完成提示信息
        print("爬虫执行完毕!数据已保存至以下路径中,请查看!")
        print(os.getcwd(), "\\data")
    

    2021年12月13日更新

    最近有读者反馈,程序运行又报错了,可能是网站那个接口又换了。

    我查看了一下,确实是这样。

    只需要将接口替换为 http://search.people.cn/search-platform/front/search 即可,替换方法同上。


    如果文章中有哪里没有讲明白,或者讲解有误的地方,欢迎在评论区批评指正,或者扫描下面的二维码,加我微信,大家一起学习交流,共同进步。

    展开全文
  • 我想在python上 input 一句命令,然后用jieba分词选出数据库里的有的关键字 ![图片说明](https://img-ask.csdn.net/upload/201907/31/1564543007_603465.png) ![图片说明]...
  • 系统从语言的词性角度考虑,对传统的最大匹配分词进行了改进,提出一种基于动词、虚词和停用词三个较小词库的快速分词方法(FS),并利用TFIDF算法来筛选关键词以完成将Web文档进行快速有效分类的目的。...
  • Python获取高德POI(关键词搜索)

    千次阅读 多人点赞 2022-03-22 03:41:20
    构建保存函数 3.1 高德的坐标系 3.2 循环体代码的理解 完整代码: 运行结果 高德POI的获取 改进代码 该篇文章是关键词搜索获取高德poi,但鉴于无法突破900条记录的上限,因此重写了矩形搜索的文章,具体可参考...

    高德POI的获取

    改进代码

    该篇文章是关键词搜索法获取高德poi,但鉴于无法突破900条记录的上限,因此重写了矩形搜索法的文章,具体可参考以下文章:

    高德poi获取之矩形搜索法(冲出900条限制)

    (建议没有python基础的朋友先阅读该篇再看矩形搜索法!)

    前言

    首先我们需要明白一些常识

    1. poi是兴趣点,它本身除了经纬度,还记录了一些信息,如名称、地址、联系方式、所属行政区
    2. 高德poi是指从高德地图上获取poi,所以我们借助的平台是高德地图
    3. 高德地图知道有很多人需要用到poi,因此它十分良心地推出了若干个接口(API),借助这些API我们就可以各取所需。
    4. 最容易被忽略的一点,通过高德地图获取得到的坐标会有偏移,具体详看3.2节,因此我们获取得到的坐标还需要经过坐标系转换才能得到正确的坐标,

    API的理解
    我们把整个poi的获取理解成以下几个步骤:
    (1)找“高德地图”这个人申请要数据
    (2)高德地图他说你申请数据需要先填一下这张数据需求表
    (3)你拿到这张表(API),开始填写表(API)里的信息,包括POI的类别,POI的区域,需要数据的格式
    (4)高德地图看了你填写的需求表,就从它的数据库里找到并且交回给你
    (5)你拿到数据之后,筛选出关心的信息,之后就找各种方式把数据保存起来,例如存成一份excel表,或者一份txt文件,抑或是csv表格等等
    所以通俗地讲,API就是一份表,通过这个表可以让对方返回你需要的东西,只不过实际上,这个表是用链接的形式发给你,在链接里填入信息就相当于填表的行为了

    查看API接口

    在高德开放平台上,我们获取poi所需的接口位于[开发支持]-[Web服务]-[Web服务API]下,点击即可进到主页。我们需要用到的接口如下图所示:
    在这里插入图片描述
    在这里插入图片描述

    从图上可以知道,高德地图说想使用这个API,你必须有我家的密钥(key),因此我们首先需要去申请一下这个key。具体怎么申请可以参照以下这篇文章(https://zhuanlan.zhihu.com/p/96838566),接下来默认大家都有这个key了。

    然后呢,我们从适用场景那里得知,这个搜索poi有四种方法可以获取poi,分别是关键字搜索、周边搜索、多边形搜索和ID查询,我们这里使用最简单的关键字搜索
    在这里插入图片描述

    在关键字搜索下面,我们可以看到有个请求参数的表格,这个请求参数其实就是API里需要我们填写的信息,我们看到那么多参数,其实不用慌,分清哪些是必填的,哪些是可填的,接下来就好办了。
    在这里插入图片描述

    在这里插入图片描述

    从我框选的地方可以知道,其实必填的只有两三项。

    1.key,就是我们上面申请的密钥
    2.keywords或者types,注意是两者至少填一个,我示例里选择的是types
    3.city,这个如果不填的话默认是帮你搜索全国的,但我们一般都会指定一个区域
    4.page,你可以想象成一页页的纸,高德地图默认每页20条信息,默认返回一页给你,也就是20条。那么为了获取全部的poi,我们需要高德地图返回尽可能多页给我们,直到搜不到poi为止,因此这个参数在控制循环的时候尤为重要
    5.output,返回的数据格式类型,我们一般都返回JSON格式,方便我们处理
    

    接下来,我们查看一下返回的参数,这部分内容比较多,因此我录了个视频来讲解。

    核心参数:

    1. status
    2. pois(核心参数:location、name等)
    

    查看完返回结果参数之后,我们就已经明白了我们需要填写的信息和最后得到的信息有哪些,那么距离开始操作就只差最后一步了,就是拿表(API)填写
    高德地图里给我们举了个栗子:
    在这里插入图片描述

    不难发现,这个API里面有一些参数是我们熟悉的,例如keywords、city、key,并且这些关键词都是通过“&”符号进行连接,因此我们只要能够替换掉它的这些信息,就可以完成API的构建啦。
    例如我需要获取东莞市的,就把 city=beijing改成city = 东莞市需要获取公园类型的poi,就把keywords换成types,然后types = 公园即可。

    实现思路

    这是我的一些想法:

    1. 我们现在已经学会怎么通过修改链接里的关键词来构建我们所需的API,那么下一步其实只需要向高德地图发出申请即可

    2. 但仔细思考,我们可以把整个过程划分成以下三个部分:

      • 发出一次申请,高德地图返回一页数据给我,我们可以将这一次的申请想象成举手向老师拿东西(但注意,老师不会一次性把所有东西都给你)
      • 我们通过某个指标,保证区域内的poi都获取完,这个过程理解为如果老师没有把东西全都给我,那我就一直举手,直到给完为止。
      • 获取完之后我们需要将数据存到电脑上,因此这个过程需要我们想方设法地存成某种文件。
    3. 通过上面过程的划分,我们可以抽象成三个函数,一个举手函数,一个反复举手函数,一个保存结果函数。

    4. 虽然我在这次实验中需要获取高德地图poi,但如果下次我需要获取另外一个地方的其他类型poi,我能否用这次的方法来直接获取而不是重新写一次代码?

    5. 因此我想将上述的过程都封装成函数,下次再使用的时候只需要改改地区、poi类别即可完成所有工作。

    实现过程

    这里我们引入所需要的库

    #库的说明
    1.requests --爬虫常用库
    2.json  --该库能够帮我们处理高德返回的JSON格式的数据
    3.xlwt  --名字很奇怪,但它是xlsx、xls writer的意思,就是存储为excel表格库
    4.Coordin_transformlat -- 这个是自己写的一个坐标转换的库,其目的是为了解决开头说的坐标偏移的问题
    5.urlib -- 主要使用该库里的quote函数,因为当我们向电脑输入汉字时,计算机其实并不认识汉字,因为它只认识0101这些二进制代码,那么quote函数就可以将汉字翻译成计算机能够懂的语言。
    
    #引入所需的库
    import requests
    import json
    from urllib.parse import quote
    import xlwt
    from Coordin_transformlat import gcj02towgs84
    

    1.构建一个申请的函数(举手函数)

    回想一下刚刚的api,申请必须填写的几个参数:key,city,types或keywords,同时,容易忽略的一个参数是page,在请求函数里page是个可选参数,表示当前页数,我们可以通过递增page的值来反复地提交申请,例如第一次先申请第一页,第二次申请第二页这样实现,所以这里至少需要四个参数

    代码理解
    url: 是一个链接,通过访问这个链接,我们可以获取得到所需的数据
    User-Agent:用户代理头,因为我们编写的是爬虫程序,通过爬虫去获取数据,而网站其实是不太支持爬虫爬取数据,因为爬虫的访问次数太快太多了,后台容易崩溃。那怎么让对方认不出来这是个爬虫呢?
    通过添加User-Agent来给爬虫戴上用户(指正常浏览网站的人)的面具,这样瞒过对方视线,一般设置在headers里。
    在这里插入图片描述

    request.get():我们通过get(url,header)来爬取数据
    get()方法,只要你输入一个网址就可以模拟人浏览网站的行为,相当于访问url这个链接

    def Get_poi(key,city,types,page):
        '''
        这是一个能够从高德地图获取poi数据的函数
        key:为用户申请的高德密钥
        city:目标城市
        types:POI数据的类型
        page:当前页数
        '''
        
        #设置header
        header = {'User-Agent': "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"}
        
        #构建url
        #{}在链接里表示占位符,也就是占住位置先不填写,.format()里就是往刚刚占位符的地方填写变量,按照顺序一一对应,第一个{}里是key,第二个{}里是types
        url = 'https://restapi.amap.com/v3/place/text?key={}&types={}&city={}&page={}&output=josn'.format(key,types,quote(city),page)
    
        #用get函数请求数据
        r = requests.get(url,headers=header)
        #设置数据的编码为'utf-8'
        r.encoding = 'utf-8'
        #将请求得到的数据按照'utf-8'编码成字符串
        data = r.text
        return data
    

    2.构建反复申请的函数(多次举手)

    这里只需要重复调用上面构造好的申请函数,直到最后一页的数据条数(Count)为0
    在这里插入图片描述

    因此这里只要当前页数(page)的记录条数(count)不为0,就一直执行循环

    def Get_times(key,city,types):
        '''
        这是一个控制申请次数的函数
        '''
        page = 1
        #创建一个poilist的空列表
        poilist = []
        #执行以下代码,直到count为0的时候跳出循环
        while True:
            #调用第一个函数来获取数据
            result = Get_poi(key,city,types,page)
            
            #json.loads可以对获取回来JSON格式的数据进行解码
            content = json.loads(result)
    
            #content的样子其实跟返回结果参数是一样的,可以想象成有很多个字段的excel表格,下面这个语句就是提取出pois那个字段
            pois = content['pois']
            
            #pois的信息写入空列表里,这里由于不知道返回的数据长什么样子,所以会难以理解些
            for i in range(len(pois)):
                poilist.append(pois[i])
            
            #递增page
            page = page + 1
    
            #判断当前页下的count是否等于0
            if content['count'] == '0':
                break
        #将写好poi信息的列表返回
        return poilist
    

    content的样子:
    在这里插入图片描述

    这图里,我们可以看到有很多条数据,这些数据就是高德地图返回给我们的,但类似于info、suggestion这些字段我们是不关心的,我们只关心pois这个字段,所以我们用pois = content['pois']这行代码来提取出pois这个字段。
    但如果观察得仔细,你会发现pois字段里面还有很多的信息,除了我们关心的location、name以外,还有id、parent、email等,所以第三步需要我们再一次筛选信息

    3.构建保存函数

    通过上述的函数,我们得到了只包含pois字段的列表,但这个pois字段里还有很多无关的信息,因此我们这里单独提取出经纬度(location)、名称(name)、地址(address)

    (下面这段代码是直接搬了别人的过来,现成的就不用自己再写一遍了,意义不大)
    借鉴博客:(https://blog.csdn.net/john_ashley/article/details/114196683)

    def write_to_excel(poilist, city,types):
        '''
        这是一个可以将列表写入excel的函数
        poilist -- 上面得到的poilist
        city -- 城市名,这个参数是保存excel文件的名字用的
        types -- poi类别,这个也是为了保存excel文件,可直接看代码最后一行
        '''
        #我们可以把这两行代码理解成新建一个excel表,第一句是新建excel文件
        book = xlwt.Workbook(encoding='utf-8', style_compression=0)
        #往这个excel文件新建一个sheet表格
        sheet = book.add_sheet(types, cell_overwrite_ok=True)
    
        # 第一行(列标题)
        sheet.write(0, 0, 'x')
        sheet.write(0, 1, 'y')
        sheet.write(0, 2, 'count')
        sheet.write(0, 3, 'name')
        sheet.write(0, 4, 'address')
        sheet.write(0, 5, 'adname')
    
        #最难理解的地方应该是这里了,放到代码后面讲解
        for i in range(len(poilist)):
            name = poilist[i]['name']
            location = poilist[i]['location']
            address = poilist[i]['address']
            adname = poilist[i]['adname']
            lng = str(location).split(",")[0]
            lat = str(location).split(",")[1]
    
            #这里是坐标系转换,也放到代码后面详解
            result = gcj02towgs84(location)
            lng = result[0]
            lat = result[1]
    
            # 每一行写入
            sheet.write(i + 1, 0, lng)
            sheet.write(i + 1, 1, lat)
            sheet.write(i + 1, 2, 1)
            sheet.write(i + 1, 3, name)
            sheet.write(i + 1, 4, address)
            sheet.write(i + 1, 5, adname)
        # 最后,将以上操作保存到指定的Excel文件中
        book.save(city + "_" + types + '.xls')
    

    第三个文件其实难以理解的地方只有for循环跟坐标系转换,第一个是技术问题,第二个是背景问题,我们先来将坐标系。

    3.1 高德的坐标系

    1.为什么高德地图得到的坐标系不能直接使用?

    其实是因为国家规定,中国大陆所有公开地理数据都需要至少用GCJ-02进行加密,也就是说我们从国内公司的产品中得到的数据,一定是经过了加密的。绝大部分国内互联网地图提供商都是使用GCJ-02坐标系,包括高德地图,谷歌地图中国区等。

    2.关于这个GCJ-02坐标系

    GCJ-02(G-Guojia国家,C-Cehui测绘,J-Ju局),又被称为火星坐标系,是一种基于WGS-84制定的大地测量系统,由中国国测局制定。此坐标系所采用的混淆算法会在经纬度中加入随机的偏移。所以这就是我们为什么需要对获取得到的经纬度进行坐标系转换的原因了。

    3.“Coordin_transformlat – 这个是自己写的一个坐标转换的库” 这个怎么理解呢?

    其实呢,就是自己写了一个python文件,只不过在这个文件里有一些方法,我希望在另外的文件里也能用上,所以通过import的方法引入,例如我在A文件里写了某个方法,然后我在B文件里也想使用这个方法,那么我在B文件里import A即可。
    当B文件运行的时候,系统读到了这个方法,就会去A文件里看看这个方法是怎样的,大致如此。

    4.Coordin_transformlat这个模块有什么用呢?

    在这里插入图片描述

    从上面标注其实可以发现,这个模块里头有许多函数,如bd09todcj02,gcj02tobd09,wgs84togcj02等等,其实这些都是坐标转换的函数,目的不就是实现坐标转换吗?所以在代码中的那句result = gcj02towgs84(location)就不难理解了,是从火星坐标系(gcj02)转向WGS84坐标系。

    Coordin_transformlat源代码

    # * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
    # * 即 百度 转 谷歌、高德
    # * @param bd_lon
    # * @param bd_lat
    # * @returns {*[]}
    # */
    import math
    def bd09togcj02(bd_lon, bd_lat):
        x_pi = 3.14159265358979324 * 3000.0 / 180.0
        x = bd_lon - 0.0065
        y = bd_lat - 0.006
        z = math.sqrt(x * x + y * y) - 0.00002 * math.sin(y * x_pi)
        theta = math.atan2(y, x) - 0.000003 * math.cos(x * x_pi)
        gg_lng = z * math.cos(theta)
        gg_lat = z * math.sin(theta)
        return [gg_lng, gg_lat]
    
    
    # * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
    # * 即谷歌、高德 转 百度
    # */
    def gcj02tobd09(lng, lat):
        x_PI = 3.14159265358979324 * 3000.0 / 180.0
        z = math.sqrt(lng * lng + lat * lat) + 0.00002 * math.sin(lat * x_PI)
        theta = math.atan2(lat, lng) + 0.000003 * math.cos(lng * x_PI)
        bd_lng = z * math.cos(theta) + 0.0065
        bd_lat = z * math.sin(theta) + 0.006
        return [bd_lng, bd_lat]
    
    
    # wgs84转高德
    def wgs84togcj02(lng, lat):
        PI = 3.1415926535897932384626
        ee = 0.00669342162296594323
        a = 6378245.0
        dlat = transformlat(lng - 105.0, lat - 35.0)
        dlng = transformlng(lng - 105.0, lat - 35.0)
        radlat = lat / 180.0 * PI
        magic = math.sin(radlat)
        magic = 1 - ee * magic * magic
        sqrtmagic = math.sqrt(magic)
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)
        dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * PI)
        mglat = lat + dlat
        mglng = lng + dlng
        return [mglng, mglat]
    
    
    # GCJ02/谷歌、高德 转换为 WGS84 gcj02towgs84
    def gcj02towgs84(localStr):
        lng = float(localStr.split(',')[0])
        lat = float(localStr.split(',')[1])
        PI = 3.1415926535897932384626
        ee = 0.00669342162296594323
        a = 6378245.0
        dlat = transformlat(lng - 105.0, lat - 35.0)
        dlng = transformlng(lng - 105.0, lat - 35.0)
        radlat = lat / 180.0 * PI
        magic = math.sin(radlat)
        magic = 1 - ee * magic * magic
        sqrtmagic = math.sqrt(magic)
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)
        dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * PI)
        mglat = lat + dlat
        mglng = lng + dlng
        return [lng * 2 - mglng,lat * 2 - mglat]
    
    
    def transformlat(lng, lat):
        PI = 3.1415926535897932384626
        ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * \
              lat + 0.1 * lng * lat + 0.2 * math.sqrt(abs(lng))
        ret += (20.0 * math.sin(6.0 * lng * PI) + 20.0 *
                math.sin(2.0 * lng * PI)) * 2.0 / 3.0
        ret += (20.0 * math.sin(lat * PI) + 40.0 *
                math.sin(lat / 3.0 * PI)) * 2.0 / 3.0
        ret += (160.0 * math.sin(lat / 12.0 * PI) + 320 *
                math.sin(lat * PI / 30.0)) * 2.0 / 3.0
        return ret
    
    
    def transformlng(lng, lat):
        PI = 3.1415926535897932384626
        ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + \
              0.1 * lng * lat + 0.1 * math.sqrt(abs(lng))
        ret += (20.0 * math.sin(6.0 * lng * PI) + 20.0 *
                math.sin(2.0 * lng * PI)) * 2.0 / 3.0
        ret += (20.0 * math.sin(lng * PI) + 40.0 *
                math.sin(lng / 3.0 * PI)) * 2.0 / 3.0
        ret += (150.0 * math.sin(lng / 12.0 * PI) + 300.0 *
                math.sin(lng / 30.0 * PI)) * 2.0 / 3.0
        return ret
    

    3.2 循环体代码的理解

     for i in range(len(poilist)):
            name = poilist[i]['name']
            location = poilist[i]['location']
            address = poilist[i]['address']
            adname = poilist[i]['adname']
            lng = str(location).split(",")[0]
            lat = str(location).split(",")[1]
    

    如果你想理解上面的循环体,那么必须要了解以下的知识:

    1. poilist是长什么样的
    2. for循环里的i
    3. 多维列表的遍历。

    那么下面我就一一讲解一下。
    poilist的样子大概是这样的:
    在这里插入图片描述

    这里需要注意的是,poilist它本身是一个列表,这个大列表里面包含着295个子项,每一个子项又是字典形式的。
    画出示意图大概就是下面这样:
    在这里插入图片描述

    name = poilist[i]['name']
    location = poilist[i]['location']
    address = poilist[i]['address']
    adname = poilist[i]['adname']
    

    所以你再看这几行代码的时候,是不是就没那么陌生了

    而在for循环里的i,它其实是个变量
    在这里插入图片描述

    你可以想象一下"有十只羊,按顺序排好队,一只只地送上屠宰场"这个情景,我们假设一个准备送上屠宰场的羊 的变量,那么随着羊一只只地走了,这个变量也在不断地指向下一只羊,它所指代的内容是不断变化的。

    再比如,在for i in range(1,10)这个代码里,第一次循环i是1,然后下一次循环的时候i就变成了2,下一次变成了3,只到所有的都轮过一遍才结束。

    因此,不难理解,在我们的代码for i in range(len(poilist)):里,i是一个变化着的数值,从0开始,直到变成poilist的长度那么大的数字结束。然后刚好这个数字放在了poilist[i]里,可以不断地指向poilist的每个子项。

    完整代码:

    import requests
    import json
    from urllib.parse import quote
    import xlwt
    from Coordin_transformlat import gcj02towgs84
    
    def Get_poi(key, city, types, page):
        '''
        这是一个能够从高德地图获取poi数据的函数
        key:为用户申请的高德密钥
        city:目标城市
        types:POI数据的类型
        page:当前页数
        '''
    
        # 设置header
        header = {
            'User-Agent': "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"}
    
        # 构建url
        # {}在链接里表示占位符,也就是占住位置先不填写,.format()里就是往刚刚占位符的地方填写变量,按照顺序一一对应,第一个{}里是key,第二个{}里是types
        url = 'https://restapi.amap.com/v3/place/text?key={}&types={}&city={}&page={}&output=josn'.format(key, types,
                                                                                                          quote(city), page)
    
        # 用get函数请求数据
        r = requests.get(url, headers=header)
        # 设置数据的编码为'utf-8'
        r.encoding = 'utf-8'
        # 将请求得到的数据按照'utf-8'编码成字符串
        data = r.text
        return data
    
    def Get_times(key, city, types):
        '''
        这是一个控制申请次数的函数
        '''
        page = 1
        # 创建一个poilist的空列表
        poilist = []
        # 执行以下代码,直到count为0的时候跳出循环
        while True:
            # 调用第一个函数来获取数据
            result = Get_poi(key, city, types, page)
    
            # json.loads可以对获取回来JSON格式的数据进行解码
            content = json.loads(result)
    
            # content的样子其实跟返回结果参数是一样的,可以想象成有很多个字段的excel表格,下面这个语句就是提取出pois那个字段
            pois = content['pois']
    
            # pois的信息写入空列表里,这里由于不知道返回的数据长什么样子,所以会难以理解些
            for i in range(len(pois)):
                poilist.append(pois[i])
    
            # 递增page
            page = page + 1
    
            # 判断当前页下的count是否等于0
            if content['count'] == '0':
                break
        # 将写好poi信息的列表返回
        return poilist
    
    def write_to_excel(poilist, city,types):
        '''
        这是一个可以将列表写入excel的函数
        poilist -- 上面得到的poilist
        city -- 城市名,这个参数是保存excel文件的名字用的
        types -- poi类别,这个也是为了保存excel文件,可直接看代码最后一行
        '''
        #我们可以把这两行代码理解成新建一个excel表,第一句是新建excel文件
        book = xlwt.Workbook(encoding='utf-8', style_compression=0)
        #往这个excel文件新建一个sheet表格
        sheet = book.add_sheet(types, cell_overwrite_ok=True)
    
        # 第一行(列标题)
        sheet.write(0, 0, 'x')
        sheet.write(0, 1, 'y')
        sheet.write(0, 2, 'count')
        sheet.write(0, 3, 'name')
        sheet.write(0, 4, 'address')
        sheet.write(0, 5, 'adname')
    
        #最难理解的地方应该是这里了,放到代码后面讲解
        for i in range(len(poilist)):
            name = poilist[i]['name']
            location = poilist[i]['location']
            address = poilist[i]['address']
            adname = poilist[i]['adname']
            lng = str(location).split(",")[0]
            lat = str(location).split(",")[1]
    
            #这里是坐标系转换,也放到代码后面详解
            result = gcj02towgs84(location)
            lng = result[0]
            lat = result[1]
    
            # 每一行写入
            sheet.write(i + 1, 0, lng)
            sheet.write(i + 1, 1, lat)
            sheet.write(i + 1, 2, 1)
            sheet.write(i + 1, 3, name)
            sheet.write(i + 1, 4, address)
            sheet.write(i + 1, 5, adname)
        # 最后,将以上操作保存到指定的Excel文件中
        book.save(city + "_" + types + '.xls')
    
    
    #这里修改为自己的高德密钥
    key = '**********'
    
    #这里修改自己的poi类型
    types = ['公园广场','汽车服务']
    
    #建议将大区域切分成几个小区域来获取,保证获取的数据齐全
    city_list = ['白云区','天河区','越秀区','黄埔区']
    
    #先遍历city_list里面的每个区域
    for city in city_list:
        #再遍历types里的每个类别
        for type in types:
            poi = Get_times(key,city,type)
            print('当前城市:' + str(city) + ', 分类:' + str(type) + ", 总的有" + str(len(poi)) + "条数据")
            write_to_excel(poi,city,type)
            print('*'*50+'分类:'  + str(type) + "写入成功"+'*'*50)
    print('====爬取完成====')
    

    运行结果

    汽车服务的有几条数据都是897,应该是区域内的poi数量超过1000了,因此这个通过关键字搜索poi的方法还有待改善~码不动了,改日再战!
    总的来说,过程还是挺顺利的!
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 自然语言处理TF-IDF关键词提取算法

    千次阅读 2022-03-23 11:40:13
    自然语言处理TF-IDF关键词提取算法 1、关键词提取简介 关键词是指能反映文本主题或者主要内容的词语。关键词提取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来,是NLP领域的一个重要的子任务。在信息检索中...
  • python使用tf-idf判断文本关键词

    千次阅读 2017-12-05 22:41:59
    论文的关键词有着其特殊的重要使命,首先当然是方便别人浏览,可以一目了然的知道论文论述的主题,从而决定是否要花费...本demo用python语言结合jieba分词库+urllib爬虫库+beautifulsoup的html分析工具实现了tf-idf
  • 前两天看到论文《Chinese Poetry Generation with Planning based Neural Network》中使用TextRank进行关键词提取。在阅读文章时也想到了除了TextRank之外,经常还使用TFIDF进行关键词提取。 一些算法的使用取决于...
  • python素数筛

    2020-11-28 13:37:34
    埃拉托斯特尼筛 ,简称 埃氏筛 或 爱氏筛 ,是一种由希腊数学家 埃拉托斯特尼 所提出的一种简单 检定素数 的算法。 要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。 给出...
  • 大家做阿里巴巴国际站的平台运营,建立关键词词库是非常重要的一个环节。当你收集了几千甚至上万个关键词的时候,如何对keywords进行快速的分门罗类呢? 关键词分类是重要的一个环节,你需要知道不同的关键词有不同的...
  • 今天分享一个运营知识点“关键词”,无论是新品上架还是老链接维护,无不影响着商家日常优化。而优秀的操盘手有一个共性能力,就是望闻问切,化繁为简。 通过关键词数据分析,在繁琐的优化任务中直接找出问题的核心...
  • ( FS) ,并利用TFIDF算法来筛选关键词以完成将Web文档进行快速有效分类的目的。实验表明,该方法在不 影响分类准确率的情况下,分类的速度明显提高。 关键词: 计算机应用; 中文信息处理; 关键词提取; Web文档分类
  • 用Py做文本分析5:关键词提取

    千次阅读 2020-12-30 02:36:59
    针对一篇语段,在不加人工干预的情况下提取出其关键词首先进行分词处理关键词分配:事先给定关键词库,然后在文档中进行关键词检索关键词提取:根据某种规则,从文档中抽取最重要的词作为关键词有监督:抽取出候选词...
  • 广告关闭腾讯云11.11云上盛惠 ,精选... 而对此进行改进,用合数的最小质因子进行筛选来确保每个合数只被筛选一次,这就是欧拉筛。 但是具体是怎么做到每个合数只被筛选一次,我们来看下面的代码。 代码:def o...
  • 如何思考关键词分类?  在对关键词进行挖掘之后,就要对关键词进行选择和分组了,这样才可以决定使用什么样的网页承载这些关键词,是否需要编辑人员根据关键词提供内容,是否需要设计增加新类型的网页等。对已...
  • 3、使用抖音搜索重复以上步骤并筛选出3-5个关联词。 4、在视频的标题、作品中重复出现此关联词。 这种方法并不能让你上大热门,但可以在一定程度上提升你的播放量。 你学会了吗?关注大周,每天都能学到一个能赚钱...
  • 关键词布局应该是在建站前就需要着重考虑的,很多外贸朋友不懂如何布局关键词,根本原因在于他们不懂如何去挖掘属于自己产品及行业的长尾关键词。说到网站长尾关键词挖掘,大部分人会想到很复杂的关键词软件,其实并...
  • 相信很多SEO都有自己的关键词挖掘方法和工具,L氪迹此前也分享了很多关键词挖掘工具,其中小L最常用的还是百度推广后台、百度下拉关键词、百度相关搜索关键词(10x10关键词挖掘)、5118的关键词工具,因为这几种...
  • 几种常见的提取关键词的算法(4)

    千次阅读 2020-07-02 09:00:16
    有监督的文本关键词提取算法需要高昂的人工成本,因此现有的文本关键词提取主要采用适用性较强的无监督关键词抽取。其文本关键词抽取流程如下: 图 1 无监督文本关键词抽取流程图 无监督关键词抽取算法可以分为三大...
  • 第 1 .第期 9巷20 0 9年 3月.计算机技术与发展(( M It ER E... 2 0 r 09Mal t b环境下素数筛选算法的分析及比较 a张琦许勇2,(. 1西北大学软件学院,陕西西安 7 02;: 17 12安徽师范大学数学计算机科学学院, .安徽芜...
  • 虽然问题从传统搜索时代就已经有的讨论,其实没有像其他领域蹦出什么可以被称为统治级别的方案,当然也有attention能一定程度充当这个功能的原因吧,在这篇文章中提到的,关键词抽取同样不是什么高端的玩。...
  • 9个关键词,2万字漫谈元宇宙

    千次阅读 2021-12-03 10:21:57
    以上两种还是讲究点"沉浸感"和玩的,像Decentraland这种主打的是"稀缺性",大佬们进去主要是玩币买地,目前一块虚拟的地已经卖到高达十万百万美刀。这种是"氪金型"元宇宙,屌丝在现实生活买不起房,进这种元宇宙...
  • 深度学习----NLP关键词抽取的常见算法

    万次阅读 多人点赞 2018-12-20 16:27:04
    文章目录方法分类NO.1、文本关键词提取算法基于统计特征的关键词提取算法1、基于词`权重`的特征量化2、基于词...NO.3、文本关键词提取算法基于主题模型的关键词抽取NO.4、文本关键词提取算法NO.5、文本关键词提取算法...
  •   为了验证利用Python词云进行关键词分析的效果,对方法一中练习文本(文本附件下载地址 https://pan.baidu.com/s/1WDcxwhZhibNGQNTRjg9hfA )进行分析,生成词云效果图,并根据词云得到的关键词和方法一中...
  • Google Ads关键词不展现的原因及解决方法
  • 关键词的提取是进行计算机自动文本分类和其他文本数据挖掘...(,-),并利用.,/0, 算法来筛选关键词以完成将123 文档进行快速有效分类的目的。实验表明,该方法在不 影响分类准确率的情况下,分类的速度明显提高。
  • 【转载】文本关键词提取算法解析

    千次阅读 2018-09-12 19:08:38
    与此同时,不管是基于文本的推荐还是基于文本的搜索,对于文本关键词的依赖也很大,关键词提取的准确程度直接关系到推荐系统或者搜索系统的最终效果。因此,关键词提取在文本挖掘领域是一个很重要的部分。 关于文本...
  • 大数据之关键词提取--算法介绍TF-IDF

    千次阅读 2018-09-29 23:27:41
    spark TF-IDF特征提取生成文章关键词 首先介绍下TF-IDF TF-IDF TF-IDF(term frequency–inverse document frequency)中文”词频-逆向文件频率”,通过它将文本特征向量化,用以评估一字词对于一个文件集或一个语料...
  • 大家都知道,SEO网站优化过程中有很多方面都要重视,例如内容、关键词、外链、内链、结构等,这些因素会影响网站收录、流量、排名等,但是对于长尾关键词,很多时候会被人忽略。大家可能会觉得它搜索量不大,带来的...

空空如也

空空如也

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

关键词筛选法