Solve "nearby words" function
Given an input like "gello" suggest an correction like "hello". This is a proof-of-concept problem for writing a simplistic auto-correction algorithm for a mobile device.
This commit is contained in:
		
							parent
							
								
									6989c3a91a
								
							
						
					
					
						commit
						572fb0fe5f
					
				
					 1 changed files with 33 additions and 0 deletions
				
			
		
							
								
								
									
										33
									
								
								scratch/facebook/nearby-words.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								scratch/facebook/nearby-words.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,33 @@
 | 
				
			||||||
 | 
					def nearby_chars(c):
 | 
				
			||||||
 | 
					    keyboard = [
 | 
				
			||||||
 | 
					        "qwertyuiop",
 | 
				
			||||||
 | 
					        "asdfghjkl",
 | 
				
			||||||
 | 
					        "zxcvbnm",
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for row in keyboard:
 | 
				
			||||||
 | 
					        for i in range(len(row)):
 | 
				
			||||||
 | 
					            if row[i] == c:
 | 
				
			||||||
 | 
					                result = set()
 | 
				
			||||||
 | 
					                if i + 1 < len(row):
 | 
				
			||||||
 | 
					                    result.add(row[i + 1])
 | 
				
			||||||
 | 
					                if i - 1 >= 0:
 | 
				
			||||||
 | 
					                    result.add(row[i - 1])
 | 
				
			||||||
 | 
					                return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def is_word(word):
 | 
				
			||||||
 | 
					    words = {
 | 
				
			||||||
 | 
					        "hello",
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return word in words
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def nearby_words(x):
 | 
				
			||||||
 | 
					    result = set()
 | 
				
			||||||
 | 
					    for i in range(len(x)):
 | 
				
			||||||
 | 
					        for c in nearby_chars(x[i]):
 | 
				
			||||||
 | 
					            candidate = x[0:i] + c + x[i+1:]
 | 
				
			||||||
 | 
					            if is_word(candidate):
 | 
				
			||||||
 | 
					                result.add(candidate)
 | 
				
			||||||
 | 
					    return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print(nearby_words('gello'))
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue