0

我有一个关于数据分类的问题。我想这就像 Google 的 PageRank 的目标:如何对查询进行分类以便我们返回最佳匹配结果?

我简化了一个场景来说明我的业务问题。

假设我在市场上有一些房子,并假设我使用 Enums 作为“标志”或“选项”来分配给我的房子对象。这个例子不是关于好的设计,而是关于根据客户的需求偏爱一所房子而不是另一所房子的程序化解决方案。

正如您在底部看到的那样,客户通常会混合/匹配许多相同的愿望。所以我需要找出哪个房子是最好的匹配,而不是诉诸一千个 if/else 或 switch 语句。

可能吗?

标志/选项:

enum RoomTypes
{
    Bathroom,
    Bedroom,
    Livingroom,
    Study
}

enum Nearby
{
    School,
    Hospital,
    ShoppingMall,
    Park,
    Trainstation
}

enum Features
{
    Airconditioning,
    Garage,
    Garden,
    Storage,
    Basement
}

班上:

class House
{
    public IEnumerable<RoomTypes> RoomTypes {get; set;}
    public IEnumerable<Nearby> Nearby {get; set;}
    public IEnumerable<Features> Features {get; set;}
}

===============

我们有2个可用的房子:

var bigHouse = new House 
{ 
    RoomTypes = new IEnumerable<RoomTypes>{ RoomTypes.Bathroom, RoomTypes.Bedroom, RoomTypes.Study };
    Nearby = new IEnumerable<Nearby>{ Nearby.School, Nearby.Park, Nearby.ShoppingMall };
    Features = new IEnumerable<Features>{ Features.Airconditioning, Features.Storage, Features.Garden };
}

var smallHouse = new House 
{ 
    RoomTypes = new IEnumerable<RoomTypes>{ RoomTypes.Livingroom, RoomTypes.Bedroom };
    Nearby = new IEnumerable<Nearby>{ Nearby.Trainstation };
    Features = new IEnumerable<Features>{ Features.Airconditioning };
}

===============

用例: 客户根据选项申请房屋。

客户甲:

  • 房间类型:浴室,卧室
  • 附近:公园,购物中心,学校
  • 特征: 空调, 地下室, 花园

客户乙:

  • 房间类型:卧室,浴室
  • 附近:购物中心,火车站
  • 特点: 空调, 车库

现在的问题是,我如何根据可用房屋对申请进行评分?

4

1 回答 1

1

在这么短的篇幅里,这真是一个难以解释的问题。你需要做的是一点线性代数。

对于所有这些功能,请创建一个向量来表示您可以使用的房屋

House = [1,0,1,0..........] {attributes are bed room, bathroom, Near park, Airconditioning etc }

为客户的要求创建一个类似的向量。

在客户需求的向量和可用的房屋向量之间取一个点积。点积最大的房子是最符合您客户要求的房子。

你能说出原因吗:)

为什么要选择is值最大的点积?正如您所看到的,当属性匹配时,乘法将为 1 else 0 。

于 2013-08-15T11:55:35.617 回答