根据某些规则筛选 JSON



我在概念上被困在这个问题上。我有一些数据:

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
}

其中测量过滤器可能看起来像这样:

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(您可以尝试使用现有的模糊搜索库/解决方案,例如弹性搜索(可用于MongoDB(,将可搜索字段存储在搜索字符串中,并尝试教模糊搜索如何根据需要拆分部分。如果您也希望在查询中进行模糊匹配并且不太关心确切的结果,则可能是可行的。

2(实现自己的匹配。首先实现相似性度量值,并在数据集上迭代计算该度量值。一个非常简单的度量是简单地在每个匹配字段的相似性分数中加一个。将分数分配给文档,并在循环访问整个集合后按分数排序。现在,您有一个按查询相关性排序的集合。

我不明白为什么你是否从上到下与从下到上匹配会有任何区别。

最新更新