Возможно, в awk все проще, но как я могу сказать это на Python? - PullRequest
1 голос
/ 09 сентября 2010

у меня есть:

Рутч для Руттермана, набрасывающего свою икру

это фраза из Finnegans Wake. Эпическая книга загадок полна подобных лейтмотивов, таких как «сними эту белую шляпу» и «чаевые», которые все видоизменяются в похожие звучащие слова в зависимости от того, где ты находишься в самой книге. Все, что я хочу, - это способ найти очевидные вхождения этого конкретного лейтмотива, IE

[word1] для [word2] [word-part1], его [word3]

Ответы [ 3 ]

4 голосов
/ 09 сентября 2010

Вы можете сделать это с помощью регулярных выражений в Python:

import re
pattern = re.compile(r'(?P<word>.*) is for (?P=word) (?P=word)ing his (?P=word)')
words = pattern.findall(text)

Это не будет соответствовать вашему примеру, но оно будет соответствовать [word] is for [word] [word-part]ing his [word]. Добавьте приправу по вкусу. Вы можете найти более подробную информацию в модуле re docs .

2 голосов
/ 09 сентября 2010
import re
# read the book into a variable 'text'
matches = re.findall(r'\w+ is for \w+ \w+ing his \w+', text)
0 голосов
/ 20 февраля 2012

Это решение для вашего примера, а не для вашего описания: аллитеративна только первая буква:

pairs = re.findall(r'((.)\w* is for \2\w* \2\w*ing his \2\w*)', fin, re.IGNORECASE)
matches = [ p[0] for p in pairs ]

Чтобы найти случаи, соответствующие вашему описанию , просто замените (.)с (\ w +) и удалите все экземпляры \ w *.

...