Вам нужно определить критерии, чтобы найти то, что вы называете общей частью.Это может быть первое предложение, например «Я - Гарри».
Для разбора предложения вы можете использовать RegEx, например:
import re
# match a sentence finishing by a dot
re_sentence = r'((?:(?!\.|$).)+\.?)\s*'
find_all_sentences = re.compile(re_sentence, flags=re.DOTALL).findall
Здесь find_all_sentences - это функция.Это результат функции re.compile
findall .Это помощник для поиска всех предложений в строке.
Как только эта функция определена, вы можете использовать ее для разбора строк и извлечения первого предложения, которое считается общей частью для проверки.
Каждый раз, когда вы подходите к предложению, вы можете сохранить его в dict (здесь я использовал OrdererdDict , чтобы сохранить порядок строк).Конечно, если вы найдете более длинную строку, вы можете заменить существующую строку следующей:
import collections
lines = [
"I am Harry. I like to eat apple",
"I am Harry.",
"I am Garry.",
"I am Garry. I am Happy."]
longuest = collections.OrderedDict()
for line in lines:
sentences = find_all_sentences(line)
first = sentences[0]
if first in longuest:
longuest[first] = max([longuest[first], line], key=lambda l: len(l))
else:
longuest[first] = line
Наконец, вы можете сериализовать результат в файл.Или напечатайте его:
for line in longuest.values():
print(line)
Чтобы написать файл, используйте с оператором:
import io
out_path = 'path/to/sentences.txt'
with io.open(out_path, mode='w', encoding='utf-8') as f:
for line in longuest.values():
print(line, file=f)