Python: How to get the similar-sounding words togetherHow can I represent an 'Enum' in Python?How do I copy a file in Python?How can I safely create a nested directory in Python?How to get the current time in PythonHow can I make a time delay in Python?How do I remove an element from a list by index in Python?Getting the last element of a list in PythonHow do I get the number of elements in a list in Python?How do I concatenate two lists in Python?Why not inherit from List<T>?
How to be diplomatic in refusing to write code that breaches the privacy of our users
Using parameter substitution on a Bash array
Is it okay / does it make sense for another player to join a running game of Munchkin?
How to verify if g is a generator for p?
Star/Wye electrical connection math symbol
Hostile work environment after whistle-blowing on coworker and our boss. What do I do?
Print name if parameter passed to function
How does a character multiclassing into warlock get a focus?
The Riley Riddle Mine
Can I convert a rim brake wheel to a disc brake wheel?
I'm in charge of equipment buying but no one's ever happy with what I choose. How to fix this?
Personal Teleportation as a Weapon
Is it correct to write "is not focus on"?
Can I Retrieve Email Addresses from BCC?
Mapping a list into a phase plot
Modify casing of marked letters
Greatest common substring
Is there an Impartial Brexit Deal comparison site?
Is there any reason not to eat food that's been dropped on the surface of the moon?
Is a roofing delivery truck likely to crack my driveway slab?
Why are on-board computers allowed to change controls without notifying the pilots?
How can my private key be revealed if I use the same nonce while generating the signature?
quarter to five p.m
MaTeX, font size, and PlotLegends
Python: How to get the similar-sounding words together
How can I represent an 'Enum' in Python?How do I copy a file in Python?How can I safely create a nested directory in Python?How to get the current time in PythonHow can I make a time delay in Python?How do I remove an element from a list by index in Python?Getting the last element of a list in PythonHow do I get the number of elements in a list in Python?How do I concatenate two lists in Python?Why not inherit from List<T>?
I am trying to get all the similar sounding words from a list.
I tried to get them using cosine similarity but that does not fulfil my purpose.
from sklearn.metrics.pairwise import cosine_similarity
dataList = ['two','fourth','forth','dessert','to','desert']
cosine_similarity(dataList)
I know this is not the right approach, I cannot seem to get a result like:
result = ['xx', 'xx', 'yy', 'yy', 'zz', 'zz']
where they mean that the words which sound similar
python python-3.x list
New contributor
Marc Stoch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
I am trying to get all the similar sounding words from a list.
I tried to get them using cosine similarity but that does not fulfil my purpose.
from sklearn.metrics.pairwise import cosine_similarity
dataList = ['two','fourth','forth','dessert','to','desert']
cosine_similarity(dataList)
I know this is not the right approach, I cannot seem to get a result like:
result = ['xx', 'xx', 'yy', 'yy', 'zz', 'zz']
where they mean that the words which sound similar
python python-3.x list
New contributor
Marc Stoch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
I am trying to get all the similar sounding words from a list.
I tried to get them using cosine similarity but that does not fulfil my purpose.
from sklearn.metrics.pairwise import cosine_similarity
dataList = ['two','fourth','forth','dessert','to','desert']
cosine_similarity(dataList)
I know this is not the right approach, I cannot seem to get a result like:
result = ['xx', 'xx', 'yy', 'yy', 'zz', 'zz']
where they mean that the words which sound similar
python python-3.x list
New contributor
Marc Stoch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I am trying to get all the similar sounding words from a list.
I tried to get them using cosine similarity but that does not fulfil my purpose.
from sklearn.metrics.pairwise import cosine_similarity
dataList = ['two','fourth','forth','dessert','to','desert']
cosine_similarity(dataList)
I know this is not the right approach, I cannot seem to get a result like:
result = ['xx', 'xx', 'yy', 'yy', 'zz', 'zz']
where they mean that the words which sound similar
python python-3.x list
python python-3.x list
New contributor
Marc Stoch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Marc Stoch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited yesterday
DirtyBit
10.6k21842
10.6k21842
New contributor
Marc Stoch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked yesterday
Marc StochMarc Stoch
834
834
New contributor
Marc Stoch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Marc Stoch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Marc Stoch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
First, you need to use a right way to get the similar sounding words i.e. string similarity, I would suggest:
Using jellyfish:
from jellyfish import soundex
print(soundex("two"))
print(soundex("to"))
OUTPUT:
T000
T000
Now perhaps, create a function that would handle the list and then sort it to get them:
def getSoundexList(dList):
res = [soundex(x) for x in dList] # iterate over each elem in the dataList
# print(res) # ['T000', 'F630', 'F630', 'D263', 'T000', 'D263']
return res
dataList = ['two','fourth','forth','dessert','to','desert']
print([x for x in sorted(getSoundexList(dataList))])
OUTPUT:
['D263', 'D263', 'F630', 'F630', 'T000', 'T000']
EDIT:
Another way could be:
Using fuzzy:
import fuzzy
soundex = fuzzy.Soundex(4)
print(soundex("to"))
print(soundex("two"))
OUTPUT:
T000
T000
EDIT 2:
If you want them grouped, you could use groupby:
from itertools import groupby
def getSoundexList(dList):
return sorted([soundex(x) for x in dList])
dataList = ['two','fourth','forth','dessert','to','desert']
print([list(g) for _, g in groupby(getSoundexList(dataList), lambda x: x)])
OUTPUT:
[['D263', 'D263'], ['F630', 'F630'], ['T000', 'T000']]
EDIT 3:
This ones for @Eric Duminil, let's say you want both the names and their respective val:
Using a dict along with itemgetter:
from operator import itemgetter
def getSoundexDict(dList):
return sorted(dict_.items(), key=itemgetter(1)) # sorting the dict_ on val
dataList = ['two','fourth','forth','dessert','to','desert']
res = [soundex(x) for x in dataList] # to get the val for each elem
dict_ = dict(list(zip(dataList, res))) # dict_ with k,v as name/val
print([list(g) for _, g in groupby(getSoundexDict(dataList), lambda x: x[1])])
OUTPUT:
[[('dessert', 'D263'), ('desert', 'D263')], [('fourth', 'F630'), ('forth', 'F630')], [('two', 'T000'), ('to', 'T000')]]
EDIT 4 (for OP):
Soundex:
Soundex is a system whereby values are assigned to names in such a
manner that similar-sounding names get the same value. These values
are known as soundex encodings. A search application based on soundex
will not search for a name directly but rather will search for the
soundex encoding. By doing so, it will obtain all names that sound
like the name being sought.
read more..
@EricDuminil Pardon, but I don't quiet get howisSoundexreturning a boolean would do?
– DirtyBit
yesterday
He means the nameisSoundexis a binary statement ('is' or 'is not'), and should therefore be a boolean returning function. Maybe consider changing the name to something likegetSoundexList?
– user2397282
yesterday
@user2397282 Crap, I over-looked it. Thank you. edited! :)
– DirtyBit
yesterday
1
@EricDuminil Done! :)
– DirtyBit
yesterday
1
Oooooo nice answer sir ;) +1
– Matt B.
8 hours ago
|
show 2 more comments
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
);
);
Marc Stoch is a new contributor. Be nice, and check out our Code of Conduct.
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%2f55331723%2fpython-how-to-get-the-similar-sounding-words-together%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
First, you need to use a right way to get the similar sounding words i.e. string similarity, I would suggest:
Using jellyfish:
from jellyfish import soundex
print(soundex("two"))
print(soundex("to"))
OUTPUT:
T000
T000
Now perhaps, create a function that would handle the list and then sort it to get them:
def getSoundexList(dList):
res = [soundex(x) for x in dList] # iterate over each elem in the dataList
# print(res) # ['T000', 'F630', 'F630', 'D263', 'T000', 'D263']
return res
dataList = ['two','fourth','forth','dessert','to','desert']
print([x for x in sorted(getSoundexList(dataList))])
OUTPUT:
['D263', 'D263', 'F630', 'F630', 'T000', 'T000']
EDIT:
Another way could be:
Using fuzzy:
import fuzzy
soundex = fuzzy.Soundex(4)
print(soundex("to"))
print(soundex("two"))
OUTPUT:
T000
T000
EDIT 2:
If you want them grouped, you could use groupby:
from itertools import groupby
def getSoundexList(dList):
return sorted([soundex(x) for x in dList])
dataList = ['two','fourth','forth','dessert','to','desert']
print([list(g) for _, g in groupby(getSoundexList(dataList), lambda x: x)])
OUTPUT:
[['D263', 'D263'], ['F630', 'F630'], ['T000', 'T000']]
EDIT 3:
This ones for @Eric Duminil, let's say you want both the names and their respective val:
Using a dict along with itemgetter:
from operator import itemgetter
def getSoundexDict(dList):
return sorted(dict_.items(), key=itemgetter(1)) # sorting the dict_ on val
dataList = ['two','fourth','forth','dessert','to','desert']
res = [soundex(x) for x in dataList] # to get the val for each elem
dict_ = dict(list(zip(dataList, res))) # dict_ with k,v as name/val
print([list(g) for _, g in groupby(getSoundexDict(dataList), lambda x: x[1])])
OUTPUT:
[[('dessert', 'D263'), ('desert', 'D263')], [('fourth', 'F630'), ('forth', 'F630')], [('two', 'T000'), ('to', 'T000')]]
EDIT 4 (for OP):
Soundex:
Soundex is a system whereby values are assigned to names in such a
manner that similar-sounding names get the same value. These values
are known as soundex encodings. A search application based on soundex
will not search for a name directly but rather will search for the
soundex encoding. By doing so, it will obtain all names that sound
like the name being sought.
read more..
@EricDuminil Pardon, but I don't quiet get howisSoundexreturning a boolean would do?
– DirtyBit
yesterday
He means the nameisSoundexis a binary statement ('is' or 'is not'), and should therefore be a boolean returning function. Maybe consider changing the name to something likegetSoundexList?
– user2397282
yesterday
@user2397282 Crap, I over-looked it. Thank you. edited! :)
– DirtyBit
yesterday
1
@EricDuminil Done! :)
– DirtyBit
yesterday
1
Oooooo nice answer sir ;) +1
– Matt B.
8 hours ago
|
show 2 more comments
First, you need to use a right way to get the similar sounding words i.e. string similarity, I would suggest:
Using jellyfish:
from jellyfish import soundex
print(soundex("two"))
print(soundex("to"))
OUTPUT:
T000
T000
Now perhaps, create a function that would handle the list and then sort it to get them:
def getSoundexList(dList):
res = [soundex(x) for x in dList] # iterate over each elem in the dataList
# print(res) # ['T000', 'F630', 'F630', 'D263', 'T000', 'D263']
return res
dataList = ['two','fourth','forth','dessert','to','desert']
print([x for x in sorted(getSoundexList(dataList))])
OUTPUT:
['D263', 'D263', 'F630', 'F630', 'T000', 'T000']
EDIT:
Another way could be:
Using fuzzy:
import fuzzy
soundex = fuzzy.Soundex(4)
print(soundex("to"))
print(soundex("two"))
OUTPUT:
T000
T000
EDIT 2:
If you want them grouped, you could use groupby:
from itertools import groupby
def getSoundexList(dList):
return sorted([soundex(x) for x in dList])
dataList = ['two','fourth','forth','dessert','to','desert']
print([list(g) for _, g in groupby(getSoundexList(dataList), lambda x: x)])
OUTPUT:
[['D263', 'D263'], ['F630', 'F630'], ['T000', 'T000']]
EDIT 3:
This ones for @Eric Duminil, let's say you want both the names and their respective val:
Using a dict along with itemgetter:
from operator import itemgetter
def getSoundexDict(dList):
return sorted(dict_.items(), key=itemgetter(1)) # sorting the dict_ on val
dataList = ['two','fourth','forth','dessert','to','desert']
res = [soundex(x) for x in dataList] # to get the val for each elem
dict_ = dict(list(zip(dataList, res))) # dict_ with k,v as name/val
print([list(g) for _, g in groupby(getSoundexDict(dataList), lambda x: x[1])])
OUTPUT:
[[('dessert', 'D263'), ('desert', 'D263')], [('fourth', 'F630'), ('forth', 'F630')], [('two', 'T000'), ('to', 'T000')]]
EDIT 4 (for OP):
Soundex:
Soundex is a system whereby values are assigned to names in such a
manner that similar-sounding names get the same value. These values
are known as soundex encodings. A search application based on soundex
will not search for a name directly but rather will search for the
soundex encoding. By doing so, it will obtain all names that sound
like the name being sought.
read more..
@EricDuminil Pardon, but I don't quiet get howisSoundexreturning a boolean would do?
– DirtyBit
yesterday
He means the nameisSoundexis a binary statement ('is' or 'is not'), and should therefore be a boolean returning function. Maybe consider changing the name to something likegetSoundexList?
– user2397282
yesterday
@user2397282 Crap, I over-looked it. Thank you. edited! :)
– DirtyBit
yesterday
1
@EricDuminil Done! :)
– DirtyBit
yesterday
1
Oooooo nice answer sir ;) +1
– Matt B.
8 hours ago
|
show 2 more comments
First, you need to use a right way to get the similar sounding words i.e. string similarity, I would suggest:
Using jellyfish:
from jellyfish import soundex
print(soundex("two"))
print(soundex("to"))
OUTPUT:
T000
T000
Now perhaps, create a function that would handle the list and then sort it to get them:
def getSoundexList(dList):
res = [soundex(x) for x in dList] # iterate over each elem in the dataList
# print(res) # ['T000', 'F630', 'F630', 'D263', 'T000', 'D263']
return res
dataList = ['two','fourth','forth','dessert','to','desert']
print([x for x in sorted(getSoundexList(dataList))])
OUTPUT:
['D263', 'D263', 'F630', 'F630', 'T000', 'T000']
EDIT:
Another way could be:
Using fuzzy:
import fuzzy
soundex = fuzzy.Soundex(4)
print(soundex("to"))
print(soundex("two"))
OUTPUT:
T000
T000
EDIT 2:
If you want them grouped, you could use groupby:
from itertools import groupby
def getSoundexList(dList):
return sorted([soundex(x) for x in dList])
dataList = ['two','fourth','forth','dessert','to','desert']
print([list(g) for _, g in groupby(getSoundexList(dataList), lambda x: x)])
OUTPUT:
[['D263', 'D263'], ['F630', 'F630'], ['T000', 'T000']]
EDIT 3:
This ones for @Eric Duminil, let's say you want both the names and their respective val:
Using a dict along with itemgetter:
from operator import itemgetter
def getSoundexDict(dList):
return sorted(dict_.items(), key=itemgetter(1)) # sorting the dict_ on val
dataList = ['two','fourth','forth','dessert','to','desert']
res = [soundex(x) for x in dataList] # to get the val for each elem
dict_ = dict(list(zip(dataList, res))) # dict_ with k,v as name/val
print([list(g) for _, g in groupby(getSoundexDict(dataList), lambda x: x[1])])
OUTPUT:
[[('dessert', 'D263'), ('desert', 'D263')], [('fourth', 'F630'), ('forth', 'F630')], [('two', 'T000'), ('to', 'T000')]]
EDIT 4 (for OP):
Soundex:
Soundex is a system whereby values are assigned to names in such a
manner that similar-sounding names get the same value. These values
are known as soundex encodings. A search application based on soundex
will not search for a name directly but rather will search for the
soundex encoding. By doing so, it will obtain all names that sound
like the name being sought.
read more..
First, you need to use a right way to get the similar sounding words i.e. string similarity, I would suggest:
Using jellyfish:
from jellyfish import soundex
print(soundex("two"))
print(soundex("to"))
OUTPUT:
T000
T000
Now perhaps, create a function that would handle the list and then sort it to get them:
def getSoundexList(dList):
res = [soundex(x) for x in dList] # iterate over each elem in the dataList
# print(res) # ['T000', 'F630', 'F630', 'D263', 'T000', 'D263']
return res
dataList = ['two','fourth','forth','dessert','to','desert']
print([x for x in sorted(getSoundexList(dataList))])
OUTPUT:
['D263', 'D263', 'F630', 'F630', 'T000', 'T000']
EDIT:
Another way could be:
Using fuzzy:
import fuzzy
soundex = fuzzy.Soundex(4)
print(soundex("to"))
print(soundex("two"))
OUTPUT:
T000
T000
EDIT 2:
If you want them grouped, you could use groupby:
from itertools import groupby
def getSoundexList(dList):
return sorted([soundex(x) for x in dList])
dataList = ['two','fourth','forth','dessert','to','desert']
print([list(g) for _, g in groupby(getSoundexList(dataList), lambda x: x)])
OUTPUT:
[['D263', 'D263'], ['F630', 'F630'], ['T000', 'T000']]
EDIT 3:
This ones for @Eric Duminil, let's say you want both the names and their respective val:
Using a dict along with itemgetter:
from operator import itemgetter
def getSoundexDict(dList):
return sorted(dict_.items(), key=itemgetter(1)) # sorting the dict_ on val
dataList = ['two','fourth','forth','dessert','to','desert']
res = [soundex(x) for x in dataList] # to get the val for each elem
dict_ = dict(list(zip(dataList, res))) # dict_ with k,v as name/val
print([list(g) for _, g in groupby(getSoundexDict(dataList), lambda x: x[1])])
OUTPUT:
[[('dessert', 'D263'), ('desert', 'D263')], [('fourth', 'F630'), ('forth', 'F630')], [('two', 'T000'), ('to', 'T000')]]
EDIT 4 (for OP):
Soundex:
Soundex is a system whereby values are assigned to names in such a
manner that similar-sounding names get the same value. These values
are known as soundex encodings. A search application based on soundex
will not search for a name directly but rather will search for the
soundex encoding. By doing so, it will obtain all names that sound
like the name being sought.
read more..
edited 15 hours ago
answered yesterday
DirtyBitDirtyBit
10.6k21842
10.6k21842
@EricDuminil Pardon, but I don't quiet get howisSoundexreturning a boolean would do?
– DirtyBit
yesterday
He means the nameisSoundexis a binary statement ('is' or 'is not'), and should therefore be a boolean returning function. Maybe consider changing the name to something likegetSoundexList?
– user2397282
yesterday
@user2397282 Crap, I over-looked it. Thank you. edited! :)
– DirtyBit
yesterday
1
@EricDuminil Done! :)
– DirtyBit
yesterday
1
Oooooo nice answer sir ;) +1
– Matt B.
8 hours ago
|
show 2 more comments
@EricDuminil Pardon, but I don't quiet get howisSoundexreturning a boolean would do?
– DirtyBit
yesterday
He means the nameisSoundexis a binary statement ('is' or 'is not'), and should therefore be a boolean returning function. Maybe consider changing the name to something likegetSoundexList?
– user2397282
yesterday
@user2397282 Crap, I over-looked it. Thank you. edited! :)
– DirtyBit
yesterday
1
@EricDuminil Done! :)
– DirtyBit
yesterday
1
Oooooo nice answer sir ;) +1
– Matt B.
8 hours ago
@EricDuminil Pardon, but I don't quiet get how
isSoundex returning a boolean would do?– DirtyBit
yesterday
@EricDuminil Pardon, but I don't quiet get how
isSoundex returning a boolean would do?– DirtyBit
yesterday
He means the name
isSoundex is a binary statement ('is' or 'is not'), and should therefore be a boolean returning function. Maybe consider changing the name to something like getSoundexList?– user2397282
yesterday
He means the name
isSoundex is a binary statement ('is' or 'is not'), and should therefore be a boolean returning function. Maybe consider changing the name to something like getSoundexList?– user2397282
yesterday
@user2397282 Crap, I over-looked it. Thank you. edited! :)
– DirtyBit
yesterday
@user2397282 Crap, I over-looked it. Thank you. edited! :)
– DirtyBit
yesterday
1
1
@EricDuminil Done! :)
– DirtyBit
yesterday
@EricDuminil Done! :)
– DirtyBit
yesterday
1
1
Oooooo nice answer sir ;) +1
– Matt B.
8 hours ago
Oooooo nice answer sir ;) +1
– Matt B.
8 hours ago
|
show 2 more comments
Marc Stoch is a new contributor. Be nice, and check out our Code of Conduct.
Marc Stoch is a new contributor. Be nice, and check out our Code of Conduct.
Marc Stoch is a new contributor. Be nice, and check out our Code of Conduct.
Marc Stoch is a new contributor. Be nice, and check out our Code of Conduct.
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.
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%2f55331723%2fpython-how-to-get-the-similar-sounding-words-together%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