Ответ 1
Во-первых, вам нужно использовать правильный способ получить похожие звучащие слова, то есть сходство строк, я бы предложил:
Используя jellyfish
:
from jellyfish import soundex
print(soundex("two"))
print(soundex("to"))
ВЫХОД:
T000
T000
Теперь, возможно, создайте функцию, которая будет обрабатывать список, а затем отсортировать его, чтобы получить их:
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))])
ВЫХОД:
['D263', 'D263', 'F630', 'F630', 'T000', 'T000']
РЕДАКТИРОВАТЬ:
Другой способ может быть:
Использование fuzzy
:
import fuzzy
soundex = fuzzy.Soundex(4)
print(soundex("to"))
print(soundex("two"))
ВЫХОД:
T000
T000
РЕДАКТИРОВАТЬ 2:
Если вы хотите, чтобы они были grouped
, вы можете использовать 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)])
ВЫХОД:
[['D263', 'D263'], ['F630', 'F630'], ['T000', 'T000']]
РЕДАКТИРОВАТЬ 3:
Это те, для @Eric Duminil, пусть говорят, что вы хотите, оба names
и их соответствующие val
:
Используя dict
вместе с 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])])
ВЫХОД:
[[('dessert', 'D263'), ('desert', 'D263')], [('fourth', 'F630'), ('forth', 'F630')], [('two', 'T000'), ('to', 'T000')]]
РЕДАКТИРОВАТЬ 4 (для OP):
Саундэкс:
Soundex - это система, в которой значения присваиваются именам таким образом, что одинаково звучащие имена получают одинаковое значение. Эти значения известны как кодировки soundex. Приложение поиска, основанное на soundex, не будет искать имя напрямую, а будет искать кодировку soundex. Таким образом, он получит все имена, которые звучат как искомое имя.