Leb's answer is right on the money; please upvote and accept it.
I just want to add a note about naming conventions.
In many programming languages, variable names i and j are traditionally used for numeric loop indexes, but not for the actual values of the elements in a list or array.
For example (pun intended), if you were writing an old-fashioned for loop in JavaScript, it might look like this:
var names = [ "Kent", "Leb", "Dalen" ];
for( var i = 0; i < names.length; i++ ) {
console.log( names[i] );
}
You could also write code like this in Python, but since you're using the more expressive Python for loop, you can use better names than i and j.
As Dalen notes in a comment, the names array1 and array2 don't match Python terminology—but more importantly, they don't say anything about what is in these lists.
It is helpful to use more self-explanatory variable names throughout. In your code, the two lists are a list of words and a list of phrases, and the variables in the loops represent a single word and a single phrase.
A convention I like here is to use a plural name for a list or array, and the corresponding singular name for an individual element of that list or array.
So you could use names like this:
words = [ "happy", "sad", "good", "bad", "like" ]
phrases = [
"i like starhub",
"i am happy with the starhub service",
"starhub is bad",
" this is not awful"
]
for phrase in phrases:
for word in words:
if word in phrase:
print( word )
Do you see how much more clear this makes the code? Instead of i and j and array1 and array2 (or list1 and list2), each name describes the actual data you're working with.