Why this code is not working properly for keyword search?











up vote
1
down vote

favorite












I have read the following code from kaggle exercises. The aim of the code for the function multi_word_search(documents1, keywords1) is to show the string indices in documents1 that contain certain words in keywords1. For example if



documents1 = ['what do you want to do', 'what is your research goal', 'what do you want to accomplish in life']
keywords1 = ['want', 'your']


then the output of the function should be {'want': [0, 2], 'your': [1]} but unfortunately the output that I get after running the code is {'want': [0, 2]}. Where is the problem in the code. Any help in this regard will be much appreciated. Thanks in advance.



def word_search(documents, keyword):
indices=
for i, doc in enumerate(documents):
tokens=doc.split()
normalized=[token.rstrip('.,').lower() for token in tokens]
if keyword.lower() in normalized:
indices.append(i)
return indices
def multi_word_search(documents1, keywords1):
keyword_to_indices={}
for keyword2 in keywords1:
keyword_to_indices[keyword2]=word_search(documents1, keyword2)
return keyword_to_indices
s=['what do you want to do', 'what is your research goal', 'what do you want to accomplish in life']
keywords=['want', 'your']
r=multi_word_search(s,keywords)
print(r)









share|improve this question




















  • 1




    Please fix the indentation for your functions.
    – wwii
    Nov 12 at 1:05






  • 2




    I get your expected result, {'want': [0, 2], 'your': [1]}, with the code you posted. In your posted code, keywords contains 'your' - BUT in your explanation of the problem you stated keywords1 contains 'you', which kewords are you using?
    – wwii
    Nov 12 at 1:14








  • 1




    your code works fine. there are improvements you can make, but you will get your expected output
    – aydow
    Nov 12 at 1:25






  • 1




    If you were trying to use libraries without importing them it would be getting NameErrors
    – wwii
    Nov 12 at 1:25






  • 1




    If you are curious, you can watch your code execute at pythontutor.com
    – wwii
    Nov 12 at 1:26















up vote
1
down vote

favorite












I have read the following code from kaggle exercises. The aim of the code for the function multi_word_search(documents1, keywords1) is to show the string indices in documents1 that contain certain words in keywords1. For example if



documents1 = ['what do you want to do', 'what is your research goal', 'what do you want to accomplish in life']
keywords1 = ['want', 'your']


then the output of the function should be {'want': [0, 2], 'your': [1]} but unfortunately the output that I get after running the code is {'want': [0, 2]}. Where is the problem in the code. Any help in this regard will be much appreciated. Thanks in advance.



def word_search(documents, keyword):
indices=
for i, doc in enumerate(documents):
tokens=doc.split()
normalized=[token.rstrip('.,').lower() for token in tokens]
if keyword.lower() in normalized:
indices.append(i)
return indices
def multi_word_search(documents1, keywords1):
keyword_to_indices={}
for keyword2 in keywords1:
keyword_to_indices[keyword2]=word_search(documents1, keyword2)
return keyword_to_indices
s=['what do you want to do', 'what is your research goal', 'what do you want to accomplish in life']
keywords=['want', 'your']
r=multi_word_search(s,keywords)
print(r)









share|improve this question




















  • 1




    Please fix the indentation for your functions.
    – wwii
    Nov 12 at 1:05






  • 2




    I get your expected result, {'want': [0, 2], 'your': [1]}, with the code you posted. In your posted code, keywords contains 'your' - BUT in your explanation of the problem you stated keywords1 contains 'you', which kewords are you using?
    – wwii
    Nov 12 at 1:14








  • 1




    your code works fine. there are improvements you can make, but you will get your expected output
    – aydow
    Nov 12 at 1:25






  • 1




    If you were trying to use libraries without importing them it would be getting NameErrors
    – wwii
    Nov 12 at 1:25






  • 1




    If you are curious, you can watch your code execute at pythontutor.com
    – wwii
    Nov 12 at 1:26













up vote
1
down vote

favorite









up vote
1
down vote

favorite











I have read the following code from kaggle exercises. The aim of the code for the function multi_word_search(documents1, keywords1) is to show the string indices in documents1 that contain certain words in keywords1. For example if



documents1 = ['what do you want to do', 'what is your research goal', 'what do you want to accomplish in life']
keywords1 = ['want', 'your']


then the output of the function should be {'want': [0, 2], 'your': [1]} but unfortunately the output that I get after running the code is {'want': [0, 2]}. Where is the problem in the code. Any help in this regard will be much appreciated. Thanks in advance.



def word_search(documents, keyword):
indices=
for i, doc in enumerate(documents):
tokens=doc.split()
normalized=[token.rstrip('.,').lower() for token in tokens]
if keyword.lower() in normalized:
indices.append(i)
return indices
def multi_word_search(documents1, keywords1):
keyword_to_indices={}
for keyword2 in keywords1:
keyword_to_indices[keyword2]=word_search(documents1, keyword2)
return keyword_to_indices
s=['what do you want to do', 'what is your research goal', 'what do you want to accomplish in life']
keywords=['want', 'your']
r=multi_word_search(s,keywords)
print(r)









share|improve this question















I have read the following code from kaggle exercises. The aim of the code for the function multi_word_search(documents1, keywords1) is to show the string indices in documents1 that contain certain words in keywords1. For example if



documents1 = ['what do you want to do', 'what is your research goal', 'what do you want to accomplish in life']
keywords1 = ['want', 'your']


then the output of the function should be {'want': [0, 2], 'your': [1]} but unfortunately the output that I get after running the code is {'want': [0, 2]}. Where is the problem in the code. Any help in this regard will be much appreciated. Thanks in advance.



def word_search(documents, keyword):
indices=
for i, doc in enumerate(documents):
tokens=doc.split()
normalized=[token.rstrip('.,').lower() for token in tokens]
if keyword.lower() in normalized:
indices.append(i)
return indices
def multi_word_search(documents1, keywords1):
keyword_to_indices={}
for keyword2 in keywords1:
keyword_to_indices[keyword2]=word_search(documents1, keyword2)
return keyword_to_indices
s=['what do you want to do', 'what is your research goal', 'what do you want to accomplish in life']
keywords=['want', 'your']
r=multi_word_search(s,keywords)
print(r)






python function keyword-search wordsearch






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 12 at 1:39









wwii

10.3k31744




10.3k31744










asked Nov 12 at 0:43









Frank Moses

1112




1112








  • 1




    Please fix the indentation for your functions.
    – wwii
    Nov 12 at 1:05






  • 2




    I get your expected result, {'want': [0, 2], 'your': [1]}, with the code you posted. In your posted code, keywords contains 'your' - BUT in your explanation of the problem you stated keywords1 contains 'you', which kewords are you using?
    – wwii
    Nov 12 at 1:14








  • 1




    your code works fine. there are improvements you can make, but you will get your expected output
    – aydow
    Nov 12 at 1:25






  • 1




    If you were trying to use libraries without importing them it would be getting NameErrors
    – wwii
    Nov 12 at 1:25






  • 1




    If you are curious, you can watch your code execute at pythontutor.com
    – wwii
    Nov 12 at 1:26














  • 1




    Please fix the indentation for your functions.
    – wwii
    Nov 12 at 1:05






  • 2




    I get your expected result, {'want': [0, 2], 'your': [1]}, with the code you posted. In your posted code, keywords contains 'your' - BUT in your explanation of the problem you stated keywords1 contains 'you', which kewords are you using?
    – wwii
    Nov 12 at 1:14








  • 1




    your code works fine. there are improvements you can make, but you will get your expected output
    – aydow
    Nov 12 at 1:25






  • 1




    If you were trying to use libraries without importing them it would be getting NameErrors
    – wwii
    Nov 12 at 1:25






  • 1




    If you are curious, you can watch your code execute at pythontutor.com
    – wwii
    Nov 12 at 1:26








1




1




Please fix the indentation for your functions.
– wwii
Nov 12 at 1:05




Please fix the indentation for your functions.
– wwii
Nov 12 at 1:05




2




2




I get your expected result, {'want': [0, 2], 'your': [1]}, with the code you posted. In your posted code, keywords contains 'your' - BUT in your explanation of the problem you stated keywords1 contains 'you', which kewords are you using?
– wwii
Nov 12 at 1:14






I get your expected result, {'want': [0, 2], 'your': [1]}, with the code you posted. In your posted code, keywords contains 'your' - BUT in your explanation of the problem you stated keywords1 contains 'you', which kewords are you using?
– wwii
Nov 12 at 1:14






1




1




your code works fine. there are improvements you can make, but you will get your expected output
– aydow
Nov 12 at 1:25




your code works fine. there are improvements you can make, but you will get your expected output
– aydow
Nov 12 at 1:25




1




1




If you were trying to use libraries without importing them it would be getting NameErrors
– wwii
Nov 12 at 1:25




If you were trying to use libraries without importing them it would be getting NameErrors
– wwii
Nov 12 at 1:25




1




1




If you are curious, you can watch your code execute at pythontutor.com
– wwii
Nov 12 at 1:26




If you are curious, you can watch your code execute at pythontutor.com
– wwii
Nov 12 at 1:26












1 Answer
1






active

oldest

votes

















up vote
-1
down vote













Instead of writing such lengthy function, you can use dictionary comprehension to get the same results.



In [12]: d = {i : [n for n, k in enumerate(documents1) if any([i == j for j in k.split()])
...: ] for i in keywords1}

In [13]: d
Out[13]: {'want': [0, 2], 'your': [1]}


Here, I'm running loop over the keywords for dictionary (d) keys and the list is being populated by running another loop to find the index of the list that contains the desired keywords.






share|improve this answer





















  • Does that answer the question?
    – wwii
    Nov 12 at 5:40










  • @wwii Why downvote? I said in the beginning that instead of writing such long code that is prone to error if the op is curious enough he can learn the dictionary comprehension. That's how I'm learning programming. If someone else comes with a better idea, if it seems interesting I'll learn it.
    – mamun
    Nov 12 at 5:47












  • It still is not an answer to the question and whether a dictionary comprehension is less prone to error than a regular for loop is an opinion.
    – wwii
    Nov 12 at 5:52










  • Given the input, you can reach the output several different ways. I showed one way. Better or not certainly opinion based, but seeing all the different options and choosing the best one is certainly better than one way of doing things.
    – mamun
    Nov 12 at 5:59










  • Maybe I'm being a tad pedantic but this a question and answer site.
    – wwii
    Nov 12 at 6:10











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254702%2fwhy-this-code-is-not-working-properly-for-keyword-search%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
-1
down vote













Instead of writing such lengthy function, you can use dictionary comprehension to get the same results.



In [12]: d = {i : [n for n, k in enumerate(documents1) if any([i == j for j in k.split()])
...: ] for i in keywords1}

In [13]: d
Out[13]: {'want': [0, 2], 'your': [1]}


Here, I'm running loop over the keywords for dictionary (d) keys and the list is being populated by running another loop to find the index of the list that contains the desired keywords.






share|improve this answer





















  • Does that answer the question?
    – wwii
    Nov 12 at 5:40










  • @wwii Why downvote? I said in the beginning that instead of writing such long code that is prone to error if the op is curious enough he can learn the dictionary comprehension. That's how I'm learning programming. If someone else comes with a better idea, if it seems interesting I'll learn it.
    – mamun
    Nov 12 at 5:47












  • It still is not an answer to the question and whether a dictionary comprehension is less prone to error than a regular for loop is an opinion.
    – wwii
    Nov 12 at 5:52










  • Given the input, you can reach the output several different ways. I showed one way. Better or not certainly opinion based, but seeing all the different options and choosing the best one is certainly better than one way of doing things.
    – mamun
    Nov 12 at 5:59










  • Maybe I'm being a tad pedantic but this a question and answer site.
    – wwii
    Nov 12 at 6:10















up vote
-1
down vote













Instead of writing such lengthy function, you can use dictionary comprehension to get the same results.



In [12]: d = {i : [n for n, k in enumerate(documents1) if any([i == j for j in k.split()])
...: ] for i in keywords1}

In [13]: d
Out[13]: {'want': [0, 2], 'your': [1]}


Here, I'm running loop over the keywords for dictionary (d) keys and the list is being populated by running another loop to find the index of the list that contains the desired keywords.






share|improve this answer





















  • Does that answer the question?
    – wwii
    Nov 12 at 5:40










  • @wwii Why downvote? I said in the beginning that instead of writing such long code that is prone to error if the op is curious enough he can learn the dictionary comprehension. That's how I'm learning programming. If someone else comes with a better idea, if it seems interesting I'll learn it.
    – mamun
    Nov 12 at 5:47












  • It still is not an answer to the question and whether a dictionary comprehension is less prone to error than a regular for loop is an opinion.
    – wwii
    Nov 12 at 5:52










  • Given the input, you can reach the output several different ways. I showed one way. Better or not certainly opinion based, but seeing all the different options and choosing the best one is certainly better than one way of doing things.
    – mamun
    Nov 12 at 5:59










  • Maybe I'm being a tad pedantic but this a question and answer site.
    – wwii
    Nov 12 at 6:10













up vote
-1
down vote










up vote
-1
down vote









Instead of writing such lengthy function, you can use dictionary comprehension to get the same results.



In [12]: d = {i : [n for n, k in enumerate(documents1) if any([i == j for j in k.split()])
...: ] for i in keywords1}

In [13]: d
Out[13]: {'want': [0, 2], 'your': [1]}


Here, I'm running loop over the keywords for dictionary (d) keys and the list is being populated by running another loop to find the index of the list that contains the desired keywords.






share|improve this answer












Instead of writing such lengthy function, you can use dictionary comprehension to get the same results.



In [12]: d = {i : [n for n, k in enumerate(documents1) if any([i == j for j in k.split()])
...: ] for i in keywords1}

In [13]: d
Out[13]: {'want': [0, 2], 'your': [1]}


Here, I'm running loop over the keywords for dictionary (d) keys and the list is being populated by running another loop to find the index of the list that contains the desired keywords.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 12 at 1:54









mamun

6161612




6161612












  • Does that answer the question?
    – wwii
    Nov 12 at 5:40










  • @wwii Why downvote? I said in the beginning that instead of writing such long code that is prone to error if the op is curious enough he can learn the dictionary comprehension. That's how I'm learning programming. If someone else comes with a better idea, if it seems interesting I'll learn it.
    – mamun
    Nov 12 at 5:47












  • It still is not an answer to the question and whether a dictionary comprehension is less prone to error than a regular for loop is an opinion.
    – wwii
    Nov 12 at 5:52










  • Given the input, you can reach the output several different ways. I showed one way. Better or not certainly opinion based, but seeing all the different options and choosing the best one is certainly better than one way of doing things.
    – mamun
    Nov 12 at 5:59










  • Maybe I'm being a tad pedantic but this a question and answer site.
    – wwii
    Nov 12 at 6:10


















  • Does that answer the question?
    – wwii
    Nov 12 at 5:40










  • @wwii Why downvote? I said in the beginning that instead of writing such long code that is prone to error if the op is curious enough he can learn the dictionary comprehension. That's how I'm learning programming. If someone else comes with a better idea, if it seems interesting I'll learn it.
    – mamun
    Nov 12 at 5:47












  • It still is not an answer to the question and whether a dictionary comprehension is less prone to error than a regular for loop is an opinion.
    – wwii
    Nov 12 at 5:52










  • Given the input, you can reach the output several different ways. I showed one way. Better or not certainly opinion based, but seeing all the different options and choosing the best one is certainly better than one way of doing things.
    – mamun
    Nov 12 at 5:59










  • Maybe I'm being a tad pedantic but this a question and answer site.
    – wwii
    Nov 12 at 6:10
















Does that answer the question?
– wwii
Nov 12 at 5:40




Does that answer the question?
– wwii
Nov 12 at 5:40












@wwii Why downvote? I said in the beginning that instead of writing such long code that is prone to error if the op is curious enough he can learn the dictionary comprehension. That's how I'm learning programming. If someone else comes with a better idea, if it seems interesting I'll learn it.
– mamun
Nov 12 at 5:47






@wwii Why downvote? I said in the beginning that instead of writing such long code that is prone to error if the op is curious enough he can learn the dictionary comprehension. That's how I'm learning programming. If someone else comes with a better idea, if it seems interesting I'll learn it.
– mamun
Nov 12 at 5:47














It still is not an answer to the question and whether a dictionary comprehension is less prone to error than a regular for loop is an opinion.
– wwii
Nov 12 at 5:52




It still is not an answer to the question and whether a dictionary comprehension is less prone to error than a regular for loop is an opinion.
– wwii
Nov 12 at 5:52












Given the input, you can reach the output several different ways. I showed one way. Better or not certainly opinion based, but seeing all the different options and choosing the best one is certainly better than one way of doing things.
– mamun
Nov 12 at 5:59




Given the input, you can reach the output several different ways. I showed one way. Better or not certainly opinion based, but seeing all the different options and choosing the best one is certainly better than one way of doing things.
– mamun
Nov 12 at 5:59












Maybe I'm being a tad pedantic but this a question and answer site.
– wwii
Nov 12 at 6:10




Maybe I'm being a tad pedantic but this a question and answer site.
– wwii
Nov 12 at 6:10


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254702%2fwhy-this-code-is-not-working-properly-for-keyword-search%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Guess what letter conforming each word

Port of Spain

Run scheduled task as local user group (not BUILTIN)