Python でユーザーの姓名に基づいて、さまざまなシステムからユーザーをマッピングしようとしています。
問題の 1 つは、ファースト ネームが多くの場合「ニックネーム」であることです。たとえば、あるユーザーの名は、あるシステムでは「Dave」であり、別のシステムでは「David」です。
これらのような一般的なニックネームを正式な対応するニックネームに変換する簡単な方法はありますか?
ありがとう!
Python でユーザーの姓名に基づいて、さまざまなシステムからユーザーをマッピングしようとしています。
問題の 1 つは、ファースト ネームが多くの場合「ニックネーム」であることです。たとえば、あるユーザーの名は、あるシステムでは「Dave」であり、別のシステムでは「David」です。
これらのような一般的なニックネームを正式な対応するニックネームに変換する簡単な方法はありますか?
ありがとう!
特にPython内ではありませんが、これを使用してみてください:
http://deron.meranda.us/data/nicknames.txt
そのデータを python ( csv.reader(<FileObject>, delimiter='\t')
) にロードすると、加重確率型関数を実行して、そのリスト内のニックネームのフル ネームを返すことができます。
次のようなことができます。
import collections
def weighted_choice_sub(weights):
# Source for this function:
# http://eli.thegreenplace.net/2010/01/22/weighted-random-generation-in-python/
rnd = random.random() * sum(weights)
for i, w in enumerate(weights):
rnd -= w
if rnd < 0:
return i
def load_names():
with open(<filename>, 'r') as infile:
outdict = collections.defaultdict(list)
for line in infile.readlines():
tmp = line.strip().split('\t')
outdict[tmp[0]].append((tmp[1], float(tmp[2])))
return outdict
def full_name(nickname):
names = load_names()
return names[nickname][weighted_choice_sub([x[1] for x in names[nickname]])][0]
データベースを作成するか、ニックネームを正式な名前にマッピングする必要があります。そのようなリストをオンラインで見つけることができれば、マップを実装するプロセスは簡単になります。本当の楽しみは、十分に完全なリストを取得し、バリエーションが処理されていることを確認し、人々の正式な名前がニックネームである場合に問題が発生しないようにすることです. たとえば、Dave と呼ばれるすべての人が David という正式な名前を持っているわけではありません。その人の正式な名前はおそらく Dave でしょう。
In [1]: first_name_dict = {'David':['Dave']}
In [2]: def get_real_first_name(name):
...: for first_name in first_name_dict:
...: if first_name == name:
...: return name
...: elif name in first_name_dict[first_name]:
...: return first_name
...: else:
...: return name
...:
In [3]: get_real_first_name('David')
Out[3]: 'David'
In [4]: get_real_first_name('Dave')
Out[4]: 'David'
私はIpythonを使用しています。基本的に、それを行うには辞書が必要です。first_name_dict は、名前辞書です。たとえば、David を「Dave」または「Davy」と呼び、Lucas を「Luke」と呼ぶことができる場合、辞書は次のように記述できます。
first_name_dict = {'David' : ['Dave', 'Davy'], 'Lucas' : ['Luke']}
「大文字と小文字を区別しない」マッチングを追加することで、ソリューションを改善できます