4

Python でユーザーの姓名に基づいて、さまざまなシステムからユーザーをマッピングしようとしています。

問題の 1 つは、ファースト ネームが多くの場合「ニックネーム」であることです。たとえば、あるユーザーの名は、あるシステムでは「Dave」であり、別のシステムでは「David」です。

これらのような一般的なニックネームを正式な対応するニックネームに変換する簡単な方法はありますか?

ありがとう!

4

3 に答える 3

5

特に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]
于 2012-11-28T23:07:30.807 に答える
0

データベースを作成するか、ニックネームを正式な名前にマッピングする必要があります。そのようなリストをオンラインで見つけることができれば、マップを実装するプロセスは簡単になります。本当の楽しみは、十分に完全なリストを取得し、バリエーションが処理されていることを確認し、人々の正式な名前がニックネームである場合に問題が発生しないようにすることです. たとえば、Dave と呼ばれるすべての人が David という正式な名前を持っているわけではありません。その人の正式な名前はおそらく Dave でしょう。

于 2012-11-28T22:49:53.960 に答える
0
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']}

「大文字と小文字を区別しない」マッチングを追加することで、ソリューションを改善できます

于 2012-11-28T22:56:07.797 に答える