How do I compare two sentences with similar words?
10 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Prajwal Venkatesh
el 20 de En. de 2020
I have two string sentences with similar words, I want to know if there is a common word between them, case insensitive.
string1='Install peoplenet antenna';
string2='ANT-PMG,PEOPLENET,30';
So I want the answer to be 'true' or logical because 'peoplenet' is there in both the sentences.
0 comentarios
Respuesta aceptada
Sindar
el 20 de En. de 2020
First, split each sentence into the individual words
words_1 = split(string1,[" ",","]);
words_2 = split(string2,[" ",","]);
Then check if they share any words (comparing lowercase versions)
common_words = intersect(lower(words_1),lower(words_2))
share_words = ~isempty(common_words);
3 comentarios
Sindar
el 20 de En. de 2020
Editada: Sindar
el 20 de En. de 2020
Yup, agreed that yours is more robust in that case. If you know the delimiters, mine might be better (is "ANT-PMG" one word or two? What about "30" or "John's"?).
(It looks like I was typing when you submitted your answer. Otherwise, I would have just commented on it instead of creating a separate near-duplicate answer)
Adam Danz
el 20 de En. de 2020
Not a problem - different approaches listed in the answers section is often helpful.
Más respuestas (1)
Adam Danz
el 20 de En. de 2020
Editada: Adam Danz
el 20 de En. de 2020
I wouldn't be surprised if a more robust algorithm already exists but this simple appraoch takes the following steps.
- Replace the non-letters with empty spaces {, . ; ( 0 - etc... }
- Converts all characters to lower case
- Splits the strings into words
- Detects if there are matching words.
isMatch is the logical output that identifies if there is a match or not.
string1='Install peoplenet antenna';
string2='ANT-PMG,PEOPLENET,30';
% replace non-letters with a space and convert to lower case.
str1 = lower(string1);
str2 = lower(string2);
str1(~isstrprop(str1,'alpha')) = ' ';
str2(~isstrprop(str2,'alpha')) = ' ';
% Split the strings into words
words1 = strsplit(str1);
words2 = strsplit(str2);
% Detect matches
isMatch = any(ismember(words1, words2));
% Note, the following line will show which words were similar
% ismember(words1, words2)
Ver también
Categorías
Más información sobre Characters and Strings en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!