Сортировать предложения в списке в порядке текста - PullRequest
0 голосов
/ 12 июня 2018

Я извлек несколько предложений из текста на Python.Текст хранится в строке, а предложения в списке.Вот несколько примеров ввода:

text = "This is a text. This is sentence 1. Here is sentence 2. And this is sentence 3."
extracted = ['Here is sentence 2.', 'This is a text']

Теперь я хотел бы упорядочить элементы из списка extracted в соответствии с их хронологией в тексте.Это мой желаемый результат:

ordered_result = ['This is a text', 'Here is sentence 2.']

У кого-нибудь есть идеи, как это сделать?
Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Прямая сортировка по позиции в исходной строке:

ordered_result = sorted(extracted, key=lambda x: text.index(x))
0 голосов
/ 12 июня 2018

Предпочтительный (но немного более сложный) способ сделать это - использовать поиск по регулярному выражению:

import re

expression = re.compile(r'([A-Z][^\.!?]*[\.!?])')
text = "This is a text. This is sentence 1. Here is sentence 2. And this is sentence 3."

# Find all occurences of `expression` in `text`
match = re.findall(expression, text)

print match
# ['This is a text.', 'This is sentence 1.', 'Here is sentence 2.', 'And this is sentence 3.']

Тривиальный (но более простой) способ сделать это - разделить его на ". " итогда у вас есть список предложений в хронологическом порядке.Единственным недостатком этого является потеря пунктуации.

text = "This is a text. This is sentence 1. Here is sentence 2. And this is sentence 3."
splitt = text.split(". ")

print splitt
# splitt = ['This is a text', 'This is sentence 1', 'Here is sentence 2', 'And this is sentence 3.']
0 голосов
/ 12 июня 2018

Одним из способов является использование словаря для построения отображения индекса со сложностью O (n).

Затем используйте sorted с пользовательским ключом, используя этот словарь.

Этот методполагается на наличие списка предложений для начала.Я построил один ниже на случай, если у вас нет этого в наличии.

text = "This is a text. This is sentence 1. Here is sentence 2. And this is sentence 3."

extracted = ['Here is sentence 2.', 'This is a text.']

# create list of sentences
full_list = [i.strip()+'.' for i in filter(None, text.split('.'))]

# map sentences to integer location
d_map = {v: k for k, v in enumerate(full_list)}

# sort by calculated location mapping
extracted_sorted = sorted(extracted, key=d_map.get)

['This is a text.', 'Here is sentence 2.']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...