gpt4 book ai didi

matlab - 如何计算匹配模式的可能单词子序列?

转载 作者:太空宇宙 更新时间:2023-11-03 20:25:28 25 4
gpt4 key购买 nike

假设我有一个序列:

    Seq = 'hello my name'

和一个字符串:

    Str = 'hello hello my friend, my awesome name is John, oh my god!'

然后我在字符串中寻找我的序列的匹配项,所以我得到了单元格数组中序列中每个单词的每个匹配项的“单词”索引,所以第一个元素是一个包含匹配项的单元格 '你好”,第二个元素包含“my”的匹配项,第三个元素包含“name”的匹配项。

    Match = {[1 2];      %'hello' matches
[3 5 11]; %'my' matches
[7]} %'name' matches

我需要代码以某种方式得到一个答案,说明可能的子序列匹配是:

    Answer = [1 3 7;     %[hello my name]
1 5 7; %[hello my name]
2 3 7; %[hello my name]
2 5 7;] %[hello my name]

以“Answer”包含所有可能的有序序列的方式(这就是为什么 my(word 11)从未出现在“Answer”中的原因),在位置 11 之后必须有一个“名称”匹配。

注意:“Seq”的长度和匹配次数可能会有所不同。

最佳答案

由于 Matches 的长度可能会有所不同,因此您需要使用 comma-separated lists , 连同 ndgrid生成所有组合(该方法类似于 this other answer 中使用的方法)。然后使用 diff 过滤掉索引不增加的组合和 logical indexing :

cc = cell(1,numel(Match)); %// pre-shape to be used for ndgrid output
[cc{end:-1:1}] = ndgrid(Match{end:-1:1}); %// output is a comma-separated list
cc = cellfun(@(v) v(:), cc, 'uni', 0) %// linearize each cell
combs = [cc{:}]; %// concatenate into a matrix
ind = all(diff(combs.')>0); %'// index of wanted combinations
combs = combs(ind,:); %// remove unwanted combinations

所需的结果在变量 combs 中。在你的例子中,

combs =
1 3 7
1 5 7
2 3 7
2 5 7

关于matlab - 如何计算匹配模式的可能单词子序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21867681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com