加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

基于Python说话的大数据搜刮引擎

发布时间:2019-07-13 21:11:36 所属栏目:建站 来源:简单艾
导读:搜刮是大数据规模里常见的需求。Splunk和ELK别离是该规模在非开源和开源规模里的率领者。本文操作很少的Python代码实现了一个根基的数据搜刮成果,试图让各人领略大数据搜刮的根基道理。 布隆过滤器 (Bloom Filter) 第一步我们先要实现一个布隆过滤器。 布

然后插手‘bird’工具,布隆过滤器的内容并没有改变,由于‘bird’和‘fish’刚好拥有沟通的哈希。

基于python说话的大数据搜刮引擎

最后我们搜查一堆工具('dog', 'fish', 'cat', 'bird', 'duck', 'emu')是不是已经被索引了。功效发明‘duck’返回True,2而‘emu’返回False。由于‘duck’的哈希刚好和‘dog’是一样的。

基于python说话的大数据搜刮引擎

分词

下面一步我们要实现分词。 分词的目标是要把我们的文本数据支解成可搜刮的最小单位,也就是词。这里我们首要针对英语,由于中文的分词涉及到天然说话处理赏罚,较量伟大,而英文根基只要用标点标记就好了。

下面我们看看分词的代码:

  1. def major_segments(s): 
  2.  """ 
  3.  Perform major segmenting on a string. Split the string by all of the major 
  4.  breaks, and return the set of everything found. The breaks in this implementation 
  5.  are single characters, but in Splunk proper they can be multiple characters. 
  6.  A set is used because ordering doesn't matter, and duplicates are bad. 
  7.  """ 
  8.  major_breaks = ' ' 
  9.  last = -1 
  10.  results = set() 
  11.  # enumerate() will give us (0, s[0]), (1, s[1]), ... 
  12.  for idx, ch in enumerate(s): 
  13.  if ch in major_breaks: 
  14.  segment = s[last+1:idx] 
  15.  results.add(segment) 
  16.  last = idx 
  17.  # The last character may not be a break so always capture 
  18.  # the last segment (which may end up being "", but yolo)  
  19.  segment = s[last+1:] 
  20.  results.add(segment) 
  21.  return results 

首要支解

首要支解行使空格来分词,现实的分词逻辑中,还会有其余的脱离符。譬喻Splunk的缺省支解符包罗以下这些,用户也可以界说本身的支解符。

  • ] < > ( ) { } | ! ; , ' " * s & ? + %21 %26 %2526 %3B %7C %20 %2B %3D -- %2520 %5D %5B %3A %0A %2C %28 %29
  1. def minor_segments(s): 
  2.  """ 
  3.  Perform minor segmenting on a string. This is like major 
  4.  segmenting, except it also captures from the start of the 
  5.  input to each break. 
  6.  """ 
  7.  minor_breaks = '_.' 
  8.  last = -1 
  9.  results = set() 
  10.  for idx, ch in enumerate(s): 
  11.  if ch in minor_breaks: 
  12.  segment = s[last+1:idx] 
  13.  results.add(segment) 
  14.  segment = s[:idx] 
  15.  results.add(segment) 
  16.  last = idx 
  17.  segment = s[last+1:] 
  18.  results.add(segment) 
  19.  results.add(s) 
  20.  return results 

次要支解

次要支解和首要支解的逻辑相同,只是还会把从开始部门到当前支解的功效插手。譬喻“1.2.3.4”的次要支解会有1,2,3,4,1.2,1.2.3

  1. def segments(event): 
  2.  """Simple wrapper around major_segments / minor_segments""" 
  3.  results = set() 
  4.  for major in major_segments(event): 
  5.  for minor in minor_segments(major): 
  6.  results.add(minor) 
  7.  return results 

分词的逻辑就是对文本先举办首要支解,对每一个首要支解在举办次要支解。然后把全部分出来的词返回。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读