extract a sentence that contains a list of keywords or phrase using python
<p>I have used the following code to extract a sentence from file(the sentence should contain some or all of the search keywords)</p>

<pre><code>search_keywords=['mother','sing','song']
with open('text.txt', 'r') as in_file:
    text = in_file.read()
    sentences = text.split(".")

for sentence in sentences:
    if (all(map(lambda word: word in sentence, search_keywords))):
        print sentence
</code></pre>

<p>The problem with the above code is that it does not print the required sentence if one of the search keywords do not match with the sentence words. I want a code that prints the sentence containing some or all of the search keywords. It would be great if the code can also search for a phrase and extract the corresponding sentence.</p>

<p>It seems like you want to count the number of <code>search_keyboards</code> in each sentence. You can do this as follows:</p>

<pre><code>sentences = "My name is sing song. I am a mother. I am happy. You sing like my mother".split(".")
search_keywords=['mother','sing','song']

for sentence in sentences:
    print("{} key words in sentence:".format(sum(1 for word in search_keywords if word in sentence)))
    print(sentence + "\n")

# Outputs:
#2 key words in sentence:
#My name is sing song
#
#1 key words in sentence:
# I am a mother
#
#0 key words in sentence:
# I am happy
#
#2 key words in sentence:
# You sing like my mother
</code></pre>

<p>Or if you only want the sentence(s) that have the most matching <code>search_keywords</code>, you can make a dictionary and find the maximum values:</p>

<pre><code>dct = {}
for sentence in sentences:
    dct[sentence] = sum(1 for word in search_keywords if word in sentence)

best_sentences = [key for key,value in dct.items() if value == max(dct.values())]


print("\n".join(best_sentences))

# Outputs:
#My name is sing song
# You sing like my mother
</code></pre>

python file search text