提取累积N-gram Matlab

时间:2014-03-13 02:03:22

标签: matlab

我有一系列的话:

x=['ae' ; 'be' ; 'ce' ; 'de' ; 'ee' ; 'fe']

我想提取一组字符。因此假设每个集合有N = 2个单词,我该如何获得看起来像这样的返回值

'ae' 'be'
'be' 'ce'
'ce' 'de'
'de' 'ee'
'ee' 'fe'

因此,如果N = 2,我会返回一个矩阵,其中每一行包含当前和前一个字符对。如果N = 3,我将获得每行的当前和前2个字符。如果可能的话,我想避免循环。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Circulant Matrix Maltlab提供的内容,根据需要截断它并将其用作索引向量:

x = {'ae' ; 'be' ; 'ce' ; 'de' ; 'ee' ; 'fe'}
N = 3;

n = numel(x);

A = gallery('circul',n:-1:1)
B = fliplr( A(1:n-N+1,n-N+1:end) )

result = x(B)

或更短一些:

A = fliplr( gallery('circul',n:-1:1) )
result = x( A(1:n-N+1,1:n-N) )

或使用hankel的其他选项 - 矩阵:

A = hankel(1:n,1:N)
result = x( A(1:n-N+1,:) )

给出:

result = 

    'ae'    'be'    'ce'
    'be'    'ce'    'de'
    'ce'    'de'    'ee'
    'de'    'ee'    'fe'