データカテゴリの名前を含むPython 2.7セットオブジェクトがあります。入力を与えられたユーザーの一部が要素であるかどうかを確認するために、何らかのファジー要素チェックを実行したいと考えています。セット。Pythonファジー要素のチェック
私は何をしたいのかを説明するおもちゃの例です。これまでのところ、私は以下のいる
'yellow_ball' not found, did you mean 'red_ball', or 'green_ball'?
:
import re
SET = {'red_ball', 'green_ball', 'red_cup', 'green_cup'}
user_input = 'yellow ball'
# all members of my set are lowercase and separated by an underscore
user_input_list = user_input.lower().split() # for use in fuzzy search
user_input = "_".join(user_input_list) # convert to yellow_ball for element check
regex = None
matches = []
if user_input not in SET:
# FUZZY ELEMENT CHECK
for item in user_input_list:
regex = re.compile(item)
for element in SET:
if regex.match(element):
matches.append(element)
if len(matches) > 0:
print '\'%s\' not found, did you mean %s' % (user_input, ", ".join(['\'' + x + '\'' for x in matches]))
else:
print '\'%s\' not found.' % user_input
は、私はプログラムは、次のようなものをプリントアウトしたい
SET = {'red_ball', 'green_ball', 'red_cup', 'green_cup'}
user_input = 'yellow ball'
次のセットと、ユーザーの入力を考えますおそらく第三者のライブラリを使用する、これを行うより効率的な方法がありますか?あなたの助けのための
おかげで、 ゲラント
なぜ正規表現を使用していますか? 'item in element'を使うだけで、同じことができます。 – Artyer
あなたのソリューションは機能しますか? – wwii
@Artyerあなたの推薦に感謝、私はそれを変更し、それはまだ期待どおりに動作します。 –