Efficient method of searching cell array for multiple, partial (non exact) strings

3 次查看(过去 30 天)
Hello, internet!
I'm looking for the most efficient way to look through a cell array to match partial strings. I know I can bound things in a loop, but there has to be a more efficient method of doing this.
Given the following:
MasterList = {'dog' 'house' 'hotdog' 'cat' 'house music' 'banana' 'that actor from the 80s'};
SearchFor = {'dog' 'house' 'actor'};
I would like a search algorithm to return:
LogicalArrayX = 1 1 1 0 1 0 1
I know that partialLogicalArrayX = strfind(MasterList,SearchFor{i}) will return the character indices of MasterList when searching for SearchFor{i}, but I'd like it to return a logical matrix and be able to batch-process SearchFor instead of having to loop around the i variable.
Thanks!

回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2016-9-1
编辑:Azzi Abdelmalek 2016-9-1
edit
MasterList = {'dog' 'house' 'hotdog' 'cat' 'house music' 'banana' 'that actor from the 80s'};
SearchFor = {'dog' 'house' 'actor'};
LogicalArrayX=logical(~cellfun(@isempty,regexp(MasterList,'dog|house|actor','once')))
  2 个评论
Matt C
Matt C 2016-9-1
Thanks, Azzi. Is there a way to extend this so that you aren't manually entering 'dog|house|actor'? This was my simplified problem - my real problem has a MasterList that is tens of 1000s of items long, and my SearchFor uses something that is 1000s of items long. Computational speed is also critical for my application, and I have seen on some threads that regexp operates fairly slowly.
Azzi Abdelmalek
Azzi Abdelmalek 2016-9-1
编辑:Azzi Abdelmalek 2016-9-1
MasterList = {'dog' 'house' 'hotdog' 'cat' 'house music' 'banana' 'that actor from the 80s'};
SearchFor = {'dog' 'house' 'actor'};
patern= strjoin(SearchFor,'|')
LogicalArrayX=logical(~cellfun(@isempty,regexp(MasterList,patern,'once')))

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Signal Processing 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by