2015-02-18 6 views
0

Мне было интересно, как бы я попытался понять, есть ли у меня слово в английском словаре. У меня есть словарь из файла слова, который я скачал, и слово, которое я хочу увидеть, если оно близко к любому слову в английском словаре. Таким образом, у меня есть слово, которое меняет, например, если слово - это тарабарщина, вроде «EDBGZH» и пары = {'ED': 'TE', 'BG': 'ST'} Я получу newWord = 'TESTZH' и слово в словаре, которое будет соответствовать, будет TESTER. Поэтому мне интересно, как я могу написать регулярное выражение, чтобы получить совпадение.Python 3 - Регулярные выражения - Соответствующие слова в словаре

for word in englishDictionary: 
    re.match('.....', word) #Want it to print the words that it matches with. Sorry Im new to regular expressions and they're very confusing to me 

Я хочу, чтобы матч, чтобы быть с буквами, которые изменяются, и те, которые не были изменены, чтобы быть теми, которые получают совпадающая с остальной частью слова.

+0

TESTZH не соответствует TESTER. Вы должны быть немного более конкретными в бит соответствия: хотите ли вы «ближайшее соответствие» (возможно, на расстоянии редактирования) или совпадение префикса или совпадение с переведенными символами? – nneonneo

+0

О, извините, я хочу совпадение на частях, которые были изменены словарем с именами пар. Так как первые четыре буквы слова изменены, как и TESTZH, тогда часть ZH не изменяется, но поскольку первые четыре буквы изменены, то она соответствует TESTER, потому что это близко. – Torched90

+0

Просто преобразуйте неизменяемые символы в символ '.' (символ регулярного выражения для« любого символа »). Это дает вам регулярное выражение, которое вы хотите. – nneonneo

ответ

0

Вы можете сделать Somthing как это,

>>> s = 'EDBGZH' 
>>> pairs = {'ED':'TE', 'BG':'ST'} 
>>> for i in pairs: 
     s = s.replace(i, pairs[i]) 


>>> print(s) 
TESTZH 
0

Если у вас есть Питон dictionary, я предполагаю, что ваши ключи уникальны. Тем не менее, у вас может быть слово вроде EDEDBGZH, поэтому мы должны заменить все вхождения в исходное слово или нет?

В любом случае, я полагаю, что ответ @ AvinashRaj достаточно хорош, но я немного расширю его.

Присвоим слово 'replace', TESTZH. Если вы хотите найти ближайший матч в словаре, вы можете выполнить поиск с помощью некоторых функций расстояния по слову. Например, Levenshtein's distance. Он устанавливает некоторые критерии для слов , как и другие. Так, например, слова winter и linter будут ближе друг к другу, чем winter, и splinter, будучи намного ближе, чем winter и python.

Вот код функции расстояния Левенштейна в:

def lev(s1, s2, l1 = None, l2 = None): 
    if l1 == None: 
    l1 = len(s1) 

    if l2 == None: 
    l2 = len(s2) 

    if l1 == 0: 
    return l2 
    elif l2 == 0: 
    return l1 

    if (s1[l1 - 1] == s2[l2 - 1]): 
    cost = 0 
    else: 
    cost = 1 

    return min([ 
    lev(s1, s2, l1 - 1, l2) + 1, 
    lev(s1, s2, l1, l2 - 1) + 1, 
    lev(s1, s2, l1 - 1, l2 - 1) + cost 
    ]) 

И некоторые образцы:

print("lev(winter, linter) = %d" % lev('winter', 'linter')) 
print("lev(winter, splinter) = %d" % lev('winter', 'splinter')) 
print("lev(winter, python) = %d" % lev('winter', 'python')) 

>>> lev(winter, linter) = 1 
>>> lev(winter, splinter) = 3 
>>> lev(winter, python) = 6 

Вот код для поиска в словаре, используя функцию расстояния Левенштейна в:

dictionary = { 'winter': 'zima', 'spring': 'wiosna', 'summer': 'lato', 'autumn': 'jesień', 'Poland': 'Polska' } 
search_for = 'wintr' 
similars = { k: dictionary[k] for k in filter(lambda x: lev(x, search_for) <= 3, dictionary.keys()) } 

И образец пробега:

>>> words similar to `wintr`: {'winter': 'zima'} 

Надеюсь, это поможет!

Смежные вопросы