Определить, упорядочен ли список слов в строке в Python?

avatar
hockeybro
7 апреля 2018 в 23:00
91
1
0

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

Например, предположим, что у меня есть это предложение: The boy was walking his big dog down the street. И у меня есть список слов [boy, was, his, dog, street, the, down]. Понятно, что в этом случае boy, was и dog, street, the down появляются в предложении последовательно. Таким образом, моя функция должна возвращать эти слова в порядке их появления, то есть: boy was и dog down the street.

Кто-нибудь знает, как это сделать эффективным способом?

Спасибо

Редактировать из комментария: Вам просто нужно вернуть наборы слов, которые появляются в строке по порядку, а также находятся в списке. Конечно, они должны быть настолько длинными, насколько это возможно. Вот почему в примере я вернул dog down the street, так как все эти слова есть в моем списке, а также появляются в строке рядом друг с другом.

Источник
user2357112 supports Monica
7 апреля 2018 в 23:08
0

Ваша постановка проблемы недоопределена; например, бывают случаи, когда неясно, какое из нескольких решений-кандидатов должно быть возвращено. Нам нужна точная спецификация проблемы.

hockeybro
7 апреля 2018 в 23:10
0

@user2357112 user2357112 Вам просто нужно вернуть наборы слов, которые появляются в строке по порядку, а также находятся в списке. Конечно, они должны быть настолько длинными, насколько это возможно. Вот почему в примере я вернул dog down the street, так как все эти слова есть в моем списке, а также появляются рядом друг с другом в строке.

user2357112 supports Monica
7 апреля 2018 в 23:16
0

Это все еще ужасно расплывчато. Например, если предложение звучит так: «Я люблю песни о любви». и список ["songs", "love", "I"], мы получаем "я люблю"? "Любовные песни"? Что-то другое? И сколько перестановок нам разрешено выполнять при сопоставлении слов? Если предложение «Я съел яблоко». и список равен ["ate", "potatoes", "football", "apple", "an", "orangutan", "I"], сможем ли мы вывести I ate an apple, даже если между этими словами в списке есть куча других слов?

hockeybro
7 апреля 2018 в 23:19
0

Я не слишком придирчив к повторяющимся словам, так что подойдет и то, и другое. Во втором случае да, остальные слова можно игнорировать.

Ответы (1)

avatar
hockeybro
8 апреля 2018 в 01:15
-1

Я понял, как это сделать:

def order(sentence, wordList):
    s_list = sentence(' .', '').replace('. ', '').replace('.', '').split(' ')

    returnSentence = ""
    returnSentenceLen = 0
    previousPos = 0
    currentSentence = []
    # iterate through all the words in the matched list and find the ones that are together
    for i, word in enumerate(s_list):
        # this word is in our list of words
        if word in wordList:
            currentSentence.append(word)
            if i == 0:
                previousPos = 0
            else:
                if (i - previousPos) == 1:
                    # this should now be our new sentence of continuous words
                    if (len(currentSentence) > returnSentenceLen):
                        returnSentence = ' '.join(word for word in currentSentence)
                        returnSentenceLen = len(currentSentence)
                else:
                    currentSentence = []
                    currentSentence.append(word)
                previousPos = i
    return returnSentence

print(order('The boy was walking his dog down the street.', ['boy', 'was', 'dog', 'street', 'the', 'down']))