разделить текст по любому первому элементу из списка - PullRequest
0 голосов
/ 15 сентября 2018

Я ищу элегантный способ найти первое совпадение из списка предлогов в тексте, чтобы я мог разобрать текст типа «Добавить обувь за окном», результат должен быть [«обувь», «позади»окно "]

Работает, если в тексте нет нескольких предлогов

мои ключи за окном до : мои ключи после : за окном

мои ключи под столом на кухне до : мои ключи под столом после : на кухне

мои ключи в коробке под столом на кухне до : мои ключи после : в коробке под столом на кухне

Вво втором примере результат должен быть [«мои ключи», «под столом на кухне»]

Какой элегантный способ найти первое совпадение любого из слов в списке?

def get_text_after_preposition_of_place(text):
    """Returns the texts before[0] and after[1] <preposition of place>"""

prepositions_of_place = ["in front of","behind","in","on","under","near","next to","between","below","above","close to","beside"]
    textres = ["",""]

    for key in prepositions_of_place:
        if textres[0] == "":
            if key in text:
                textres[0] = text.split(key, 1)[0].strip()
                textres[1] = key + " " + text.split(key, 1)[1].strip()
    return textres

1 Ответ

0 голосов
/ 15 сентября 2018

Вы можете сделать это, используя re.split :

import re

def get_text_after_preposition_of_place(text):
    """Returns the texts before[0] and after[1] <preposition of place>"""

    prepositions_of_place = ["in front of","behind","in","on","under","near","next to","between","below","above","close to","beside"]
     preps_re = re.compile(r'\b(' + '|'.join(prepositions_of_place) + r')\b')

    split = preps_re.split(text, maxsplit=1)
    return split[0], split[1]+split[2]

print(get_text_after_preposition_of_place('The cat in the box on the table'))  
# ('The cat ', 'in the box on the table')

Сначала мы создаем регулярное выражение, которое будет выглядеть как (in|on|under). Обратите внимание на круглые скобки: они позволят нам захватить строки, на которые мы разбили строку, чтобы сохранить их в выводе.

Затем мы разделяем, допуская самое большее 1 разбиение, и объединяем последние две части: предлог и остальную часть строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...