Nlp 时间序列数据中的子序列查询

Nlp 时间序列数据中的子序列查询,nlp,sequence,graph-theory,graph-databases,graph-data-science,Nlp,Sequence,Graph Theory,Graph Databases,Graph Data Science,我面临一个问题,我觉得在图论或图库中有一个解决方案。我在这些领域的知识非常有限。我希望有人能认识到我的问题,也许能告诉我解决问题的方法 简化示例: 我正在处理状态的时间序列。一个简单的示例,其中只有两种状态: TS State t0 T t1 F t2 F t3 F t4 T t5 T t6 T t7 F t... ... 我可以将其转换为具有两个节点(T和F)的图,其中状态中的“驻留时间”是属性(括号中): 我的问题的一个例子是编写一个

我面临一个问题,我觉得在图论或图库中有一个解决方案。我在这些领域的知识非常有限。我希望有人能认识到我的问题,也许能告诉我解决问题的方法

简化示例:

我正在处理状态的时间序列。一个简单的示例,其中只有两种状态:

TS    State
t0    T
t1    F
t2    F
t3    F
t4    T
t5    T
t6    T
t7    F
t...  ...
我可以将其转换为具有两个节点(T和F)的图,其中状态中的“驻留时间”是属性(括号中):

我的问题的一个例子是编写一个“查询”,提取与此模式匹配的任何子序列
F(>=2)->T(T(3)

但如果数据集中存在,查询还可以提取如下序列:

F(2) -> T(8)
F(20) -> T(3)
我举的例子是简化的:有两个以上的状态,更高级的查询将允许循环,其中这些循环可以限制在循环中花费的总时间或可以完成的循环数量上:例如

`T(>2) -> [loops of F(1)->T(1)] -> T(<10)` 

`T(>2)->[F(1)->T(1)的循环]->T(F(我可能会扭转这个问题。您已经指出这是时间序列数据。鉴于此,我可能会在每次状态更改时创建一个新的状态节点。然后我会对“驻留”进行编码在上一个节点中创建时间,并将新节点链接到上一个状态节点,从而在图形数据库中创建链接列表。使用此结构,模式查询变得简单

Objective/DB是一个基于模式的对象/图形数据库,具有一套完整的图形导航查询功能。它有自己的查询语言,称为Declarative Objective或DO

我们从模式定义开始:

UPDATE SCHEMA { 
    CREATE CLASS State{
        label       : String,
        dwellTime   : INTEGER { Storage: B32 },               
        prev        : Reference { referenced: State, Inverse: next },
        next        : Reference { referenced: State, Inverse: prev}
    }           
};
然后,我们可以执行如下所示的DO查询:

MATCH p = (:State {label == 'T' AND dwellTime > 5})
           -->(:State {label == 'F' AND dwellTime > 5})
           -->(:State {label == 'T' AND dwellTime < 2})
           -->(:State {label == 'T' AND dwellTime > 100})
           -->(:State {label == 'F' AND dwellTime > 100})
           RETURN p;
MATCH p=(:State{label=='T'和delivetime>5})
-->(:状态{label='F'和驻留时间>5})
-->(:状态{label='T'和驻留时间<2})
-->(:状态{label='T'和驻留时间>100})
-->(:状态{label='F'和驻留时间>100})
返回p;
这种查询将找到满足指定驻留时间的所有“TFTTF”模式

UPDATE SCHEMA { 
    CREATE CLASS State{
        label       : String,
        dwellTime   : INTEGER { Storage: B32 },               
        prev        : Reference { referenced: State, Inverse: next },
        next        : Reference { referenced: State, Inverse: prev}
    }           
};
MATCH p = (:State {label == 'T' AND dwellTime > 5})
           -->(:State {label == 'F' AND dwellTime > 5})
           -->(:State {label == 'T' AND dwellTime < 2})
           -->(:State {label == 'T' AND dwellTime > 100})
           -->(:State {label == 'F' AND dwellTime > 100})
           RETURN p;