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