Why this code is not working properly for keyword search?
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
|
show 8 more comments
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
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 statedkeywords1
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 gettingNameError
s
– 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
|
show 8 more comments
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
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
python function keyword-search wordsearch
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 statedkeywords1
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 gettingNameError
s
– 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
|
show 8 more comments
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 statedkeywords1
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 gettingNameError
s
– 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
NameError
s– wwii
Nov 12 at 1:25
If you were trying to use libraries without importing them it would be getting
NameError
s– 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
|
show 8 more comments
1 Answer
1
active
oldest
votes
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.
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
add a comment |
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',
autoActivateHeartbeat: false,
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
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
add a comment |
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.
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
add a comment |
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.
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.
answered Nov 12 at 1:54
mamun
7131612
7131612
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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 statedkeywords1
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
NameError
s– 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