根据某些规则过滤JSON

时间:2020-06-01 23:23:25

标签: json filter

从概念上讲,我陷在这个问题上。我有一些数据:

const measurements = [
  {
    value: 162000,
    properties: [
      {
        name: "Selection Status",
        value: "Most recent value chosen",
      },
      {
        name: "Measurement Method",
        value: "Method of Disks, Single Plane",
      },
      {
        name: "Image Mode",
        value: "2D mode",
      },
      {
        name: "Image View",
        value: "Apical two chamber",
      },
    ],
  },
  {
    value: 171000,
    properties: [
      {
        name: "Selection Status",
        value: "Most recent value chosen",
      },
      {
        name: "Measurement Method",
        value: "Method of Disks, Single Plane",
      },
      {
        name: "Image Mode",
        value: "2D mode",
      },
      {
        name: "Image View",
        value: "Apical four chamber",
      },
    ],
  },
  {
    value: 173000,
    properties: [
      {
        name: "Measurement Method",
        value: "Method of Disks, Biplane",
      },
      {
        name: "Image Mode",
        value: "2D mode",
      },
    ],
  },
  {
    value: 157000,
    properties: [
      {
        name: "Measurement Method",
        value: "Cube Method",
      },
      {
        name: "Image Mode",
        value: "2D mode",
      },
    ],
  },
  {
    value: 141000,
    properties: [
      {
        name: "Measurement Method",
        value: "Teichholz",
      },
      {
        name: "Image Mode",
        value: "2D mode",
      },
    ],
  },
];

我的目标是根据一些贪婪的规则选择度量。他们可能看起来像这样:

function findMeasurement(
  measurements: Measurement[],
  filter: MeasurementFilter,
): Measurement | undefined {
  return undefined
}

其中的MeasurementFilter可能看起来像这样:

const MATCH_ANYTHING = /.+/;

{
  'Image Mode': [/2D mode/, MATCH_ANYTHING],
  'Image View': [/Apical four chamber/, /Apical two chamber/, MATCH_ANYTHING],
  'Measurement Method': [
    /Method of Disks, Biplane/,
    /Method of Disks, Single Plane/,
    /Teichholz/,
    MATCH_ANYTHING,
  ],
  'Selection Status': [/Mean value chosen/, MATCH_ANYTHING],
}

此过滤器应查找最具体到最不具体匹配的测量结果。因此,我想遍历数据数组,并找到最匹配的度量。因此,它将是值为171000的度量2,因为它具有Apical four chamber2D mode。我想在过滤器中上下匹配。

这有意义吗?我有什么缺陷吗?谁能让我开始使用函数实现/伪代码?

1 个答案:

答案 0 :(得分:1)

尽管应该为该用例提供实现,但我不知道实现它的简单方法,我不知道它们。两种解决方法:

1)您可以尝试使用现有的模糊搜索库/解决方案,例如弹性搜索(适用于MongoDB),将可搜索字段存储在搜索字符串中,并尝试教模糊搜索如何根据需要拆分部分。如果您也想在查询中进行模糊匹配,而又不太在乎准确的结果,那可能是可行的。

2)实现您自己的匹配。首先实施相似性度量,然后在数据集中迭代计算该度量。一种非常简单的措施是为每个匹配字段简单地在相似性得分上加一个。遍历整个集合后,将分数分配给文档并按分数排序。现在,您已根据查询的相关性对分类的集合进行了排序。

我不知道为什么从上到下与从下到上匹配应该有什么区别。

相关问题