.split дает пустые элементы в списке при объединении методов .replace - PullRequest
0 голосов
/ 16 мая 2019

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

Я объединяю .replace() методы абзаца, чтобы получить отдельные предложенияи когда я .split() на "."В конце я получаю дополнительный пустой строковый элемент, в котором мое предложение считается 16 вместо 15 (правильный результат).

Спасибо за вашу помощь !!

Я нашел несколько ссылок, которые описывают обычные проблемы с пробелами split, и опции новой строки split, но это тоже не помогаеткак это не новая линия выпуска?

def get_average_sentence_length(text):
    sentences_in_text = []
    text = text.replace("?", ".").replace("!", ".").replace(",", " ").split(".")
    sentences_in_text = text
    return sentences_in_text

print(get_average_sentence_length(TEXT))

Вы видите последний элемент ''.Для краткости я обрезал оставшуюся часть абзаца.

['...,' Я не могу дождаться, чтобы насладиться игрой на совершенно новой сойке ',' Это, безусловно, великое время для изучения жизни илюбовь ',' ']

Ответы [ 3 ]

1 голос
/ 16 мая 2019

split обрабатывает конечный разделитель как предшествующее пустому полю:

>>> text = "foo.bar."
>>> text.split(".")
['foo', 'bar', '']

Если вы хотите избежать этого, удалите конечный разделитель:

>>> text.rstrip(".").split(".")
['foo', 'bar']
1 голос
/ 16 мая 2019

Вы можете отфильтровать перед возвратом результата.Как это

def get_average_sentence_length(text):
    sentences_in_text = text.replace("?", ".").replace("!", ".").replace(",", " ").split(".")
    return list(filter(None, sentences_in_text))

print(get_average_sentence_length('some? text. hello!'))
1 голос
/ 16 мая 2019
sentences_in_text = text

Замените это на:

sentences_in_text = [t for t in text if t]

Так что вы отфильтруете эти "" пустые строки

...