Python: найти общие фрагменты предложений в списке предложений

Скажем, у меня есть список предложений вроде:

quick brown blah red work word
quick brown too red blah someone
quick gray one two three
quick gray two three four
quick gray johnson week summer
quick gray johnson day week water fall
quick gray wicked stopper fall
quick gray hotel flamer walk
doggie bone
doggie python
doggie python tree flower python
doggie python flower whatever
tree bone stick

Я ищу код для возврата списка общих «родительских» предложений:

quick brown
quick gray
quick gray johnson
doggie bone
doggie python
tree bone stick

Спасибо

Что вы пробовали до сих пор?

Giorgos Myrianthous 13.09.2018 12:15

Я ничего не пробовал - полагаю, мне нужна какая-то рекурсивная функция. Прежде чем я сломаю себе голову, есть ли там какие-нибудь библиотеки Python ...?

zippy242 13.09.2018 12:58

Был ли этот пост отклонен из-за отсутствия ясности?

zippy242 13.09.2018 12:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
363
2

Ответы 2

Ну вот:

def removeNumbers(data):
    result = []
    for sent in data:
        temp = []
        words = sent.split()
        for word in words:
            try:
                number = int(word)
                break
            except:
                temp.append(word)
        result.append(" ".join(temp))
    return result
data = [
    'quick brown 580 650 040 050',
    'quick brown 650 160 150 500',
    'quick gray 075 060 400',
    'quick gray 087 565 600',
    'quick gray johnson 149 135',
    'quick gray johnson 600 650 070 600',
    'quick gray 565 070 250',
    'quick gray 630 550 400',
    'doggie 256',
    'doggie python',
    'doggie python 350 675 106',
    'doggie python 417 560',
    'tree 196 106'
]
data = removeNumbers(data)
print(list(set(data)))

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

>>> result=[]
>>> for i in data:
>>>     r = re.search(r'([a-z]+\s*)+', i)
>>>     if r:
>>>         res = r.group(0).strip()
>>>         if res not in result:
>>>             result.append(res.strip())
>>> print(result)
['quick brown', 'quick gray', 'quick gray johnson', 'doggie', 'doggie python', 'tree']

Другие вопросы по теме