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

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

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')
    end
end

2 Comments

per isakson on 17 Jun 2013

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?

kenny on 17 Jun 2013

yes, much longer.

kenny

Products

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".

0 Comments

Marc
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: http://www.mathworks.com/help/matlab/ref/containers.mapclass.html ) 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.

Goodluck!

0 Comments

Muthu Annamalai

Contact us