我面临一个问题,我觉得图论或图数据库中有解决方案。我在这些领域的知识非常有限。我希望有人能认出我的问题,也许可以指出用于解决它的技术的名称。
简化示例:
我正在处理时间序列的状态。一个简单的例子,只有两种状态:
TS State
t0 T
t1 F
t2 F
t3 F
t4 T
t5 T
t6 T
t7 F
t... ...
我可以将其转换为具有两个节点(T 和 F)的图,其中状态中的“停留时间”是一个属性(在括号中):
T(1) -> F(3) -> T(3) -> F(1)
我的问题的一个例子是编写一个“查询”来提取与此模式匹配的任何子序列F(>=2) -> T(<10)
。在上面的示例中,我的查询将提取子序列:
F(3) -> T(3)
但如果它存在于数据集中,查询也可以提取如下序列:
F(2) -> T(8)
F(20) -> T(3)
我提出的示例已简化:有两个以上的状态,并且更高级的查询将允许循环,其中这些循环可以限制在循环中花费的总时间或可以完成的循环数量:例如
`T(>2) -> [loops of F(1)->T(1)] -> T(<10)`
我的循环可能会被限制为不超过 10 次迭代,或者不超过 10 个时间单位。锦上添花的是找到这样的序列
T(n)->F(<n)
翻译为:以 T 开始的序列(并在 T 中停留n 个时间单位),然后是 F 状态,它在 F 中停留的时间小于n(即,F 比前面的 T 短)
我尝试了什么:
我最初想将其转换为字符串,并使用 RegEx 来提取匹配项。正则表达式可以满足我的所有需求,但无法理解像“大于”这样的算术。我想我可以保留我的原始时间序列状态(TFFFTTTF
)并对此进行正则表达式......但它看起来很丑陋。
自然语言处理、图论、图数据库等领域会出现类似问题。我不知道如何在我的图表中编码“状态持续时间”属性。我不知道是否有某种“行业标准”查询语言用于图形数据库中的子序列搜索。
问题:
- 有没有解决这些子序列提取问题的框架,如果有,是怎么调用的?有“最佳实践”吗?我应该如何构建我的数据?是否有查询语言来查询序列数据库中的子序列?