精华内容
下载资源
问答
  •  所谓图像模式,就是把色彩分解成部分颜色组件,对颜色组件不同的分类就形成了不同的色彩模式。(摘自百度百科)  所谓位图,又称栅格图(英语:Raster graphics)或点阵图,是使用像素阵列(Pixel-array/Dot-...

    原文:https://www.jianshu.com/p/2e9539bdc307

           首先看看几个概念。

           所谓图像模式,就是把色彩分解成部分颜色组件,对颜色组件不同的分类就形成了不同的色彩模式。(摘自百度百科)

           所谓位图,又称栅格图(英语:Raster graphics)或点阵图,是使用像素阵列(Pixel-array/Dot-matrix点阵)来表示的图像。位图的像素都分配有特定的位置和颜色值。每个像素的颜色信息由RGB组合或者灰度值表示。根据位深度,可将位图分为1、4、8、16、24及32位图像等。每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就越逼真,相应的数据量越大。例如,位深度为 1 的像素位图只有两个可能的值(黑色和白色),所以又称为二值位图。位深度为 8 的图像有 28(即 256)个可能的值。位深度为 8 的灰度模式图像有 256 个可能的灰色值。(摘自维基百科)

           所谓RGB图像,由三个颜色通道组成。8 位/像素的 RGB 图像中的每个通道有 256 个可能的值,这意味着该图像有 1600 万个以上可能的颜色值。有时将带有 8 位/通道 (bpc) 的 RGB 图像称作 24 位图像(8 位 x 3 通道 = 24 位数据/像素)。通常将使用24位RGB组合数据位表示的的位图称为真彩色位图。

           所谓BMP文件,是微软公司所开发的一种交换和存储数据的方法,各个版本的Windows都支持BMP格式的文件。Windows提供了快速、方便的存储和压缩BMP文件的方法。BMP格式的缺点是,要占用较大的存储空间,文件尺寸太大。

           在PIL中,图像模式大致分为九种,分别为:1,L,P,RGB,RGBA,CMYK,YCbCr,I, F。

    1.模式"1"

           模式"1"为二值图像,非黑即白。但是它的每个像素用8个bit表示,0表示黑,255表示白。

           以上面这张图片作为实验样例(empire.jpg),上图是RGB模式的,现在将其转换为模式为"1".

    from PIL import Image
    
    empire = Image.open('empire.jpg')
    print(empire.mode)                       # RGB
    empire_1 = empire.convert('1')
    print(empire_1.mode)                     # 1
    print(empire.size, empire_1.size)        # (1920, 1080) (1920, 1080)
    print(empire.getpixel((0, 0)))           # (9, 5, 2)
    print(empire.getpixel((10, 120)))        # (21, 16, 10)
    print(empire_1.getpixel((0, 0)))         # 0
    print(empire_1.getpixel((10, 120)))      # 255
    empire_1.save("empire_1.jpg")

           以上代码,先是打开一个RGB模式的图片,然后将其转换为模式为"1"的图片,可以看到模式变化后,图片大小前后并未发生改变,然后对比了相同坐标位置的不同模式下的像素值,可以看到,对于RGB模式图像,像素值包含R,G,B三点要素的占比,而对于模式为"1"的图像,像素值只有0和255两种取值。最后,将转换成功的模式为"1"的图像保存,图片显示如下:

    2.模式"L"

           模式"L"为灰度图像,它的每个像素用8个bit位表示,其中0表示黑,255表示白,其它数字表示不同的灰度。在PIL模式中, 从模式"RGB"转换到模式"L",有一个计算公式,即:L = R * 299/1000 + G * 587/1000+ B * 114/1000(只取整数部分)。
           下面将模式"RGB"的图像转换为模式"L"的图像:

    from PIL import Image
    
    empire = Image.open('empire.jpg')
    print(empire.mode)                       # RGB
    empire_1 = empire.convert('L')
    print(empire_1.mode)                     # 1
    print(empire.size, empire_1.size)        # (1920, 1080) (1920, 1080)
    print(empire.getpixel((0, 0)))           # (9, 5, 2)
    print(empire.getpixel((10, 120)))        # (21, 16, 10)
    print(empire_1.getpixel((0, 0)))         # 5
    print(empire_1.getpixel((10, 120)))      # 16
    empire_1.save("empire_L.jpg")

           同样地,先是打开一个RGB模式的图片,然后将其转换为模式为"L"的图片,可以看到模式变化后,图片大小前后并未发生改变,然后对比了相同坐标位置的不同模式下的像素值,可以看到,对于RGB模式图像,像素值包含R,G,B三点要素的占比,而对于模式为"L"的图像,不同于模式"1", 像素值可以取到0-255之间的任何值。然后校验一下"RGB"与"L"模式转换的像素转换公式:

           最后,将转换成功的模式为"L"的图像保存,图片显示如下:

    3.模式"P"

           模式"P"为8位彩色模式,它的每一个像素用8个bit表示, 其对应的色彩是按照调色板查询出来的。
           下面将模式"RGB"的图像转换为模式为"P"的图像。

    from PIL import Image
    
    empire = Image.open('empire.jpg')
    print(empire.mode)                       # RGB
    empire_1 = empire.convert('P')
    print(empire_1.mode)                     # 1
    print(empire.size, empire_1.size)        # (1920, 1080) (1920, 1080)
    print(empire.getpixel((0, 0)))           # (9, 5, 2)
    print(empire.getpixel((10, 120)))        # (21, 16, 10)
    print(empire_1.getpixel((10, 1)))        # 11
    print(empire_1.getpixel((101, 33)))      # 17
    empire_1.save("empire_P.bmp")

            代码基本不变,转换后的图像如图:

    4.模式"RGBA"

           "RGBA"模式为32位彩色模式,其中24个bit分别表示红色,绿色,蓝色三个通道,另外8个bit 表示alpha通道,即透明通道。

    from PIL import Image
    
    empire = Image.open('empire.jpg')
    print(empire.mode)                       # RGB
    empire_1 = empire.convert('RGBA')
    print(empire_1.mode)                     # 1
    print(empire.size, empire_1.size)        # (1920, 1080) (1920, 1080)
    print(empire.getpixel((0, 0)))           # (9, 5, 2)
    print(empire.getpixel((10, 120)))        # (21, 16, 10)
    print(empire_1.getpixel((10, 1)))        # (25, 20, 14, 255)
    print(empire_1.getpixel((101, 33)))      # (47, 33, 22, 255)
    empire_1.save("empire_RGBA.jpg")

           当将RGB转换为RGBA模式的图像时,alpha通道全部为255,即完全不透明。图像如下:

    5.模式"CMYK"

           模式“CMYK”为32位彩色图像,它的每个像素用32个bit表示。模式“CMYK”就是印刷四分色模式,它是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。四种标准颜色是:C:Cyan = 青色,又称为‘天蓝色’或是‘湛蓝’M:Magenta = 品红色,又称为‘洋红色’;Y:Yellow = 黄色;K:Key Plate(blacK) = 定位套版色(黑色)。
           下面我们将模式为“RGB”的lena图像转换为“CMYK”图像。

    from PIL import Image
    
    empire = Image.open('empire.jpg')
    print(empire.mode)                       # RGB
    empire_1 = empire.convert('CMYK')
    print(empire_1.mode)                     # 1
    print(empire.size, empire_1.size)        # (1920, 1080) (1920, 1080)
    print(empire.getpixel((0, 0)))           # (9, 5, 2)
    print(empire.getpixel((10, 120)))        # (21, 16, 10)
    print(empire_1.getpixel((10, 1)))        # (230, 235, 241, 0)
    print(empire_1.getpixel((101, 33)))      # (208, 222, 233, 0)
    empire_1.save("empire_CMYK.jpeg")

           从实例中可以得知PIL中“RGB”转换为“CMYK”的公式如下:
           C = 255 - R
           M = 255 - G
           Y = 255 - B
           K = 0
           由于该转换公式比较简单,转换后的图像颜色有些失真。
           转换后的图像如下:

    6.模式"YCbCr"

           模式“YCbCr”为24位彩色图像,它的每个像素用24个bit表示。YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。

    from PIL import Image
    
    empire = Image.open('empire.jpg')
    print(empire.mode)                       # RGB
    empire_1 = empire.convert('YCbCr')
    print(empire_1.mode)                     # 1
    print(empire.size, empire_1.size)        # (1920, 1080) (1920, 1080)
    print(empire.getpixel((0, 0)))           # (9, 5, 2)
    print(empire.getpixel((10, 120)))        # (21, 16, 10)
    print(empire_1.getpixel((10, 1)))        # (20, 124, 131)
    print(empire_1.getpixel((101, 33)))      # (35, 120, 135)
    empire_1.save("empire_YCbCr.jpeg")

     

    7.模式"I"

           模式"I"为32位整型灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式"RGB"转换为"I"模式是按照下面的公式转换的:
    I = R * 299/1000 + G * 587/1000 + B * 114/1000

    8.模式"F"

           模式"F"为32位浮点灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式"RGB"转换为"F"模式是按照下面的公式转换的:
           F = R * 299/1000+ G * 587/1000 + B * 114/1000
           模式"F"与模式"L"的转换公式是一样的,都是RGB转换为灰色值的公式,但模式"F"会保留小数部分。


     

     

     

     

    展开全文
  • 对于混迹于国内外各漏洞测平台的菜鸟,以个人之见和能力所及对HackerOne写点介绍,谈点感受。 1 公司介绍 HackerOne是一个总部位于美国旧金山的漏洞测公司,公司分部位于荷兰格罗宁根。多家...

    3月,当美国国防部宣布与HackerOne合作邀请黑客参与“Hack the Pentagon”的漏洞奖励计划之后,让HackerOne再次成为业界焦点。对于混迹于国内外各漏洞众测平台的菜鸟,以个人之见和能力所及对HackerOne写点介绍,谈点感受。

    1 公司介绍

    HackerOne是一个总部位于美国旧金山的漏洞众测公司,公司分部位于荷兰格罗宁根。多家世界知名技术公司都使用HackerOne平台,如Yahoo、Twitter、Adobe、Uber、facebook等。目前,HackerOne平台注册黑客共3000多人来自150多个国家,漏洞众测合作企业达500多家。HackerOne是最早接受并利用黑客开展商业模式的公司之一。

    2 创业历史

    2011年,20多岁的荷兰黑客JobertAbma, Michiel Prins, 和Merijn Terheggen出于打赌,列出了他们计划入侵的100家高科技公司清单,不久,他们就发现Facebook, Google, Apple,Microsoft, Twitter等其它95家公司的网络系统中都存在不同程度的安全漏洞。他们将这一清单称作“Hack 100”。

    当他们联系这些公司时,有1/3的公司并不关注这些问题。另1/3的公司对他们表示感谢,但并未修复漏洞。而其余公司则试图尽快解决漏洞。幸运的是,没人通知警察。

    在处理Facebook漏洞时,他们与Facebook产品安全经理Alex Rice结识,共同组成公司合伙人,于2012年成立HackerOne。由Alex Rice担任公司CTO,Merijn Terheggen任CEO,Jobert Abma任技术领导,Michiel Prins为产品经理。2014年, 微软前首席安全策略师(CPO)Katie Moussouris 加盟成为其 CPO。2015年底,MySQL和Eucalyptus前CEO Marten Mickos 出任HackerOne 公司CEO。

    3 投资情况

    2014年5月,HackerOne获得由Benchmark领投的900万美元A轮投资;2015年6月,HackerOne获得2500万美元B轮投资,由New Enterprise Associates领投,投资方有Nicolas Berggruen,Brandon Beck,David Sacks,Jeremy Stoppelman,Drew Houston,Marc Benioff,Benchmark等。

    4 盈利模式

    HackerOne以信息安全为重,通过在企业和黑客之间建立漏洞奖励平台,致力实现企业和黑客的利益双赢。HackerOne通过建立的漏洞众测平台,由众测企业向黑客支付发现漏洞的奖励,HackerOne则从企业奖励中抽取 20% 的费用。

    另外,HackerOne还通过向企业提供付费服务模式,如漏洞订阅服务、漏洞披露指导、安全咨询等。目前,HackerOne已帮助500多家企业找出2万多个漏洞,向3200多名独立安全研究员发放了600多万美元的奖励,单个漏洞奖励最多达到3万美元。

    5 服务方式

    For hackers:

    与通常的众测平台一样,注册,加入项目,提交漏洞;

    For companies:

    对于众测企业,HackerOne提供了四种服务模式:Security@、 Professional、Enterprise、Fully Managed,HackerOne对这几种模式的漏洞披露、漏洞管理、安全性等方面提供不同的服务,以下是不同服务模式的对比:

    Security Page页面包含公司情况、披露政策、希望邀请的黑客、漏洞规则等关键信息。

    Fully Managed是HackerOne的付费服务,针对那些想要对漏洞情况进行进一步筛查和校验的企业。企业通过Fully Managed模式可选择与HackerOne推荐的世界级安全咨询合作机构签订不定期的信息安全服务。

    Security@ 是HackerOne社区的安全项目快速查询目录,通过该查询目录可以快速找到在HackerOne平台上开展漏洞众测项目的企业,方便黑客提交漏洞。

    6 漏洞保密原则

    HackerOne只为“漏洞协作披露”项目提供处理工具,网站实行漏洞库访问控制权限,HackerOne雇员无权查看任何厂商漏洞信息,HackerOne决不与其它第三方分享客户的漏洞数据,并提倡以PGP加密方式提交漏洞信息。在漏洞未解决之前,所有提交漏洞信息除企业和漏洞提交者之外都不可见。

    7 漏洞奖励价格

    (1)依靠提交的漏洞质量来定。厂商给出的漏洞价格可以参考几个方面:漏洞严重性、对最终用户或客户的影响范围、项目预算、项目阶段及保密性、厂商漏洞披露计划成熟度等。

    (2)为了吸引和激励黑客,HackerOne规定每个漏洞奖励金额下限不低于100美元,针对大多数的一般漏洞,奖励金额范围为$100-$1,000,当然,HackerOne也提倡超出范围重奖某些严重漏洞。考虑到不同漏洞对不同厂商的影响不一,如Clickjacking类型漏洞对某些企业来说很严重,但对其它企业来说只属于informative类漏洞,因此,除规定100美金的下限外,HackerOne未针对不同漏洞类别设置最低奖励限制。奖励金额根据漏洞对厂商影响程度而定。

    (3)针对几类特别重要漏洞,为了提高奖励透明度和黑客期望值,HackerOne根据漏洞成熟度模型给出了一个以供企业参考的最低奖励结构,当然企业有权根据漏洞影响程度来上调最低奖励基准。如最近Uber的一个XSS漏洞奖励就达7000美金。

    8 安全性

    (1)所有和HackerOne服务器平台交流的信息都是加密的。安全团队可以使用HackerOne的IP白名单策略进行权限访问控制。

    (2)HackerOne采用军用级加密技术、双因子认证、单点登录、ISO/IEC 27001信息安全管理体系认证;

    (3)HackerOne提倡企业遵守ISO/IEC 29147-2014 《信息技术-安全技术-漏洞披露标准》,同时通过自动化平台帮助指导企业进行漏洞披露。ISO/IEC29147-2014标准的目的:为企业提供如何接收漏洞、发布漏洞解决方案的指导方针,为企业提供漏洞披露过程的相关信息和示例。

    9 特色点之DASHBOARD

    HackerOne的Dashboard功能是为了显示企业提交漏洞和奖励金额的准确信息,Dashboard还可以帮助企业确定和跟踪软件开发生命周期中的改进领域。通过Dashboard,企业可以查看每天、每周和每月的漏洞趋势和发展情况,数据产生的报告可下载为CSV格式保存。另外,如果企业需要更先进和及时的报告要求,可以通过HackerOne的API把Dashboard数据整合到第三方报告工具中。

    Dashboard的数据指标包括:解决的漏洞数、奖励金额总和、黑客致谢、奖励的报告数、奖金平均数、支付与漏洞解决占比、漏洞响应时间、漏洞解决时间、报告状态图、漏洞响应与解决时间状态图、奖金支付走势图、黑客获取金额排行图、黑客奖励次数排行图。

    10 特色点之漏洞协调成熟度模型

    HackerOne根据长期的漏洞提交模式分析,发布了针对漏洞协作披露的漏洞协调成熟度模型(Vulnerability Coordination Maturity Model,VCMM)。HackerOne认为,影响漏洞协作披露的因素主要包括5个方面的能力领域:组织、工程、交流、分析与激励,每个领域又包含基本、高级和专家3个成熟度等级,VCMM模型目的在于帮助企业评估漏洞协调机制,直观地识别出需要改进的领域,指导企业进行内外部组织能力提升,更好地消除安全漏洞隐患。

    HackerOne的VCMM针对社会面的公开测试模型为:VCMM-survey,当然除此之外,HackerOne还针对在其平台合作的众测企业提供漏洞信息量化模型指标。以下是VCMM5个能力领域的等级介绍:

    根据5方面的能力领域分值,VCMM可以确定企业在漏洞协调管理方面存在的问题和急需改进的领域,如以下为Adobe公司某个时期的VCMM模型图。

    11 HackerOne漏洞披露原则

    HackerOne声明的漏洞披露原则如下:所有的技术都包含漏洞,如果你发现了一个安全漏洞,我们希望帮助到你。通过HackerOne平台项目提交漏洞或注册成为众测企业,我们希望你阅读并同意以下准则。

    (1)披露哲学

    我们相信漏洞发现者和众测企业之间的相互尊重和透明度是有效漏洞披露流程的前提。

    漏洞提交者须:尊重规则、尊重隐私、保持耐心、友好;

    众测企业须:安全为重、尊重漏洞提交者、奖励漏洞提交者、友好。

    (2)漏洞披露流程:

    提交漏洞的报告内容将会立即提供给众测企业的安全团队,在非公开状态下,让企业有足够的时间验证漏洞并发布修补公告。在漏洞提交报告关闭后才能进行公开披露。

    一般情况:如果双方都不提出异议,漏洞提交报告的内容将在30天内公开。

    双方协议:我们鼓励漏洞提交者和企业就披露期限有良好的沟通协商,如果双方无异议,披露时间可按协商时间而定。

    保护性披露:如果企业发现所提交的漏洞正在被积极开发利用并对公众造成伤害,企业可以会立即向社会发布漏洞修补公告,以便用户可以采取保护措施。

    延伸:由于复杂性等因素的影响,一些漏洞将需要比30天更长的时间来进行修补。在这种情况下,漏洞报告还将继续保密,以确保企业安全团队有足够的时间来解决问题,同时,我们鼓励企业安全团队与漏洞提交者保持沟通。

    最后的手段:如果180天之内,众测企业安全团队无法或不愿提供一个确切的漏洞披露时间表,该漏洞的提交者有权公开漏洞内容。我们认为,在这种极端情况下,保持对公众透明是最好的方式。

    12 HackerOne与其它众测平台的横向比较

    2015年8月,宾夕法尼亚州立大学曾对几个著名的漏洞众测平台进行过研究分析,研究涉及众测平台提交的漏洞数、注册白帽人员、合作客户、漏洞奖金等,国内平台也包括在内,以下是HackerOne的各种指标对比图:

    从以上指标可以看出,HackerOne平台的白帽数量在公司创立之初时呈缓慢增长态势,另外,只有极少数机构获得的漏洞报告数较多,如twitter、facebook等财大气粗而霸气的明星企业;但是,从白帽与漏洞线性图可以看出,HackerOne平台的精英黑客较多,部分黑客长期活跃于平台,并且提交的漏洞质量较高。研究结果表明,国内众测平台的白帽数量相对较多,也比较活跃,但与国外众测平台相比,漏洞奖金差距较大,还有待提高。

    13 个人观点

    安全保密:HackerOne只提供漏洞报告、处理、咨询平台,HackerOne在无授权情况下无法访问查看众测企业漏洞信息,提交漏洞内容只有在完全解决之后才会公开。最重要的一点,HackerOne平台采用加密方式进行信息交互传输,最大程度保护白帽子信息;

    漏洞奖励:从最低奖励金额100刀就能初略反映出老美对安全的重视程度,另外,HackerOne对几类重要漏洞给出的参考性奖励结构对白帽子们来说也是相当具有吸引力的,如XXS(critical)和CSRF(critical)类漏洞能达到2500 刀,所有XSS类型漏洞为1000刀,虽然只是参考,但如果企业的最低奖励金额达不到这种标准,那么,企业信任度和众测吸引力将会受影响,当然白帽积极性也不会太高。如最近Uber的一个XSS漏洞奖励就达7000美金,另据HackerOne平台声称有些高级黑客每年能赚20多万美元,单个漏洞奖励曾达3万美元。

    专业合规性:参与众测的厂商大部分是知名和业界创新企业,这些企业具备的市场占有率要求企业对安全必须要有足够高的重视,当然除了认同HackerOne的披露政策外,这些企业在HackerOne上的众测项目还有自己的规则,比如,漏洞有效性、漏洞报告模板、漏洞测试规则等。作为白帽子们,HackerOne会定期对所提交漏洞的有效性进行评定,结合积分致谢等情况,作为白帽子的等级声誉,也作为某些邀请项目对白帽子的考核指标。

    法律界定性:这可能都是国内外众测平台面临的一个问题吧。首先,加入HackerOne众测项目的企业得遵守 HackerOne的披露规则,做到HackerOne 、企业和白帽子三方共同认可众测项目,最大程度地保护白帽子;另外,HackerOne 认为互联网世界就是未来信息战的前沿阵地,而黑客们就是士兵和武器制造者,如何赢得或征募黑客参与防卫,当前可能需要对现行的法律进行修改,以消除“安全防护”和“犯罪”之间的模糊界限,鼓励安全研究。HackerOne认为白帽子们利用稀缺珍贵的技术发现漏洞保护信息安全,这本身就是一个有利企业和公众的事情,如果白帽安全者能发现漏洞,其它坏人也可以发现,然而美国现行的计算机法律还未对白帽安全研究者给予明确保护。

    2015年5月,美国信息安全界提交了针对安全研究的豁免条款修订意见之后, 美国版权局修订了《数字千年版权法案》,加入了针对软件安全研究的免责说明。这对漏洞众测的未来,可能是一种进步。HackerOne 希望安全研究能受到法律的合法保护,并呼吁现行和未来的法律体系能为安全研究者创建一个良好的研究氛围。

    用户体验:总体来讲,HackerOne的用户体验度还是蛮好的,从注册、提交漏洞、信息接收和项目邀请等方面来讲,都能站在白帽和企业的角度来提供服务和考虑问题;另外白帽和企业之间的交流、奖励机制、漏洞调解都比较及时、透明和公开。其次,从HackerOne网站架构情况也可以体现出HackerOne具备的良好用户体验功能。

    以上就是对HackerOne的一些浅略介绍和分析,相比较而言,国内众测平台的发展也是相当不错的。就国内众测厂商来说,笔者对漏洞盒子比较熟悉,从其企业客户对众测服务的效果反馈和近年来迅速提升的接受度上来说,众测平台的存在价值毋庸置疑。

    就像HackerOne CEO Marten Mickos说的,漏洞众测平台的未来是生机蓬勃的,当然,众测的良好生态发展需要社会整体信息安全重视度、企业责任心、白帽技能、政策法规等因素的共同改善和提升。作为白帽子的我们在努力提高技能的同时,也不要忘记加入国内优秀众测平台为信息安全奉献自己的微薄之力。 





    ====================================分割线================================


    本文转自d1net(转载)

    展开全文
  • 环境: Python3.6 + windows10 jieba介绍以及分词的原理 ...2. jieba 提供三种分词模式 ,最简单只需要掌握一个函数 3.jieba的安装  只需要在cmd 中, pip install jieba  4.. jieba分...

    环境:  Python3.6 +  windows10

    jieba介绍以及分词的原理

    1. jieba 是Python中的优秀的中文分词第三方库

        --中文文本需要通过分词获得单个的词语

    2. jieba 库提供三种分词模式 ,最简单只需要掌握一个函数

    3.jieba库的安装

       只需要在cmd 中,   pip  install jieba     

    4.. jieba分词的原理    

            通过中文词库的方式来识别分词的

            -- 利用一个中文词库,确定汉字之间的关联概率

           -- 通过计算汉字之间的概率,汉字间概率大的组成词组,形成分词结果

           -- 除了分词,用户还可以添加自定义的词组

     jieba的三种模式以及函数介绍

     1.jieba分词的三种模式     

          精确模式 : 把文本精确的切分开,不存在冗余单词   (就是切分开之后一个不剩的精确组合) 常用

         全模式 : 把文本中所有可能的词语都扫描出来,有冗余

                      即: 可能有一个文本,可以从不同的角度来切分,变成不同的词语。在全模式下把不同的词语都挖掘出来

        搜索引擎模式:在精确 模式基础上,对长词语再次切分

    2. jieba库的常用函数

       (1)精确模式 函数  jieba.lcut(str)     返回列表类型

    import jieba
    """jieba.lcut(str)"""
    s = "中国是一个伟大的国家"
    print(jieba.lcut(s))
    """
        输出结果: ['中国', '是', '一个', '伟大', '的', '国家']
    
    """

      (2)全模式    jieba.lcut(str,cut_all=True)     返回列表类型 ,有冗余

    print(jieba.lcut(s,cut_all=True))
    """输出结果:['中国', '国是', '一个', '伟大', '的', '国家']"""

    (3) 搜索引擎模式: jieba.lcut_for_search(str)  返回列表类型,有冗余

         先按照精确模式进行分词,然后把把比较长的词进行再次分词

    s1 = "中华人民共和国是伟大的"
    print(jieba.lcut_for_search(s1))
    '''
    输出结果 : ['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的']
    '''

    (4) jieba.add_word(str)   向分词词典添加新词 str

     

     jieba使用实例

    文本词频的统计 :  一篇文章中,出现了哪些词?哪些词出现的最多?

     1. 首先是英文文本 ,对照英文的分词,进行中文分词   用到的英文文本的网站   网站的文本赋全部赋值下来,然后进行保存,: https://python123.io/resources/pye/hamlet.txt

    def getText():
        txt = open("E:\\\shuju\\hamelet.txt", "r").read()
        # 文章中的所有单词转化为小写
        txt = txt.lower()
        # 使用空格个来替换掉所有的符号
        for ch in "!\"#$%&()*+,-./:;<>=?@[\\]_'{|}~":
            txt = txt.replace(ch, " ")
        return txt
    
    
    def main():
        hamletTxt = getText()
        words = hamletTxt.split()
        counts = {}
        for word in words:
            # 获取键对应的值,如果键不存在,给出默认值0
            # 获取 每个单词出现的次数
            counts[word] = counts.get(word, 0) + 1
        # 把字典的键值对转化为元组,全部存放在列表里面
        items = list(counts.items())
        # 进行排序,按照每个元组的第二个值,即字典的值,进行降序排序
        items.sort(key=lambda x:x[1],reverse=True)
        # 对降序排序的前10个进行处理,
        # 格式化输出 : word: 最低长度为10,不够补空格    counts: 最低长度为5,不够的话补空格
        # print(items)
        for i in range(10):
            word,counts = items[i]
            print("{0:<10}{1:>5}".format(word,counts))
    
    
    if __name__ == '__main__':
        main()

    运行结果:

    the        1143
    and         966
    to          762
    of          669
    i           631
    you         554
    a           546
    my          514
    hamlet      471
    in          451

    2.中文的文本进行分析,和英文的相比不同,中文中的有名称、词语成语等

       现在只统计三国演义中的人物的出现次数,取出排行前10的人物出现的次数

        中文的文本网站: 三国演义的片段文本: https://python123.io/resources/pye/threekingdoms.txt

       详细看代码的注释

    """人物出场统计"""
    import jieba
    
    # 读取所有的文件
    txt = open("E:\\shuju\\threekingdoms.txt","r",encoding="utf-8").read()
    # 使用jieba分词的精确模式
    words = jieba.lcut(txt)
    counts = {}
    '''对进行分词的之后的结果进行处理,解决类似于孔明和诸葛亮是一个人物的问题,给其重新赋值'''
    for word in words:
        # 排除长度为1的
        if len(word) == 1:
            continue
        elif word == "诸葛亮" or word == "孔明曰":
            rword = "孔明"
        elif word == "关公" or word == "云长":
            rword = "关羽"
        elif word == "玄德" or word == "玄德曰":
            rword = "刘备"
        elif word == "孟德" or word == "丞相":
            rword = "曹操"
        elif word == "周瑜" or word == "都督":
            rword = "周瑜"
        else:
            rword = word
            # 统计出场的次数
        counts[rword] = counts.get(rword,0) + 1
    '''因为分词之后,可能不是人物的词要比人物的次数多,
        所以进行处理,如果统计的结果里面出现了不是人物的结果,
        就对其进行删除,可以先不进行处理,看看会出现哪些值,
        然后把这些值放在一个集合里面,然后可以进行相应的删除
        多次进行运行,然后添加之后,就可以得到想要的结果'''
    excludes = {"将军","却说","二人","不可","荆州","不能","如此","商议","如何","主公",
                "军士","左右","军马","引兵","次日","大喜","东吴","天下","于是","今日",
                "不敢","魏兵","陛下","不知","一人","人马","汉中","只见","众将","后主",
                "大叫","上马","蜀兵"}
    for ex in excludes:
        del counts[ex]   # 删除不是人物的值
    items = list(counts.items())
    # 安装从大到小进行排序
    items.sort(key=lambda x:x[1],reverse=True)
    # 只要前排序时候出场次数最多的前10个
    for i in range(10):
        word,count = items[i]
        print("{0:<10}{1:>5}".format(word,count))

    运行结果:

    曹操         1451
    孔明         1383
    刘备         1252
    关羽          784
    周瑜          438
    张飞          358
    吕布          300
    赵云          278
    孙权          264
    司马懿         221

    3.同样的道理,我们可以进行西游记等,还有其他的中文文本的统计,

        还有中文的期刊。新闻等,都是可以进行统计的。

    展开全文
  • 本节书摘来自异步社区《妙之门——JavaScript与jQuery技术精粹》一书中的第1章,第1.5节,作者: 【德】Smashing Magazine译者: 吴达茄 芮鹏飞 更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.5 匿名...

    本节书摘来自异步社区《众妙之门——JavaScript与jQuery技术精粹》一书中的第1章,第1.5节,作者: 【德】Smashing Magazine译者: 吴达茄 芮鹏飞 更多章节内容可以访问云栖社区“异步社区”公众号查看。

    1.5 匿名函数和模块模式

    JavaScript最令人烦恼的事情是变量的范围没有定义。任何在函数外定义的变量、函数、数组和对象都是全局的,这意味着相同页中的其他脚本都可以进行调用,因而经常出现参数被覆盖现象。

    解决方法就是将变量封装在一个匿名函数中,在定义完函数后立即调用。例如,下例将生成三个全局变量和两个全局函数:
    screenshot

    该页中其他的脚本语句如果含有名为status的变量的话就会出问题。如果将它们封装在名为myApplication的匿名函数中,就可以解决这个问题了:
    screenshot

    但是这样定义使得参数在函数外不起作用,如果这正是所需要的,没有问题。另外可以省略定义的名字。
    screenshot

    但如果需要部分变量或函数可被外部调用,则需要这样改写程序:为了可以调用createMember()或getMemberDetails()函数,将它们作为myApplication的属性返回。
    screenshot

    这样的用法被称为模块模式或单例模式。Douglas Crockford多次提到过这个概念,Yahoo用户接口函数库YUI中经常使用它。为了使函数和变量可以被外部调用,需要改变定义的语法,这很令人烦恼。而且,如果要从一个方法中调用另一个方法,还必须在调用时加上myApplication前缀。因此,我更倾向于返回这些我想要其成为全局元素的元素的指针,这样还可以缩短外部调用时的使用长度。
    screenshot

    我将这种方法称为“揭示模块模式”。

    展开全文
  • 门市档口开单,仓库出货时才审核单据,这种管理模式有没有问题
  • 不断学习不断进步的过程中,坚持用写作的方式记录学习成果真真是极好的习惯。最近笔者学习设计模式,... 因我公司的用户注册后每一个用户拥有一个独享的私人,于是我们在代码实现的过程中会出来一个进程连接多个数
  • 大聪明本着“独乐乐不如乐乐”的宗旨与大家分享一下设计模式的学习心得。 在现实生活中,我们经常会遇到两个对象因接口不兼容而不能在一起工作的情况,这时需要第三者进行适配。就像小日…子过的还不错的日本人...
  • C++实现设计模式引入

    2021-03-29 20:04:13
    本篇文章主要用介绍用C++实现的设计模式,博文主要呈现逻辑和结构,具体源代码请访问上面的仓库地址。 文章目录设计模式介绍工厂模式 设计模式介绍 设计模式其实是一套提高代码复用性,健壮性,可维护性等一系列...
  • 今天的主题是设计模式的最后一章 - 行为型设计模式,还是围绕着开源项目来展开。由于行为型模式比较多,一共有11个,所以分成2章来写。   目录: 策略模式的简介和应用 模板方法模式的简介和应用 观察者模式的...
  • 测平台的深度分析

    千次阅读 2014-07-24 16:36:21
    谈谈商业模式 » 对测平台的深度分析3 27 五 2014 | 黑板报 兑现昨晚说的话:回答一个问题。 有一位读者问道:「最近乌云、Freebuf等都推出白帽子测服务,道哥觉得前景如何?这些平台能扭转白...
  • 乱砍设计模式之一 -- STRATEGY 模式

    千次阅读 2010-08-04 17:36:00
    乱砍设计模式之一 -- STRATEGY 模式—赵子龙单骑救主
  • 所知,单件模式做为<Gof 23中设计模式>之一,其意图仅允许单件类的一个实例存在(扩展单件模式不在此文范围内),并提供全局的访问方法.UML类图如下. ...
  • 工厂模式(创建对象的最佳方式)

    千次阅读 2021-07-14 10:01:02
    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个...
  • 6月的车市逐渐步入了传统意义上的淡季再加上是季度末经销商任务量会增加4S店面临着主机厂压客户成交难度大等问题 6月18日阳泉庞大一4S店结合车商通O2O团购会方案店内首次尝试将团购会融入互联网新的营销模式打破...
  • 乱砍设计模式之一 -- STRATEGY模式

    千次阅读 2008-01-22 09:46:00
    STRATEGY模式———赵子龙单骑救主junguo STRATEGY在中文中被译成了策略,我感觉这个意思并不妥切,但翻英文词典能得到的翻译也只有这个,我的词典比较简单,不知道是否还有其它意思?如果没有,那么我想可能和中国...
  • 单件模式的控制机制

    2012-06-12 18:17:56
    所知,单件模式做为之一,其意图仅允许单件类的一个实例存在(扩展单件模式不在此文范围内),并提供全局的访问方法.UML类图如下.    单件模式实现的5种方法,但诸多文章中都或多或少的遗漏一些问题:如何...
  • 软件架构模式

    千次阅读 2019-01-31 19:35:35
    Garlan和Shaw在《软件体系结构--一门初露端倪学科的展望》(1996)中对软件架构模式进行了分类,这也是目前较为流行的分类方式: (1)数据流风格:批处理序列;管道/过滤器 (2)调用/返回风格:主程序/子程序;面向对象...
  • 设计模式简单整理

    千次阅读 2018-04-07 11:09:38
    《设计模式简单整理》 #第一篇: 设计原则 #第一篇: 设计原则 ++++1、单一职责原则 ++++2、里氏替换原则 ++++3、依赖倒置原则 ++++4、接口隔离原则 ++++5、迪米特法则 ++++6、开放封闭原则 ++SOLID设计原则: +++...
  • 安防PPP模式对智慧城市建设的影响和作用 佳都新太科技股份有限公司 本文已被发表于《中国安防》杂志 149期 徐建明 安防PPP模式在智慧城市建设中的发展现状 智慧城市建设在四个方面的因素相互影响下,逐步呈现出...
  • 互联网十大商业模式

    千次阅读 2014-09-13 13:46:34
    互联网十大商业模式   第一类 传统门户    [ 观点 ]     门户网站,本质上说就是一个信息管理平台,是一个信息“大杂烩”的入口。随着互联网技术的发展,网络商务活动增多,门户网站越来越多地被用于...
  • jieba jieba是具有强大分词功能的第三方。在中文文本分词中具有较好的应用表现。工作机制为 利用一个中文词库,确定汉字之间的关联概率 汉字间概率大的组成词组,形成分词结果 除了系统给定分词,还支持...
  • Git版本学习笔记

    2019-10-25 10:50:35
    CVS SVN git历史 git与svn的区别 git安装 使用git管理文件 ...分支管理 idea客户端git(明天说) ...同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举...Linux 内核开源项目有着为数广的参与者。绝大多数的 Li...
  • 互联网商业模式

    千次阅读 2018-01-12 16:56:16
    随着互联网技术的发展,网络商务活动增多,门户网站越来越多地被用于商业活动中,对以信息服务为主的门户商业模式的探索也在日益白热化。各种应用系统、数据资源和互联网资源在这里可以快速地完成企业对客户、企业对...
  • 1:实模式:寻址采用和8086相同的16位段和偏移量,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086。2:保护模式:寻址采用32位段和偏移量,最大寻址空间4GB,最大分段4GB (Pentium ...
  • ZeusQLibrary开发指南

    2011-05-14 14:44:00
    暂定名:ZeusQLibrary  ...神之神,奥利匹斯山最高统治者.  寓意为强大的开发. Author: wxy3064one##163.com  Date : 2011.5.14 一、开发ZeusQLibrary的由来:  从2001
  • 十类互联网模式

    千次阅读 2008-08-10 22:58:30
    商业活动中,对以信息服务为主的门户商业模式的探索也在日益白热化。各种应用系统、数据资源和互联网资源在这里可以快速地完成企业对客户、企业对内部员工 和企业对企业的传输与反馈,促进交易便捷、快速完成,有人...
  • 软件体系结构与设计模式笔记

    千次阅读 2012-12-26 22:35:35
    软件体系结构与设计模式笔记 第1章软件体系结构概述 ü SEI软件体系结构讨论群定义如下:一个程序/系统构件的结构,它们之间的相互关系,以及在设计和交付的整个过程中的原则和指导方针。 ü Mary Shaw和David ...
  • 作为Scala语法糖的设计模式

    千次阅读 2017-07-16 22:26:58
    Scala算是一门博采家之长的语言,兼具OO与FP的特性,若使用恰当,可以更好地将OO与FP的各自优势发挥到极致;然而问题也随之而来,倘若过分地夸大OO特性,Scala就变成了一门精简版的Java,写出的是没有Scala Style...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,227
精华内容 3,290
关键字:

众库模式