[挑战][大数据处理]100G文本统计关键字、根据关键词频率对所有行重新排序

头像
PerlMonk
渐入佳境
渐入佳境
帖子: 51
注册时间: 2016年09月19日 10:20
拥有现金: 锁定
Has thanked: 4 times
Been thanked: 3 times
联系:

[挑战][大数据处理]100G文本统计关键字、根据关键词频率对所有行重新排序

帖子 #1 PerlMonk » 2017年06月27日 11:45

实际文本100G,内存仅4G以内。磁盘空间按1T算。

文本内容由大量明文字符串组成(ASCII码以内),部分样板:
65425855662efssaezsdfcsf//sff.sdf/'s;f]\sDed33dds3
65425855662efssaezsdfcsf/ /sff.sdf/'s;f] \sDed33sdds1
yjyjgwwwghfg56www g.tgjgcom445.5454.'55.4l5
efssaezsdfcsf//58969752sff.sdf/'s;f]\sDed33sds0
efssaezsdfcsf/ 58969752/sff.sdf/'s;f] \sDed33sdds5
65425855662efssaezsdfcsf/ /sff.sdf/'s;f] \sDed33s00000000
65425855662efs\saezsdf][grytryg*f-x+f5g5ty'5t;54r]\5/e.,6ftfr//www.fsfsf.com

处理要求:
提取出每行的 “数字串” 和 “字母串”,标点符号不计入内,
统计这些 “关键字” 在全文中重复出现的频率/次数。

然后将含有高频率关键字的行排在前面,关键字出现频率低的行排在后面。

可以先按给出的样板进行处理,但是请考虑达到100G后内存的控制以及效率问题。

处理示例:
65425855662efssaezsdfcsf/ /sff.sdf/'s;f] \sDed33sdds1
65425855662efssaezsdfcsf//sff.sdf/'s;f]\sDed33dds3
65425855662efssaezsdfcsf/ /sff.sdf/'s;f] \sDed33s00000000
efssaezsdfcsf/ 58969752/sff.sdf/'s;f] \sDed33sdds5
efssaezsdfcsf//58969752sff.sdf/'s;f]\sDed33sds0
65425855662efs\saezsdf][grytryg*f-x+f5g5ty'5t;54r]\5/e.,6ftfr//www.fsfsf.com
yjyjgwwwghfg56www g.tgjgcom445.5454.'55.4l5

详细过程:
    每行的关键字提取,并统计其在全文中出现的次数统计(如果单行内出现多次,计为一次)
    f(6),efssaezsdfcsf(5),sff(5),s(5),sDed(5),33(5),sdf(5),65425855662(4),3(1),dds(1)
    f(6),s(5),sff(5),efssaezsdfcsf(5),33(5),sdf(5),sDed(5),65425855662(4),sdds(2),1(1)
    5(3),g(2),www(2),yjyjgwwwghfg(1),56(1),445(1),tgjgcom(1),4(1),l(1),5454(1),55(1)
    f(6),33(5),sdf(5),sDed(5),s(5),sff(5),efssaezsdfcsf(5),58969752(2),0(1),sds(1)
    f(6),efssaezsdfcsf(5),sff(5),s(5),sDed(5),33(5),sdf(5),5(3),sdds(2),58969752(2)
    f(6),efssaezsdfcsf(5),s(5),sff(5),sDed(5),sdf(5),33(5),65425855662(4),00000000(1)
    f(6),65425855662(4),5(3),g(2),www(2),x(1),ftfr(1),e(1),com(1),54(1),t(1),ty(1),fsfsf(1),grytryg(1),efs(1),r(1),6(1),saezsdf(1)

    按频率系数对每一行排序(从最高的频率开始对比;如果最高的次数相同,则对比第二列,以此类推)
    f(6),s(5),sff(5),efssaezsdfcsf(5),33(5),sdf(5),sDed(5),65425855662(4),sdds(2),1(1)
    f(6),efssaezsdfcsf(5),sff(5),s(5),sDed(5),33(5),sdf(5),65425855662(4),3(1),dds(1)
    f(6),efssaezsdfcsf(5),s(5),sff(5),sDed(5),sdf(5),33(5),65425855662(4),00000000(1)
    f(6),efssaezsdfcsf(5),sff(5),s(5),sDed(5),33(5),sdf(5),5(3),sdds(2),58969752(2)
    f(6),33(5),sdf(5),sDed(5),s(5),sff(5),efssaezsdfcsf(5),58969752(2),0(1),sds(1)
    f(6),65425855662(4),5(3),g(2),www(2),x(1),ftfr(1),e(1),com(1),54(1),t(1),ty(1),fsfsf(1),grytryg(1),efs(1),r(1),6(1),saezsdf(1)
    5(3),g(2),www(2),yjyjgwwwghfg(1),56(1),445(1),tgjgcom(1),4(1),l(1),5454(1),55(1)

为了看得清楚一点,仅列出频率系数,前后对比:
    Before:
    [0]6,5,5,5,5,5,5,4,1,1
    [1]6,5,5,5,5,5,5,4,2,1
    [2]3,2,2,1,1,1,1,1,1,1,1
    [3]6,5,5,5,5,5,5,2,1,1
    [4]6,5,5,5,5,5,5,3,2,2
    [5]6,5,5,5,5,5,5,4,1
    [6]6,4,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1

    After
    [1]6,5,5,5,5,5,5,4,2,1
    [0]6,5,5,5,5,5,5,4,1,1
    [5]6,5,5,5,5,5,5,4,1
    [4]6,5,5,5,5,5,5,3,2,2
    [3]6,5,5,5,5,5,5,2,1,1
    [6]6,4,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1
    [2]3,2,2,1,1,1,1,1,1,1,1

回到 “算法和编码”

在线用户

用户浏览此论坛: 没有注册用户 和 0 访客