В Python, как разделить строку после точки, не влияя на десятичные числа? - PullRequest
0 голосов
/ 25 января 2019

Предположим, у меня есть строка:

string1 = 'Pernod has reduced the debt it took on to fund the Seagram purchase to just 1.8bn euros, while Allied has improved the performance of its fast-food chains.Shares in UK drinks and food firm Allied Domecq have risen on speculation that it could be the target of a takeover by France's Pernod Ricard.'

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

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Один из способов сделать это - защитить точки, на которые вы не хотите, чтобы ваш текст разбивался, сначала заменив их чем-то другим, а затем снова заменив заполнитель снова после разделения:

import re
# replace dots that have numbers around them with "[PROTECTED_DOT]"
string1_protected = re.sub(r"(\d)\.(\d)", r"\1[PROTECTED_DOT]\2", string1)  
# now split (and remove empty lines)
lines_protected = [line + "." for line in string1_protected.split(".") if line]   
# now re-replace all "[PROTECTED_DOT]"s
lines = [line.replace("[PROTECTED_DOT]", ".") for line in lines_protected]

Результат:

In [1]: lines
Out[1]: ['Pernod has reduced the debt it took on to fund the Seagram purchase to just 1.8bn euros, while Allied has improved the performance of its fast-food chains.',
 "Shares in UK drinks and food firm Allied Domecq have risen on speculation that it could be the target of a takeover by France's Pernod Ricard."]
0 голосов
/ 25 января 2019

Это может быть выполнено с использованием регулярных выражений, re.split () , при условии, что никакое декларативное предложение не заканчивается числом и сопровождается предложением, начинающимся с цифры, без пробела между предложениями (например, , «Это мое предложение, оканчивающееся на 1.2, является началом моего следующего предложения.»; Первое предложение оканчивается на «1», а следующее начинается на «2»).

Как говорится, split () сама по себе не сможет выполнить желаемое действие. Стоит также отметить, что, поскольку апострофы встречаются чаще, чем кавычки, разделение строки с помощью кавычек, вероятно, будет лучше. В нынешнем виде самый конец вашего предложения, "Pernod Richard. S", не считается частью строки и поэтому считается неверным синтаксисом.

string1 = "Pernod has reduced the debt it took on to fund the Seagram purchase to just 1.8bn euros, while Allied has improved the performance of its fast-food chains.Shares in UK drinks and food firm Allied Domecq have risen on speculation that it could be the target of a takeover by France's Pernod Ricard."

sentences = re.split('[^0-9]["."][^0-9]', string1)
...