| 
                         然后加入‘bird’对象,布隆过滤器的内容并没有改变,因为‘bird’和‘fish’恰好拥有相同的哈希。 
 
最后我们检查一堆对象('dog', 'fish', 'cat', 'bird', 'duck',  'emu')是不是已经被索引了。结果发现‘duck’返回True,2而‘emu’返回False。因为‘duck’的哈希恰好和‘dog’是一样的。 
 
分词 
下面一步我们要实现分词。  分词的目的是要把我们的文本数据分割成可搜索的最小单元,也就是词。这里我们主要针对英语,因为中文的分词涉及到自然语言处理,比较复杂,而英文基本只要用标点符号就好了。 
下面我们看看分词的代码: 
- def major_segments(s): 
 -  """ 
 -  Perform major segmenting on a string. Split the string by all of the major 
 -  breaks, and return the set of everything found. The breaks in this implementation 
 -  are single characters, but in Splunk proper they can be multiple characters. 
 -  A set is used because ordering doesn't matter, and duplicates are bad. 
 -  """ 
 -  major_breaks = ' ' 
 -  last = -1 
 -  results = set() 
 -  # enumerate() will give us (0, s[0]), (1, s[1]), ... 
 -  for idx, ch in enumerate(s): 
 -  if ch in major_breaks: 
 -  segment = s[last+1:idx] 
 -  results.add(segment) 
 -  last = idx 
 -  # The last character may not be a break so always capture 
 -  # the last segment (which may end up being "", but yolo)  
 -  segment = s[last+1:] 
 -  results.add(segment) 
 -  return results 
 
  
主要分割 
主要分割使用空格来分词,实际的分词逻辑中,还会有其它的分隔符。例如Splunk的缺省分割符包括以下这些,用户也可以定义自己的分割符。 
    - ] < > ( ) { } | ! ; , ' " * s & ? + %21 %26 %2526 %3B %7C %20 %2B  %3D -- %2520 %5D %5B %3A %0A %2C %28 %29
 
 
- def minor_segments(s): 
 -  """ 
 -  Perform minor segmenting on a string. This is like major 
 -  segmenting, except it also captures from the start of the 
 -  input to each break. 
 -  """ 
 -  minor_breaks = '_.' 
 -  last = -1 
 -  results = set() 
 -  for idx, ch in enumerate(s): 
 -  if ch in minor_breaks: 
 -  segment = s[last+1:idx] 
 -  results.add(segment) 
 -  segment = s[:idx] 
 -  results.add(segment) 
 -  last = idx 
 -  segment = s[last+1:] 
 -  results.add(segment) 
 -  results.add(s) 
 -  return results 
 
  
次要分割 
次要分割和主要分割的逻辑类似,只是还会把从开始部分到当前分割的结果加入。例如“1.2.3.4”的次要分割会有1,2,3,4,1.2,1.2.3 
- def segments(event): 
 -  """Simple wrapper around major_segments / minor_segments""" 
 -  results = set() 
 -  for major in major_segments(event): 
 -  for minor in minor_segments(major): 
 -  results.add(minor) 
 -  return results 
 
  
分词的逻辑就是对文本先进行主要分割,对每一个主要分割在进行次要分割。然后把所有分出来的词返回。 
                        (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |