Python查找相似单词的方法

时间:2022-06-10 17:10:01

本文实例讲述了Python查找相似单词的方法。分享给大家供大家参考。具体分析如下:

问题:

给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少个兄弟单词。

Python代码如下:

  1. from itertools import tee,izip 
  2. from collections import defaultdict 
  3. def pairwise(iterable): 
  4.   a, b = tee(iterable) 
  5.   for elem in b: 
  6.     break 
  7.   return izip(a, b) 
  8. buf_array=[] 
  9. buf_no={} 
  10. key_from_id=0 
  11. def add_to_buf(word): 
  12.   global key_from_id,buf_array 
  13.   if len(word)==1: 
  14.     pass 
  15.     #TODO 
  16.   for pos,pair in enumerate(pairwise(word)): 
  17.     if len(buf_array)<pos+1: 
  18.       buf_array.append(defaultdict(set)) 
  19.     pos_dict=buf_array[pos] 
  20.     key=list(pair) 
  21.     key.sort() 
  22.     key="".join(key) 
  23.     if key not in buf_no: 
  24.       buf_no[key]=key_from_id 
  25.       key_from_id+=1 
  26.     key=buf_no[key] 
  27.     pos_dict[key].add(word) 
  28. def find_in_buf(word): 
  29.   global key_from_id,buf_array 
  30.   if len(word)==1: 
  31.     pass 
  32.     #TODO 
  33.   exist = [] 
  34.   for pos,pair in enumerate(pairwise(word)): 
  35.     if len(buf_array)<pos+1: 
  36.       return  
  37.     pos_dict=buf_array[pos] 
  38.     key=list(pair) 
  39.     key.sort() 
  40.     key="".join(key) 
  41.     if key not in buf_no: 
  42.       continue 
  43.     key=buf_no[key] 
  44.     if key not in pos_dict: 
  45.       continue 
  46.     exist.append(pos_dict[key]) 
  47.   count_dict=defaultdict(int
  48.   for i_set in exist: 
  49.     for i in i_set: 
  50.       count_dict[i]+=1 
  51.   result=[] 
  52.   min_match = len(word)-3 
  53.   for k,v in count_dict.iteritems(): 
  54.     if v>=min_match: 
  55.       result.append(k) 
  56.   return result 
  57. add_to_buf("1234"
  58. add_to_buf("ABCD"
  59. add_to_buf("CABD"
  60. print find_in_buf("ACBD"

希望本文所述对大家的Python程序设计有所帮助。