使用 PHP,我从 facebook 和 twitter 获取朋友列表,并将每个列表存储在关联数组中。我有他们的名字和地点。我想根据他们的姓名和位置对来自 fb 和 twitter 的朋友进行比较,并提供相似度分数。
就像我想设置一个大约 0.7 的阈值,如果分数高于一个人的分数,那么这意味着它们代表同一个实体。我使用了php函数similar_text,但它太基础了,几乎每个朋友都有50-60%的匹配度,因为它只是基于名字中的单词。
有什么建议么?
使用 PHP,我从 facebook 和 twitter 获取朋友列表,并将每个列表存储在关联数组中。我有他们的名字和地点。我想根据他们的姓名和位置对来自 fb 和 twitter 的朋友进行比较,并提供相似度分数。
就像我想设置一个大约 0.7 的阈值,如果分数高于一个人的分数,那么这意味着它们代表同一个实体。我使用了php函数similar_text,但它太基础了,几乎每个朋友都有50-60%的匹配度,因为它只是基于名字中的单词。
有什么建议么?
您可能需要考虑向量空间模型:将每个名称和位置表示为非常高维空间中的一个维度。将 twitter 表示为一个向量,将 facebook 表示为另一个向量。例如,如果我在 facebook 和 twitter 上都有一个名叫 Mike 的朋友,则“Mike”维度在两个向量中都有一个非零值。通过比较这两个向量之间的角度,我可以计算为相似度得分。较小的角度表示较高的相似度。一个简单的例子:
我的推特朋友:Ada Alan Beth Dana Jon
我的 facebook 好友:Anne Beth Dana Jon
空间包含维度:< Ada, Alan, Anne, Beth, Dana, Jon >
推特向量: t = < 1, 1, 0, 1, 1, 1 >
Facebook 向量: f = < 0, 0, 1, 1, 1, 1 >
它们之间的角度等于 ArcCos( [ f dot t ] / [ | f | * | t | ] )