对盗图,盗文,盗墓笔记同人文深恶痛绝吗

盗图盗贴_于都二中吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:6,445贴子:
盗图盗贴收藏
学术会议举办竟然如此轻松?原来是找了这家会展公司!
走过路过不要错过
在哪里贴着吗
我也是醉了
甘家口建筑书店,建筑书店,低价任你来选!
靠,碉堡了
登录百度帐号推荐应用  来吧,来吧,我们来818那些盗图盗文冒充自己的著名楼主们吧。先要声明下,帖子里会引用以前扒皮过的童鞋们的图文,也欢迎新童鞋贡献力量,来吧,来吧,来吧,跟我一起喊,“这不是一个人在八卦,这是一群人在寻找真相,尊重原图文作者的劳动成果……”
楼主发言:23次 发图: | 更多
  先上两个著名的扒皮贴:  一,光头师太的:  来818天涯中有炒作嫌疑,至今尚未定论或者已经定论的热帖!!!!!!!!    二,抹茶烧豆奶的:  不要听信一家之言——818那些剧情跌宕起伏,适合围观的反转帖  师太和豆奶8的很详细很详细,还超级精彩,感兴趣的可以看看……
  这年头,写手太多了,我本人是尊重写手的,毕竟也是凭本事赚钱的,也很辛苦的,但我超级鄙视那些盗用别人精心拍摄的照片和辛苦码出的文字然后冒充是自己的写手。  ty写手多,众多周知了,现在的楼主又很牛x,几段文字就能我们虐的死去活来的,整天忧楼主之忧,因为担心这些楼主的前女友前男友婆婆小三等等的而吃不下睡不好,较劲脑子的帮他们想主意解决问题,结果最后发现是写手贴,那些楼主潇洒的弃楼而去了,留下我们这些傻x郁闷不已……  于是乎呢,我现在养成了良好的习惯,看到有自称是真事真人照片的帖子,会挑选几段精美的句子baidu下,看到有楼主自称是自己的照片会baidu图片识别下,然后我发现,这年头骗子不要太多哦。当然,还有很多技术高明的骗子,度爷也识别不出来,只有些小嫩青才逃不过度爷的火眼金睛……  baidu,大家都知道怎么玩,打开baidu,把文字复制进去,baidu一下就O了。  但图片识别,很多人不知道怎么玩,甚至不知道在什么地方找,莫急莫急,我给你们上图和连接:      /  方法:把图片保存在桌面上,然后打开连接,选择“从本地上传”,然后“识图一下”就O了!
  火前留名  
  第一扒:  楼主:爱飞飞的发梢  帖子名称:杭州美女西行爱记-嫁给离异军人  帖子链接:  帖子首页:  
  第一扒:  楼主:爱飞飞的发梢  帖子名称:杭州美女西行爱记-嫁给离异军人  首扒人:vivikdm、改密码全家得癌症  不知道为什么,vivikdm从12年就扒了这个“爱飞飞的发梢”帖子的图文有问题,但没有引起重视,依旧有很多粉丝义无反顾的跟着“爱飞飞的发梢”昂首挺胸的踏入了股市的大潮,据说很多人赔的只剩下兜裆裤了……
  前排占座
  第一扒:  本人有点懒,帖子又深,本人没怎么看过这个故事,所以本人直接引用vivikdm、改密码全家得癌症的扒皮了,好吧,我有种不祥的预感,这个帖子会变成天涯扒皮贴总汇T-T……  vivikdm的扒皮贴连接:  vivikdm的扒皮贴:  图片版:  文字版:    自从那年ID被天涯泄露之后一直潜水,今年初才注册新号回帖顶,表看我ID新,好歹也算混天涯3年左右吧。   混迹于八卦和情感居多,后来发现八卦被90后的妹纸攻陷,我等奔三的小阿姨转战情感,和大叔大婶混在一起。   言归正传,在天涯阅贴N多,也总结出一点:火贴热帖基本是假的多,写手或者YY成分居多,平时图个乐子看看拉倒,但有的YY贴作者是在挑战tyer智商极限,和侮辱人格啊。    近日在追一个帖子时,看到有人提到爱飞飞的帖子,还隆重推荐,让我不得不再次想起这款堪称小月月之兰州军嫂版的神贴。   记得两年前的《静水深流-老公离婚三年记》,后来更名叫《杭州美女西行爱记-嫁给离异军》!  作者ID:爱飞飞的发梢  此贴火热一时,楼主也红遍天涯,后来为什么不更了呢,据说是被兰州证监局调查并罚款了。  内容梗概是一个出身扬州,居住杭州(占尽美女地势)的高智商高学历高收入美女,为了爱情嫁给一个兰州二婚离异男军官的故事。   如果仅此真是可歌可泣站入史册供人瞻仰了,没想到军官是个隐藏家世的富二代官二代军二代,于是乎给这位不是灰姑娘却无心插入王子心窝的富家女一个童话般的结局!   婆家见面礼,价值200万的3克拉南非粉钻,据称世界这种粉的仅有140颗   婚礼的聘礼,19块中国银行的大金砖,还有140万的路虎,等等等……具体如何炫富,有兴趣的可以移步彼贴,瞻仰之。   下面,开拔这位炒股从39万炒到上千万,最后害N多粉丝被套,自己无证荐股被兰州证监会调查并罚款,被单位辞退的神人楼主吧。下面开始扒,先从神人楼主自己发出的照片扒起。
  第一扒《杭州美女西行爱记-嫁给离异军人》:  (一)扒照片:  1,    2,        
  谷歌图片比百度好用多了
  看来会火!!马~~~
  第一扒《杭州美女西行爱记-嫁给离异军人》:  (二)扒照片和文字:  哎呀,我是先盗图还是先扒抄袭呢?飞飞盗图盗文辛苦,我们扒的也好辛苦,就一页,只一页,就被我们先后扒出飞飞楼主自称是她老公拍摄的照片都是盗用的,飞飞楼主写的帖子里有大段大段的抄袭……  诺,就是这页:  好了,上JB,先扒照片:          哇,飞飞楼主形容的很美好吧,有木有人夸飞飞楼主文笔呢?有木有人夸飞飞楼主老公拍的照片好好漂亮呢???  只是,可惜啊……      怎么样?飞飞楼主看图说话的本事了得不?嘿嘿,有木有甘拜下风??  好了,我们再扒文字好了:      总结:我前面说了,我没怎么看过这个帖子,也不感兴趣,所以懒得深扒,但就一页就拔出盗图抄袭,估计页数里也纯净不到哪里去!!!!
  @sona666 9楼
20:41:35  谷歌图片比百度好用多了  -----------------------------  真的吗?我Out了!!!!但是,不特别好用的百度也还是将很多著名的楼主打出原形了!!!
  谷歌可以搜国外网站图片
  火辣辣的贴  
  马克  
  第二扒:  楼主:陌上最相思   帖子名称:爱你三年,我却始终不是你心上的那个人  帖子链接:  帖子首页:  话说,这个陌上楼主让我很费解,说她愚蠢吧,她也知道谨慎发图,弄了个张只有尖下巴的照片秒发秒删不给人保存机会,说她聪明吧,她构思的情节又那么雷人,比如“单亲,美白富,高智商(大学不用怎么学习就能考满分),运动细胞发达(前女友追到她实习的地方闹,她能从三楼的潇洒的飞跃而下,还完好无损),富二代男友,男友种马,极品前女友,前女友各种闹(她去哪里,前女友都能在第一时间追过去,前女友很牛逼的噢,不去做侦探真TMD的可惜了,前女友去闹她,去闹她父母单位,辱骂她妈妈等)  帖子被熟人发现……”反正天涯所有热点关键词她都占尽了,而且最奇葩的,是帖子被熟人发现这块,那个熟人呼呼开始说讨厌陌上楼主,因为她喜欢的男生喜欢陌上楼主,而且陌上楼主冷艳高贵,不爱搭理人,还美白富、学习好,人人都喜欢陌上楼主……为了报复陌上楼主,呼呼还报了陌上楼主的真实姓名,结果,没几天,原本视如死对头的两个人突然好成一个人了,比闺蜜还亲啊,陌上楼主去哪里,做什么,和富二代男友什么情况,呼呼都知道,而且,陌上楼主“失踪了”,呼呼居然还能在第一时间打电话联系到陌上楼主在外地的爸爸,天啊,这个“闺蜜”够亲吧,毫无隐私啊……嘿嘿,可惜啊,最后被人扒出陌上楼主和呼呼是一个人,不对,应该是陌上楼主被扒出四个以上的精分马甲……  但素,陌上楼主心理很强大,被人扒的底裤都不剩了,依旧死咬着是她的真实故事,直到现在都在跟死忠粉说她和富二代的奇葩故事,最近说分开了,引得一片唏嘘……  对了,陌上楼主被扒那段很精彩,她原先是设计一个无辜的看客,想利用这个看客炒作一下帖子人气,然后她就利用她陌上这个ID和她精分的三个马甲开始演戏,结果被很多正义的看客看不下去了,所以她就被扒了……  大概是从这一页开始扒的,  其实,前面也有人质疑故事真假,因为太离奇了,但陌上楼主的马甲和死忠粉骂的人家有实话也不敢说了……  凡事讲个证据,陌上楼主发图秒删,所以,我们就来扒一扒她删不了的文字吧,我先预告下,陌上楼主帖子里,稍有点文采的文字都是能百度出原文的,唉……
  我可以卖个瓜子,饮料吗?。。。。。。。。。。。  
  第二扒《爱你三年,我却始终不是你心上的那个人》:   (一):  原文链接:  1,原帖图:    照顾手机党的原帖文字:  我们人多就直接从香格里拉县城中甸包车去雨崩,来回720,师傅一直陪全程,人少也可以在县城招人拼坐大巴,都是旅行的人,会很热闹的。  从中甸到德钦飞来寺需要7个小时左右的车程,中途翻阅白马雪山,到了飞来寺可以休息一晚,找个有平台的客栈,但是期间在……  百度这段话,然后:    其中一个原文链接:/tttttravel?gid=2040285&checked=true  唉,原来在原地坐着,就可以到处旅游了,膜拜陌上楼主!!!只是,陌上楼主,我该说,你是穿越回到过去了,找替身替你去旅游了???
  第二扒《爱你三年,我却始终不是你心上的那个人》:   (一):  原文链接:  2,原帖图:    照顾手机党的原帖文字:桌上放着一盏台灯,是你买给我的,你说晚上在寝室看书的时候灯光会有点暗,开盏台灯比较好,我欣喜若狂,那是你送的礼物,它有时默默的立在书桌上,桌子时而整洁,时而凌乱,也可以放在床上,台灯下面,有可能是几本书,也有可能是一堆零食,看着看着想着想着开始哭了起来,室友问我怎么了,我说电影太感人就哭了  百度出JB:  
  @_茕兎儿 18楼
21:45:12  我可以卖个瓜子,饮料吗?。。。。。。。。。。。  -----------------------------  有可乐和绿茶瓜子么??
  楼主我想吃西瓜。。。  
  这,帖子太瘦了...
  @shumeimeia 22楼
22:06:42  楼主我想吃西瓜。。。  -----------------------------  楼主也想吃!!!!
  第二扒《爱你三年,我却始终不是你心上的那个人》:   (一):  原文链接:  3,原帖图:    原帖文字版:  写到这里,我跟Y在一起的时候有很多好欢乐很二的对话,突然间也想写下来了,看着日记上记载的我们一起经历过的,说过的话,也会有很多甜蜜的事情浮现  LZ:看看你对我有多了解,身高、体重、最喜欢的和最讨厌的,你说说看!  Y:身高嘛,穿平底鞋没到我下巴,穿高跟鞋到我耳朵,体重嘛,还挺标准的,就是前面。嘿嘿。。。 最喜欢的犯二,最讨厌我看别的女生  LZ:那我和你妈妈同时掉河里你会先救谁  Y:我妈,你会游泳  LZ:我好看还是你上次在街上看到的那个大长腿姑娘好看  Y:当然是宝贝你最好看啦  lZ:我好久没有剪头发了,你说我短发好看还是长发好看  Y:长发  LZ:那去染一下怎么样,染头发好看还是黑发好看  Y:黑发  LZ:再问一个,你现在最想跟我说的三个字是什么,一次机会哦,三个字哦  Y:别。。。问。。。了。。。  LZ:。。。。。。。  百度出JB:      原文文字版: 女:你真的背熟了我的一切吗?我的身高、体重、最喜欢和最讨厌的?你说说看!   男:身高……穿平底鞋到我下巴,穿高跟鞋到我耳朵。体重……(边思索边计算)我用自行车驮你,勉强可以上30度斜坡;抱你可以走两到三步。你最喜欢用指甲尖掐我。讨厌我看足球和别的女人。   女:你说我和你从前的女朋友有什么区别?你说呀!   男:她?是一盘没下完的棋。你呀,是一盘下不完的棋……   女:你最难忘的和我有关的事是哪一件?   男:肯定是结婚!爱情终于进行到底了嘛!   女:对你来说,我还不如你的狗重要吗?   男:假如你不再讲话,还能吃剩饭,当然还是你重要。   女:你说我戴红宝石好看,还是戴钻石好看?   男:戴……毛线手套好看。   女:你能一辈子就爱我一个吗?   男:当然能(如果能在后面加上“一小时”更好)!   女:现在,你是不是还想着别的女人?   男:你妈呗!她老人家爱喝鲫鱼汤,今晚你给她再买几条送去。   女:你最想和我说的三个字是……给你一次机会啊!   男:别——问——了——!  陌上楼主改动了些,但是,是你的就是你的,不是你的,哪怕你给它整过容,它也不是你的!!!
  马克  
  第二扒《爱你三年,我却始终不是你心上的那个人》:   (一):  原文链接:  4,原帖图:    陌上原贴文字版:  写到这里,我跟Y在一起的时候有很多好欢乐很二的对话,突然间也想写下来了,看着日记上记载的我们一起经历过的,说过的话,也会有很多甜蜜的事情浮现  Y:取这么多钱干嘛啊,别掉了  LZ:明天和室友出去逛街,要买衣服啊  Y:买衣服也不要这么多钱啊,你是把银行卡里的钱都取光了啊,肯定是拿着钱跟别的男人出去鬼混。  LZ:你也太小看我了吧,如果是跟男人出去,我还需要带钱么。  Y:。。。。。。  百度出JB:    JB文字版:上街   女:老公,同学约我逛街,快给点钱我。   男:操!肯定是拿着钱跟别的男人出去鬼混。   女,身体摆S型,嗲声:你也太小看我了吧,如果是跟男人出去,我还需要带钱么  陌上楼主也是辛苦的,要收集各种资料,还要修改,还要发帖……
  卤煮。提名沈沁雪啦。~\(≧▽≦)/~啦啦啦
  第二扒《爱你三年,我却始终不是你心上的那个人》:   (一):  原文链接:  5,原帖图:    原帖文字版:  地铁没有车厢外的风景看,在地铁里看的最多的就是人,各种各样的人,城里人或者乡下人,穷人或者富人,公司总裁或者小职员,下岗工人或者大学教授,大明星或者家庭主妇都在这里  地铁里一对对的情侣互相依偎,早起上班或者去上课,脸上洋溢着幸福的笑容,,也许他们没有钱坐着自己的小车上班,就一人买了几块钱的地铁票上班,要么依偎在座椅上,要么站着,男生用有力的臂膀保护着怀中的女孩,来来的穿梭在这座繁忙的城市,地铁是浪漫的,但也有很多情侣在这里说着再见分手,地铁是伤感的……  百度出JB:    JB文字版:  地铁没有车厢外的风景看,在地铁里,看得最多的,就是人。各种各样的人,各行各业的人,这正是观察陌生人的好机会,这里,有一切背景的人们,城里人或者乡下人,穷人或者富人,公司总裁或者普通专员,下岗工人或者学术教授,大明星或者家庭主妇等等都会出现在地铁里。所以,地铁是平等的空间,同时也是包容的。  冬天的时候,会经常看到一对情侣,他们可能没有钱去温暖的咖啡馆消费,就一人买了两块钱的地铁票,在吹着暖气的地铁里,来来的穿梭,要么依偎在座椅上,要么随便找一个站下去走一走,地铁是浪漫的……  陌上楼主帖子,第一页就扒出至少四处抄袭的,第二页开头就是抄袭的,还要我继续扒下去吗?还有人相信这个故事是百分百的真人真事吗?!!!  天涯很多楼主都很厉害,能看图说话,还能看文编故事,都是人才啊,祖国后继有人啊……
  @不爱洗澡的小正太 28楼
22:45:01  卤煮。提名沈沁雪啦。~\(≧▽≦)/~啦啦啦  -----------------------------    沈沁雪都被扒烂了,啦啦啦啦,这样好了,我总结性扒她!!!!
  哈哈 多了去了
  第三扒:  楼主:zhaoqian1992   帖子名称:女老板疯狂热烈的要掰弯我我的初夜我的LESS爱情我开始不能自拔了。。    :  帖子首页:    怎么说呐,这个帖子并不算著名,更新了三页,zhaoqian楼主就弃楼跑了,估计编不下去了,但是这个帖子有个特殊点,那就是zhaoqian楼主是被女老板掰弯的,额,也就是LESS恋了,zhaoqian楼主描述XXOO场面很宏大,很激烈,可是,尼玛,都是抄袭喻可欣的《情海星空》,估计很多人都知道喻可欣这本书是写她和刘德华的故事的,里面有很多带颜色的描写……可是,“他”被zhaoqian楼主改成了“她”,然后就变成了个LESS的XXOO了……
  make  
  我穿越了?肿么好像以前看过  
  第三扒《女老板疯狂热烈的要掰弯我我的初夜我的LESS爱情我开始不能自拔了。。》:  (一)  原文链接:  1,  原贴图:      原帖文字版(部分):  她忽地翻身上床,一下子就把整个身子压在我身上。  我的心都快要跳出体外了,感受到他温热的呼吸越来越浓烈,我们四片唇瓣热烈地探索彼此,热情的拥吻令两人更想要拥有对方。她再没了平日的稳重,疯了似的快速地从我身体上面直吻到我的下面,弄得我浑身痒酥酥无法再忍受,我使劲踢腾着双腿,扭动着躯体,当她的舌唇接触到我身下最敏感的部位时,我实在受不了了,双手狠命的地抓住她伏着的头和头发,不知怎么地突然间我们就从床上拥吻着一起滚落在地上,我们在地上滚爬跌幅,虽然我是那么地羞涩而紧张,我的身体却是如此喜欢被她热烈拥抱和进攻的感觉,因为,他是我所爱的人,我们俩的灵魂和身体都已如此紧密地靠近。  倏然间,我们都站直了,他用一种很奇特的眼神凝视着我。  那是我从来没有体验过的眼神,如同两道再度喷射的火焰,她似乎在提醒我要我去做什么。我看着她露在暗红色内衣外面的脖子和胸口,我觉得那仿佛是一股燃烧的欲念,一股害怕自己无法控制的欲念。  她双手搂抱着我的腰肢,我赤条条地站立在她面前,这时我用颤抖不停地手笨拙地为她褪去了内衣、三角和胸罩,我要她公平的对待我,立即,琳也和我一样赤裸裸的在我面前了,我往下望的时候,她似乎试图夹紧她的双腿,我只看到她平直的细腰上面的小腹一起一伏,她喘着粗气的样子可爱极了。这样相视仅片刻,她再次突然出手,鲁莽地一把把我仰面朝天推倒在床上,而她不给我留一秒的喘息时间,紧随着她就像饿狼扑食似的忽地一下狠命的压在我的身上。  他再次紧紧拥吻着我,他有力的手臂把我越搂越紧,几乎已经让我无法呼吸,她的双手在我身上四处游走,她带给我的是一种激情的痛楚,我并不害怕,只是感受到他充分想要拥有我的那股爱与渴望。  百度出JB:    JB文字版(部分):    我的心跳得好快,感受到他温热的呼吸越来越浓烈,我们四片唇瓣热烈地探索彼此,热情的拥吻令两人更想要拥有对方;我们从沙发拥吻到地上,虽然我是那么地羞涩而紧张,我的身体却是如此喜欢被他拥抱的感觉,因为,他是我所爱的人,我们俩的灵魂和身体都已如此紧密地靠近。  倏然间,他用一种很奇特的眼神凝视着我。  那是我从来没有体验过的眼神,如同两道压抑的火焰,似乎在看着我露在衣服外面的脖子和胸口,我觉得那仿佛是一股燃烧的欲念,一股害怕自己无法控制的欲念。  他再次紧紧拥吻着我,他有力的手臂把我越搂越紧,几乎已经让我无法呼吸,他的双手带给我的是一种激情的痛楚,我并不害怕,只是感受到他充分想要拥有我的那股爱与渴望。  嘿嘿,“他”忘记改成“她”了,zhaoqian楼主下次抄袭的时候要注意了,否则很容易露馅的……  后来,还有抄袭的,来自《情海星空》,我懒得扒了,有兴趣的童鞋可以自己去看……
  @多有喜感的帖子 31楼
23:12:39  哈哈 多了去了  -----------------------------  确实太多了,扒个十天十夜也扒不完……
  今天扒到这里,明天扒个感情版的很著名的楼主,此楼主一直走高端路线,美白富,官二代……情节有:都市情缘,才子佳人,久别重逢,情有独钟,后知后觉,虐恋情深……额,太多了,数不过来了,还是看这个图吧,直接看缺哪个情节吧……    其实,我还想在此楼主被公认的“美白富、高智商情商”等标签的基础,再加个“幻想天开”的标签……此楼主目前还在更新,目测有一大波死忠粉将要向我发放子弹,不行,我得赶紧种点卷心菜和大西瓜去……
  最喜欢技术帖,因为自己木有技术。
  前排留名  
  先留个名
  马一个。。可原帖我都没看过。。
  火前留名  
  再推荐个扒皮的帖子:也来818天涯著名的精分楼主,时间才是检验精分的唯一标准  
  好多名人不认识  
  记号  
  记号记好!肥了回来看  
  厉害  
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)对盗图、盗文、盗墓深恶痛绝吗?PostgreSQL结合余弦、线性相关算法 在文本、图片、数组相似 等领域的应用 - 2 smlar插件详解
PostgreSQL , 文本分析 , cosine , smlar , 相似性 , simlar , tf , idf , tf-idf , tag
以2个例子作为开始,
在数据库中有两条这样的记录
&I want a dog&
&I want a chih...
PostgreSQL , 文本分析 , cosine , smlar , 相似性 , simlar , tf , idf , tf-idf , tag
以2个例子作为开始,
在数据库中有两条这样的记录
"I want a dog"
"I want a chihuahua"
// 吉娃娃狗
然后使用这样的查询条件进行查询
"dog|chihuahua"
很显然,两条记录都会被匹配到,但是哪条记录应该排在前面呢?
在搜索引擎中搜索"狗|吉娃娃狗"
哪个会排在前面呢?试试就知道了,翻到第二页,以防被广告冲昏头脑
很显然吉娃娃被排在了前面,为什么呢?
其实都是tf-idf算法起到的作用,因为在全局文本中,狗比吉娃娃出现的次数多,所以根据idf的算法 ( log(总文本数/包含此词的文本数) ) 狗的idf比吉娃娃的低。
那么当tf相同时,很显然tf*idf取决于idf的大小。
关于tf与idf的概念,请参考
那么作为支持全文检索的PostgreSQL数据库,默认支持TF-IDF吗?
PostgreSQL 默认不使用idf计算rank
我们在ts_rank, ts_rank_cd的代码中可以了解到,PostgreSQL这两个函数并不关心idf。
其实在网上也有人问过这样的问题
Within the ts_rank function, there is no native method to rank results using their global (corpus) frequency. The rank algorithm does however rank based on frequency within the document:
http://www.postgresql.org/docs/9.3/static/textsearch-controls.html
So if I search for "dog|chihuahua" the following two documents would have the same rank despite the relatively lower frequency of the word "chihuahua":
"I want a dog"
"I want a chihuahua"
// 奇瓦瓦狗
However, the following line would get ranked higher than the previous two lines above, because it contains the stemmed token "dog" twice in the document:
"dog lovers have an average of 1.5 dogs"
In short: higher term frequency(TF) within the document results in a higher rank, but a lower term frequency in the corpus has no impact.
One caveat: the text search does ignore stop-words, so you will not match on ultra high frequency words like "the","a","of","for" etc (assuming you have correctly set your language)
Postgres does not use TF-IDF as a similarity measure among documents.
ts_rank is higher if a document contains query terms more frequently. It does not take into account the global frequency of the term.
ts_rank_cd is higher if a document contains query terms closer together and more frequently. It does not take into account the global frequency of the term.
There is an extension from the text search creators called smlar, that lets you calculate the similarity between arrays using TF-IDF.
It also lets you turn tsvectors into arrays, and supports fast indexing.
PostgreSQL内置的rank计算方法并不关心IDF,而仅仅计算当前文本的词频。
目前PostgreSQL通过ts_rank与ts_rank_cd计算tsquery与tsvector的相关性,算法详见
如何让PostgreSQL计算rank时关心IDF?
如何让PostgreSQL计算rank时关心IDF?详见此文
smlar插件介绍
smlar插件支持多种相似度计算公式(算法),cosine(default), tfidf, overlap。同时还提供了自定义公式计算相似度的函数。
1. 计算数组的相似度
float4 smlar(anyarray, anyarray)
- computes similary of two arrays. Arrays should be the same type.
2. 计算自定义复合数组(元素,权重)的数组的相似度,可以计算所有元素,同时也允许只计算重叠元素的部分(当权重不同时,相似度不同,例如cosine算法)。
或者我们把它理解为包含tfidf的加权数组,比如 [('中国', 0.1), ('日本', 0.1), ('海盗', 0.9)]
在文本相似度分析中很有用。
float4 smlar(anyarray, anyarray, bool useIntersect)
computes similary of two arrays of composite types. Composite type looks like:
CREATE TYPE type_name AS (element_name anytype, weight_name FLOAT4);
useIntersect option points to use only intersected elements in denominator
see an exmaples in sql/composite_int4.sql or sql/composite_text.sql
postgres=# create type tp as (c1 text, c2 float4);
CREATE TYPE
postgres=# select smlar(array[('你好',2.1), ('中国',1.1)]::_tp, array[('你好',2.1), ('中国',1.1),('china',1)]::_tp);
----------
postgres=# select smlar(array[('你好',2.1), ('中国',1.1)]::_tp, array[('你好',2.1), ('中国',1.1),('china',1)]::_tp,true);
postgres=# select smlar(array[('你好',2.1), ('中国',1.1)]::_tp, array[('你好',2.2), ('中国',1.1),('china',1)]::_tp,true);
----------
与顺序无关
postgres=# select smlar(array[('你好',2.1), ('中国',1.1)]::_tp, array[('中国',1.1),('你好',2.2),('china',1)]::_tp,true);
----------
elog(ERROR, "GiST
doesn't support composite (weighted) type");
3. 通过自定义公式,公式中包含3个变量N.i, N.a, N.b,计算两个数组的相似性,你可以自定义算法。
float4 smlar( anyarray a, anyarray b, text formula );
- computes similary of two arrays by given formula, arrays should
be the same type.
Predefined variables in formula:
- number of common elements in both array (intersection)
- number of uniqueelements in first array
- number of uniqueelements in second array
smlar('{1,4,6}'::int[], '{5,4,6}' )
smlar('{1,4,6}'::int[], '{5,4,6}', 'N.i / sqrt(N.a * N.b)' )
That calls are equivalent.
操作符接口
1. 判断两个数组是否相似,(当相似值大于limit值时, limit值通过smlar.threshold参数设置)
anyarray % anyarray
- returns true if similarity of that arrays is greater than limit
float4 show_smlar_limit()
- deprecated
- shows the limit for % operation
float4 set_smlar_limit(float4) - deprecated
- sets the limit for % operation
Use instead of show_smlar_limit/set_smlar_limit GUC variable
smlar.threshold (see below)
转换函数接口
1. 将tsvector类型转换为text array类型
text[] tsvector2textarray(tsvector)
- transforms tsvector type to text array
2. 对数组内的元素排序并去除重复元素
anyarray array_unique(anyarray)
- sort and unique array
3. 判断数组内是否包含某元素,包含时返回1.0, 不包含时返回0。
float4 inarray(anyarray, anyelement)
- returns zero if second argument does not present in a first one
and 1.0 in opposite case
4. 类似三目操作符,判断数组内是否包含某元素,包含时返回第三个参数的值,不包含时返回第四个参数值。
float4 inarray(anyarray, anyelement, float4, float4)
- returns fourth argument if second argument does not present in
a first one and third argument in opposite case
1. 相似度LIMIT值,当相似性低于这个值时,%操作符(计算两个数组是否相似) 将返回false。
smlar.threshold
Array's with similarity lower than threshold are not similar
by % operation
2. 是否持久化idf表
smlar.persistent_cache BOOL
Cache of global stat is stored in transaction-independent memory
3. 默认的相似性计算公式
smlar.type
Type of similarity formula: cosine(default), tfidf, overlap
源码,其中tfidf计算需要用到统计idf的表。
switch(getSmlType())
case ST_TFIDF:
PG_RETURN_FLOAT4( TFIDFSml(sa, sb) );
case ST_COSINE:
power = ((double)(sa-&nelems)) * ((double)(sb-&nelems));
cnt = numOfIntersect(sa, sb);
PG_RETURN_FLOAT4(
((double)cnt) / sqrt( power ) );
case ST_OVERLAP:
float4 res = (float4)numOfIntersect(sa, sb);
PG_RETURN_FLOAT4(res);
elog(ERROR,"Unsupported formula type of similarity");
4. 当相似性计算公式为tfidf时,需要设置这个参数,并且需要一张统计信息表,记录每个词的idf,以及总共有多少文本。
smlar.stattable STRING
Name of table stored set-wide statistic. Table should be
defined as
CREATE TABLE table_name (
data_type UNIQUE,
int4 (or bigint)
NOT NULL CHECK (ndoc&0)
-- 该词一共出现在几个文本中
And row with null value means total number of documents.
See an examples in sql/*g.sql files
Note: used on for smlar.type = 'tfidf'
5. 当相似性计算公式为tfidf时的配置。
TF(词频)计算方法设置:出现次数、1+log(出现次数)、常数1
smlar.tf_method STRING
Calculation method for term frequency. Values:
- simple counting of entries (default)
- 1 + log(n)
"const" - TF is equal to 1
Note: used on for smlar.type = 'tfidf'
GIN index supports only smlar.tf_method = \"const\""
6. 当相似性计算公式为tfidf时的配置。
idf是否+1后再取LOG
smlar.idf_plus_one BOOL
If false (default), calculate idf as log(d/df),
if true - as log(1+d/df)
Note: used on for smlar.type = 'tfidf'
建议的参数配置
Module provides several GUC variables smlar.threshold, it's highly
recommended to add to postgesql.conf:
custom_variable_classes = 'smlar'
# list of custom variable class names
smlar.threshold = 0.6
#or any other value & 0 and & 1
and other smlar.* variables
索引op class
smlar插件的核心,实际上是计算两个数组(任意类型的数组)的相似性,当然为了提高速度,它也支持索引。
不同类型对应的ops如下,在创建索引是需要使用它们
GiST/GIN support for
operations for:
Array Type
GIN operator class
| GiST operator class
---------------+----------------------+----------------------
| _bit_sml_ops
| _bytea_sml_ops
| _bytea_sml_ops
| _char_sml_ops
| _char_sml_ops
| _cidr_sml_ops
| _cidr_sml_ops
| _date_sml_ops
| _date_sml_ops
| _float4_sml_ops
| _float4_sml_ops
| _float8_sml_ops
| _float8_sml_ops
| _inet_sml_ops
| _inet_sml_ops
| _int2_sml_ops
| _int2_sml_ops
| _int4_sml_ops
| _int4_sml_ops
| _int8_sml_ops
| _int8_sml_ops
interval[]
| _interval_sml_ops
| _interval_sml_ops
| _macaddr_sml_ops
| _macaddr_sml_ops
| _money_sml_ops
| _numeric_sml_ops
| _numeric_sml_ops
| _oid_sml_ops
| _oid_sml_ops
| _text_sml_ops
| _text_sml_ops
| _time_sml_ops
| _time_sml_ops
timestamp[]
| _timestamp_sml_ops
| _timestamp_sml_ops
timestamptz[] | _timestamptz_sml_ops | _timestamptz_sml_ops
| _timetz_sml_ops
| _timetz_sml_ops
| _varbit_sml_ops
| _varchar_sml_ops
| _varchar_sml_ops
smlar 实现 tfidf相似性的 例子
默认的cosine算法的例子参考
接下来看看如何使用tfidf
1. 安装smlar插件
/* see /2014/07/postgresql-install-smlar-extension.html */
create extension
2. 创建测试表
/* your basic table to search against: */
create table documents (
document_id int primary key,
body text not null
3. 导入测试数据,注意可以直接到
I created 100,000 "lorem ipsum" documents here /c5418bd0
In retrospect, not a great choice due to the small number of unique words used to generate the dataset
copy documents
from program 'curl "/c5418bd0/download?count=100000&key=5b15a410"'
with (format csv, header true);
copy documents
from '/home/digoal/test.csv'
with (format csv, header true);
4. 创建统计表, 记录每个词在多少篇文本中出现过,以及总的文本数。
对于日常的使用,我们可以从词库中导出词组与idf,并生成文本总数,与词出现的次数,导入这张表
比如从scws, jieba分词等词库,导出并导入该表
/* this table holds document frequencies (# of docs in which a term appears) for the documents.body column: */
create table documents_body_stats (
value text unique,
ndoc int not null
5. 使用本地数据,生成idf,(实际生产时,可以忽略,建议使用从词库导入的IDF)
/* used ts_stat for convenience, not ideal, but good for quick n dirty: */
insert into documents_body_stats
ts_stat( 'select to_tsvector(''simple'', body) from documents' );
6. 插入文本数
/* the smlar tfdif table needs the total document count as well. It's added as a row with null in the value column: */
insert into documents_body_stats values
(null, (select count(*) from documents) );
7. 将文本转换为text数组的函数
/* turn documents into array of words. you could also use tsvector2textarray( to_tsvector(...) ) : */
create or replace function tokenize(text) returns text[] language sql strict immutable as $$
select regexp_split_to_array( lower($1), '[^[:alnum:]]' );
注意tsvector转换为数组时,会丢失重复值
postgres=# select tsvector2textarray(to_tsvector('i am digoal digoal')),
to_tsvector('i am digoal digoal');
tsvector2textarray | to_tsvector
--------------------+--------------
| 'digoal':3,4
8. 创建表达式索引
/* use smlar's text array opclass. gist is a little more flexible than gin in this case (allows 'n' tf_method): */
create index on documents using gist ( tokenize(body) _text_sml_ops ); --24 seconds
9. 参数设置,使用tfidf公式计算数组相似度
/* setup smlar: */
set smlar.type = 'tfidf';
set smlar.stattable = 'documents_body_stats';
set smlar.tf_method = 'n';
set smlar.threshold = 0.4;
当TFIDF similarity &= smlar.threshold时,返回。
/* the query */
smlar( tokenize(body), '{fringilla,malesuada,euismod}'::text[] )
tokenize(body) % '{fringilla,malesuada,euismod}'::text[] -- where TFIDF similarity &= smlar.threshold
smlar( tokenize(body), '{fringilla,malesuada,euismod}'::text[] ) desc
postgres=# explain (analyze,verbose,timing,costs,buffers) select
smlar( tokenize(body), '{fringilla,malesuada,euismod}'::text[] )
tokenize(body) % '{fringilla,malesuada,euismod}'::text[] -- where TFIDF similarity &= smlar.threshold
smlar( tokenize(body), '{fringilla,malesuada,euismod}'::text[] ) desc
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------
(cost=2.18..2.18 rows=1 width=237) (actual time=7.647..7.647 rows=0 loops=1)
Output: document_id, body, (smlar(regexp_split_to_array(lower(body), '[^[:alnum:]]'::text), '{fringilla,malesuada,euismod}'::text[]))
Buffers: shared hit=79
(cost=2.18..2.18 rows=1 width=237) (actual time=7.647..7.647 rows=0 loops=1)
Output: document_id, body, (smlar(regexp_split_to_array(lower(body), '[^[:alnum:]]'::text), '{fringilla,malesuada,euismod}'::text[]))
Sort Key: (smlar(regexp_split_to_array(lower(documents.body), '[^[:alnum:]]'::text), '{fringilla,malesuada,euismod}'::text[])) DESC
Sort Method: quicksort
Memory: 25kB
Buffers: shared hit=79
Index Scan using documents_tokenize_idx on public.documents
(cost=0.14..2.17 rows=1 width=237) (actual time=7.641..7.641 rows=0 loops=1)
Output: document_id, body, smlar(regexp_split_to_array(lower(body), '[^[:alnum:]]'::text), '{fringilla,malesuada,euismod}'::text[])
Index Cond: (regexp_split_to_array(lower(documents.body), '[^[:alnum:]]'::text) % '{fringilla,malesuada,euismod}'::text[])
Rows Removed by Index Recheck: 61
Buffers: shared hit=79
Planning time: 0.148 ms
Execution time: 7.703 ms
我们可以把相似度调高,从而排除更多的记录,提高查询效率
postgres=# set smlar.threshold = 0.8;
postgres=# explain (analyze,verbose,timing,costs,buffers) select
smlar( tokenize(body), '{fringilla,malesuada,euismod}'::text[] )
tokenize(body) % '{fringilla,malesuada,euismod}'::text[] -- where TFIDF similarity &= smlar.threshold
smlar( tokenize(body), '{fringilla,malesuada,euismod}'::text[] ) desc
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------
(cost=2.18..2.18 rows=1 width=237) (actual time=1.051..1.051 rows=0 loops=1)
Output: document_id, body, (smlar(regexp_split_to_array(lower(body), '[^[:alnum:]]'::text), '{fringilla,malesuada,euismod}'::text[]))
Buffers: shared hit=29
(cost=2.18..2.18 rows=1 width=237) (actual time=1.049..1.049 rows=0 loops=1)
Output: document_id, body, (smlar(regexp_split_to_array(lower(body), '[^[:alnum:]]'::text), '{fringilla,malesuada,euismod}'::text[]))
Sort Key: (smlar(regexp_split_to_array(lower(documents.body), '[^[:alnum:]]'::text), '{fringilla,malesuada,euismod}'::text[])) DESC
Sort Method: quicksort
Memory: 25kB
Buffers: shared hit=29
Index Scan using documents_tokenize_idx on public.documents
(cost=0.14..2.17 rows=1 width=237) (actual time=1.042..1.042 rows=0 loops=1)
Output: document_id, body, smlar(regexp_split_to_array(lower(body), '[^[:alnum:]]'::text), '{fringilla,malesuada,euismod}'::text[])
Index Cond: (regexp_split_to_array(lower(documents.body), '[^[:alnum:]]'::text) % '{fringilla,malesuada,euismod}'::text[])
Rows Removed by Index Recheck: 1
Buffers: shared hit=29
Planning time: 0.190 ms
Execution time: 1.113 ms
如果你不需要对结果按相似度排序的话,也可以把order by去掉,提升性能。
MADlib训练文本idf
Basic steps for clustering documents can vary a bit depending on your
precise goals, but one example would be:
1. Often there is an initial first level of processing to handle
tokenization, word stemming, filter stopwords etc.
There is no right or wrong way of handling this step and there is a fair
amount of art to doing it well.
2. Build feature vectors for each document.
There are a variety of methods for handling this, one common example
would be to build tf-idfs ().
For which you need the following metrics:
a) word count for each document
b) how many documents word occur across all documents
c) documents count
Having produced a feature vectors for your documents you can then call
the kmeans function in MADlib to perform the actual clustering ().
Given a tf-idf
feature vector the most common distance function is cosine similarity,
though other distance functions may make sense depending on your use case.
rum也在支持tfidf了。
本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@ 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
用云栖社区APP,舒服~
【云栖快讯】红轴机械键盘、无线鼠标等753个大奖,先到先得,云栖社区首届博主招募大赛9月21日-11月20日限时开启,为你再添一个高端技术交流场所&&
PostgreSQL被业界誉为“最先进的开源数据库”,面向企业复杂SQL处理的OLTP在线事务处理场景,支持No...
基于深度学习技术及阿里巴巴多年的海量数据支撑, 提供多样化的内容识别服务,能有效帮助用户降低违规风险。其产品包括...
结合大数据能力帮助电商企业快速搭建平台、应对业务高并发,剖析秒杀、视频直播等场景
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
Loading...

我要回帖

更多关于 李春平盗墓倒卖文物 的文章

 

随机推荐