MATLAB Answers


Identifying Keywords in Strings strfind

Asked by kenny
on 17 Jun 2013

hello! I'm trying to get this program to recognize a couple of keywords in a string and then based on what those words are, give me an output.

so if i said "killing your father" it would recognize "Killing" as "Bad", "father" as "GoodObject" and mixing those two would get a "that's bad" result.

If i were to write "helping your brother" it would recognize "helping" as "Good" and "brother" as "GoodObject" it would give a "that's good" result.

The problem is I don't know how to make it so the program can recognize two strings in the same sentence. I thought using "&" would work, but it doesn't and i get ??? Undefined function or method 'and' for input arguments of type 'cell'.

 Error in ==> goodbad at 11
 if any(strcmpi(question,GoodObject & Good))

how could i use strfind so that it identifies anything in the Array "Good Object" or "Bad" or "Good"?

 thank you!
 GoodObject = {'brother', 'sister', 'mother', 'father'};
Bad = {'killing', 'hurting', 'stealing', 'robbing'};
Good = {'helping', 'giving', 'sharing', 'forgiving'};
 question = input ('what?','s')
 if any(strcmpi(question,GoodObject & Good))
    disp('that''s good')
else if  any(strcmpi(question,GoodObject &  Bad))
        disp('that''s bad')


This looks like a toy example. Are you looking for a solution that would scale, i.e will the lists of words be much longer?

on 17 Jun 2013

yes, much longer.


No products are associated with this question.

2 Answers

Answer by Marc
on 17 Jun 2013
 Accepted answer

I think you want to try regexp, regexpi and/or regexprep.

In the Matlab documentation, this is under: Matlab > Language Fundamentals > Data Types > Characters and Strings > Parse Strings....

There is a whole section under Examples and How To on "Regular Expressions".


Answer by Muthu Annamalai
on 17 Jun 2013

I have two comments, while in general agreement with @Marc;

1. You can build strings out of sentences in first pass 2. Use containers.Map() (see: ) dictionary type to store your object-value associations, after sorting them.

valueMap = containers.Map();
valueMap('GoodThings') = sort({... })
valueMap('BadThings') = sort({...})

3. Use a binary-search to lookup each string in the sentence, against your Map. This will enormously speedup your program for long lists.



Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!