jieba

simHash介绍及python实现

北城余情 提交于 2019-12-06 13:53:50
文章目录 1、simHash简介 2、simHash具体流程 3、Python实现simHash 1、simHash简介 simHash 算法是GoogleMoses Charikear于2007年发布的一篇论文 《Detecting Near-duplicates for web crawling》 中提出的, 专门用来解决亿万级别的网页去重任务。 simHash 是局部敏感哈希 (locality sensitve hash) 的一种,其主要思想是 降维 ,将高维的特征向量映射成低维的特征向量,再通过比较两个特征向量的 汉明距离(Hamming Distance) 来确定文章之间的相似性。 什么是 局部敏感 呢?假设A,B具有一定的相似性,在hash之后,仍能保持这种相似性,就称之为局部敏感hash 汉明距离 : Hamming Distance ,又称汉明距离,在信息论中,等长的两个字符串之间的汉明距离就是两个字符串对应位置的不同字符的个数。即将一个字符串变换成另外一个字符串所需要替换的字符个数,可使用异或操作。 例如: 1011与1001之间的汉明距离是1。 2、simHash具体流程 simHash算法总共分为5个流程: 分词、has、加权、合并、降维。 分词 对待处理文档进行中文分词,得到有效的特征及其权重。可以使用 TF-IDF 方法获取一篇文章权重最高的前 topK

simhash

坚强是说给别人听的谎言 提交于 2019-12-06 13:44:42
听闻SimHash很强,对海量文档相似度的计算有很高的效率。查了查文档,大致的流程如下: 大致流程就是:分词, 配合词频计算哈希串(每个分出来的词最终会计算处同样的长度), 降维,计算海明距离。 #coding:utf8 import math import jieba import jieba.analyse class SimHash (object) : def __init__ (self) : pass def getBinStr (self, source) : if source == "" : return 0 else : x = ord(source[ 0 ]) << 7 m = 1000003 mask = 2 ** 128 - 1 for c in source: x = ((x * m) ^ ord(c)) & mask x ^= len(source) if x == - 1 : x = - 2 x = bin(x).replace( '0b' , '' ).zfill( 64 )[- 64 :] print(source, x) return str(x) def getWeight (self, source) : # fake weight with keyword return ord(source) def unwrap_weight

浅谈simhash及其python实现

时光总嘲笑我的痴心妄想 提交于 2019-12-06 13:43:27
作者原创,转载请注明出处。 一直想写个总结来回顾simhash,一直没抽出时间,现在还是好好写写总结一下。作者随笔,废话有点多,不喜勿喷,欢迎指教。 谷歌每天从网上抓取海量的信息,怎么样区分重复的呢,据说就采用了simhash算法,当然肯定也不仅仅就只采用它,不过至少可以说明其性能。 预备知识: 我们知道,在文本去重的时候,有很多方式,在文本与文本之间对比,如果是整篇对比,费时费力,有人就想到用什么东西代表每篇文章,如摘要,当然,对计算机来说,摘要和整篇的区别只是缩小了篇幅,所以又有人想到了采用关键字来对比。这样确实可以大大缩减我们对比的复杂性。那我们怎么得到一篇文章的关键字呢?一般采用词频(TF),但是只用词频,如中文出现类似“的”、“我们”之类的词语很多,应该怎么去掉这些词语呢,手动去掉实在是麻烦,于是可以结合逆向词频(IDF),这就是著名的TD-IDF,一种提取一个文章的关键词的算法。词频我们很好理解,一个词语在整篇文章中出现的次数与词语总个数之比。IDF又怎么算呢,假如一个词语,在我们所有文章中出现的频率都非常高(例如“的”在我们多个文本中出现的次数很多),我们就认为,这个词语不具有代表性,就可以降低其作用,也就是赋予其较小的权值。 那这个权重,我们怎么计算呢,(这里敲公式比较麻烦,直接找来图片),如下图,分子代表文章总数,分母表示该词语在这些文章(|D|)出现的篇数

【NLP】【三】jieba源码分析之关键字提取(TF-IDF/TextRank)

别等时光非礼了梦想. 提交于 2019-12-06 06:41:10
【一】综述 利用jieba进行关键字提取时,有两种接口。一个基于TF-IDF算法,一个基于TextRank算法。TF-IDF算法,完全基于词频统计来计算词的权重,然后排序,在返回TopK个词作为关键字。TextRank相对于TF-IDF,基本思路一致,也是基于统计的思想,只不过其计算词的权重时,还考虑了词的上下文(通过窗口滑动来实现),而且计算词的权重时,也考虑了相关联系词的影响。可以说,TextRank实际上是依据位置与词频来计算词的权重的。下面,结合基于jieba源码,来分别解释两种算法的实现。 【二】TF-IDF 1. 原理解析 假设,共有N篇文档,分别用 d1,d2,d3,,,,,,,dn来表示。 TF = 某个词在di篇文章中出现的次数/di篇文章的总词数 = count(W in di)/ count(di)。因此,TF计算的是单个词在单个文档中出现的词频。 IDF = 总的文档数 / 出现词W的文档数 。 IDF其实反映了词W在文档之间的区别度。如果W在仅在一篇文档中出现,则说明可以使用W将该文档与其他文档区别开来。即IDF可以反映W的独特性 。 TF*IDF,可以得到词的重要性。比如: 北京和西安在同一篇文档中的词频均为20%,那如何估计北京是该文的关键字,还是西安呢?如果同时有10篇文章均提到了北京,恰好只有这篇文章提到了西安,则西安作为这篇文章的关键字更为合理。

【NLP】【四】jieba源码分析之词性标注

回眸只為那壹抹淺笑 提交于 2019-12-06 06:40:45
【一】词性标注 词性标注分为2部分,首先是分词,然后基于分词结果做词性标注。 【二】jieba的词性标注代码流程详解 1. 代码位置 jieba/posseg/_init_.py 2. 流程分析 def cut(sentence, HMM=True): """ Global `cut` function that supports parallel processing. Note that this only works using dt, custom POSTokenizer instances are not supported. """ global dt # 该pool 默认为None if jieba.pool is None: # 调用POSTokenizer的cut接口进行词性标注 for w in dt.cut(sentence, HMM=HMM): yield w else: parts = strdecode(sentence).splitlines(True) if HMM: result = jieba.pool.map(_lcut_internal, parts) else: result = jieba.pool.map(_lcut_internal_no_hmm, parts) for r in result: for w in r: yield

谁说程序员不浪漫?Python导出微信聊天记录生成爱的词云图

混江龙づ霸主 提交于 2019-12-06 03:21:42
明天又双叒叕是一年一度的七夕恋爱节了! 又是一波绝好的机会!恩爱秀起来! 购物车清空!礼物送起来!朋友圈晒起来! 等等! 什么?! 你还没准备好七夕礼物么? 但其实你不知道要送啥? 原来又双叒叕要到了 全民不知道送什么礼物的系列日子了… 需要Python软件工具和学习资料的小伙伴可以点击下方链接自行获取 http://note.youdao.com/noteshare?id=7e3c432b74512d52b75aafc4609451b9 哎呦 你们这些 磨人的小(lao)妖(you)精(tiao)! Python倒是觉得你还可以抢救一下! 说到词云应该不陌生,不知道的童靴往下看 词云,就是把网络文本中出现频率较高的 "关键词"予以视觉上的突出 浏览者只要一眼扫过文本就可以领略其主旨 瞧 这是不是一个有声音、有画面的小爱心~ 今天 我们采集情侣们之间的聊天日常 用此制作一份只属于你们的小浪漫! 第一步,我们需要导出自己和对象的数据~ 微信的备份功能并不能直接给你导出文本格式,它导出来其实是一种叫sqlite的数据库。如果说用网上流传的方法提取文本数据,iOS则需要下载itunes备份整机,安卓则需要本机的root权限,无论是哪种都非常麻烦,在这里给大家介绍一种不需要整机备份和本机root权限,只导出和对象的聊天数据的方法。 那就是使用安卓模拟器导出,这样既能ios/安卓通用

jieba完整文档

廉价感情. 提交于 2019-12-05 22:02:55
jieba “结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module. Scroll down for English documentation. 特点 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 支持繁体分词 支持自定义词典 MIT 授权协议 在线演示 http://jiebademo.ap01.aws.af.cm/ (Powered by Appfog) 网站代码: https://github.com/fxsjy/jiebademo 安装说明 代码对 Python 2/3 均兼容 全自动安装: easy_install jieba 或者 pip install jieba / pip3 install jieba 半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup

中文分词工具

我怕爱的太早我们不能终老 提交于 2019-12-05 10:01:51
中文分词工具非常繁多,主要与大家分享其中几个工具,这是本人第一次接触中文分词工具,望轻喷。 中文分词工具: 1 、IK Analyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。 http://www.oschina.net/p/ikanalyzer 源码地址: http://www.oschina.net/news/58998/ikanalyzer-source-move-to-gitosc 使用方式:下载IK Analyzer( http://pan.baidu.com/s/1hssEdog ),在Java工程中引入jar包即可。 2 、NLPIR 中文分词库(又名 ICTCLAS 2013) 示例(Java): http://my.oschina.net/u/944980/blog/132183 3 、Jcseg 是基于mmseg算法的一个轻量级开源中文分词工具 http://www.oschina.net/p/jcseg 4 、mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法( http://technology.chtsai.org/mmseg/ )实现的 http://www.oschina.net/p/mmseg4j 5 、Anjs 中文分词器 http://www.oschina.net/p/ansj Python

【NLP】【二】jieba源码分析之分词

二次信任 提交于 2019-12-05 10:01:38
【一】词典加载 利用jieba进行分词时,jieba会自动加载词典,这里jieba使用python中的字典数据结构进行字典数据的存储,其中key为word,value为frequency即词频。 1. jieba中的词典如下: jieba/dict.txt X光 3 n X光线 3 n X射线 3 n γ射线 3 n T恤衫 3 n T型台 3 n 该词典每行一个词,每行数据分别为:词 词频 词性 2. 词典的加载 jieba/_init_.py,源码解析如下: # 加载词典 def gen_pfdict(self, f): # 定义字典,key = word, value = freq lfreq = {} # 记录词条总数 ltotal = 0 f_name = resolve_filename(f) for lineno, line in enumerate(f, 1): try: line = line.strip().decode('utf-8') # 取一行的词语词频 word, freq = line.split(' ')[:2] freq = int(freq) # 记录词频与词的关系,这里直接采用dict存储,没有采用Trie树结构 lfreq[word] = freq ltotal += freq # 对多个字组成的词进行查询 for ch in xrange

jieba/word cloud

不问归期 提交于 2019-12-05 08:48:48
1、jieba jieba分词库的使用 2、wordcloud wordcloud词云库的使用 wordcloud词云绘图 3、turtle 彩色蟒蛇绘制 七段数码管绘制 来源: https://www.cnblogs.com/Cheryl-D/p/11917315.html