Прописать первое слово предложения в тексте - PullRequest
0 голосов
/ 09 февраля 2019

Я хочу убедиться, что каждое предложение в тексте начинается с заглавной буквы.

Например, «у нас есть хорошие и плохие новости о ваших эмиссарах в наш мир», - сообщил премьер-министру посланник инопланетян.хорошая новость в том, что они на вкус как курица. "должно стать

" У нас есть хорошие новости и плохие новости о ваших эмиссарах в наш мир ", - сообщил внеземный посол премьер-министру. Хорошие новости - они на вкус как курица. "

Я пытался использовать split (), чтобы разбить предложение.Затем я прописал первый символ каждой строки.Я добавил оставшуюся часть строки к заглавной букве.

  text = input("Enter the text: \n")
  lines = text.split('. ') #Split the sentences

  for line in lines:
      a = line[0].capitalize() # capitalize the first word of sentence
      for i in range(1, len(line)):
           a = a + line[i] 
      print(a)

Я хочу получить: «У нас есть хорошие и плохие новости о ваших эмиссарах в нашем мире», - сообщил внеземный посол премьер-министру.Хорошая новость в том, что они на вкус как курица. "

Я получаю" У нас есть хорошие новости и плохие новости о ваших эмиссарах в наш мир ", - сообщил внеземный посол премьер-министру. Хорошие новости - они на вкус как курица.«

Ответы [ 5 ]

0 голосов
/ 09 февраля 2019

Вы можете использовать функцию re.sub , чтобы заменить все символы, следующие за шаблоном . \w, заглавными буквами.

import re

original_sentence = 'we have good news and bad news about your emissaries to our world," the extraterrestrial ambassador informed the Prime Minister. the good news is they tasted like chicken.'

def replacer(match_obj):                   
    return match_obj.group(0).upper()

# Replace the very first characer or any other following a dot and a space by its upper case version.
re.sub(r"(?<=\. )(\w)|^\w", replacer, original_sentence)

>>> 'We have good news and bad news about your emissaries to our world," the extraterrestrial ambassador informed the Prime Minister. The good news is they tasted like chicken.'
0 голосов
/ 09 февраля 2019

Ниже могут обрабатываться несколько типов предложений (оканчивающиеся на «.», «!», «?» И т. Д.), И они пишут с заглавной буквы первое слово каждого из предложений.Так как вы хотите сохранить существующие заглавные буквы, использование функции заглавных букв не сработает (поскольку ни одно предложение не будет начинаться со строчных букв).Вы можете добавить лямбда-функцию в список композиций, чтобы использовать преимущество upper () в первой букве каждого предложения, при этом остальная часть предложения остается неизменной.

import re

original_sentence = 'we have good news and bad news about your emissaries to our world," the extraterrestrial ambassador informed the Prime Minister. the good news is they tasted like chicken.'

val = re.split('([.!?] *)', original_sentence)

new_sentence = ''.join([(lambda x: x[0].upper() + x[1:])(each) if len(each) > 1 else each for each in val])

print(new_sentence)

Понимание списка "new_sentence" такое же, как сказать:

sentence = []

for each in val:
    sentence.append((lambda x: x[0].upper() + x[1:])(each) if len(each) > 1 else each)

print(''.join(sentence))
0 голосов
/ 09 февраля 2019

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

Кроме того, это может привести к тому, что последнее предложение будет иметь двойные периоды, так как в конце оно имеет только ".", а не ". ".Нам нужно удалить период (если он существует) в начале, чтобы убедиться, что мы не получаем двойные периоды.

text = input("Enter the text: \n")
output = ""
if (text[-1] == '.'):
    # remove the last period to avoid double periods in the last sentence
    text = text[:-1] 
lines = text.split('. ') #Split the sentences

for line in lines:
    a = line[0].capitalize() # capitalize the first word of sentence
    for i in range(1, len(line)):
        a = a + line[i]
    a = a + '.' # add the removed period
    output = output + a
print (output)

Мы также можем сделать это решение чище:

text = input("Enter the text: \n")
output = ""

if (text[-1] == '.'):
    # remove the last period to avoid double periods in the last sentence
    text = text[:-1] 
lines = text.split('. ') #Split the sentences

for line in lines:
    a = line[0].capitalize() + line [1:] + '.'
    output = output + a
print (output)

Используя str[1:], вы можете получить копию вашей строки с удалением первого символа.А использование str[:-1] даст вам копию вашей строки с последним удаленным символом.

0 голосов
/ 09 февраля 2019

Этот код должен работать:

text = input("Enter the text: \n")
lines = text.split('. ')  # Split the sentences

for index, line in enumerate(lines):
    lines[index] = line[0].upper() + line[1:]
print(". ".join(lines))

Ошибка в вашем коде состоит в том, что str.split(chars) удаляет разделитель разделения char, и поэтому период удаляется.

Извините, что не предоставил подробного описания, так как я не могу придумать, что сказать.Пожалуйста, не стесняйтесь спрашивать в комментариях.

РЕДАКТИРОВАТЬ: Позвольте мне попытаться объяснить, что я сделал.

  • Строки 1-2: Принимает ввод и разбивает на список по '. '.На выборке это дает: ['"We have good news and bad news about your emissaries to our world," the extraterrestrial ambassador informed the Prime Minister', 'the good news is they tasted like chicken.'].Обратите внимание, что точка ушла из первого предложения, где она была разбита.
  • Строка 4: enumerate является генератором и выполняет итерацию через итератор, возвращая индекс и элемент каждого элемента в итераторе в tuple.
  • Строка 5: место line в lines заменяется заглавной буквой первого символа плюс остальная часть строки.
  • Строка 6: печатается сообщение.". ".join(lines) в основном полностью изменяет то, что вы делали со сплитом.str.join(l) берет итератор строк l и склеивает их вместе с str между всеми элементами.Без этого вы бы пропустили свои месячные.
0 голосов
/ 09 февраля 2019

split разбивает строку И ни одна из новых строк не содержит разделитель - или строку / символ, который вы разбили.

измените ваш код следующим образом:

text = input("Enter the text: \n")
lines = text.split('. ') #Split the sentences

final_text = ". ".join([line[0].upper()+line[1:] for line in lines])
print(final_text)
...