Извлечение предложения, в котором строка вставлена ​​из текста с использованием Regex - PullRequest
1 голос
/ 27 апреля 2020

Я хочу извлечь из текста - который предоставляется в виде строковой переменной - предложения, в которые вложена подстрока, входящая в список подстрок. Если я не могу извлечь предложение, я бы пошел на компромисс с извлечением диапазона строк фиксированной длины до и после интересующей подстроки.

Возможно, следующее изображение прояснит ситуацию:

enter image description here

На этом рисунке мы видим текст, который присвоен строковой переменной. Подстрока, выделенная желтым цветом, является интересующей подстрокой и появляется в данном тексте 3 раза. Я хотел бы функцию, которая бы возвращала два выделенных предложения (зеленый + желтый). Если я не могу извлечь предложения, я бы пошел на компромисс с извлечением фиксированного количества слов (например, 20 слов) до и после выделенной желтым цветом строки.

Подстрока будет указана в списке интересующих ее подстрок.

Я нашел способ извлечь точную подстроку, но не диапазон текста до и после нее, как описано выше.

Например,

text = 'Την 25/07/2019 καταχωρίσθηκε στο Γενικό Εµπορικό Μητρώο (Γ.Ε.ΜΗ.) µε Κωδικό Αριθµό Καταχώρισης 1801727 η µε αριθµό 78002/ 25-07-2019 απόφασή µας (Α∆Α:  ΩΙΑ7465ΧΙ8-ΤΨΦ), µε την οποία εγκρίθηκε  η  τροποποίηση εν συνόλω του καταστατικού της ανώνυµης εταιρείας µε την επωνυµία  «ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ» και αριθµό Γ.Ε.ΜΗ 14492035000 (πρώην Αρ.ΜΑΕ 17520/06/B/88/18) σύµφωνα µε την  από 29.5.2019 απόφαση της Τακτικής Γενικής Συνέλευσης των µετόχων της, στο πλαίσιο εναρµόνισης µε το ν. 4548/2018 «Αναµόρφωση ∆ικαίου Ανωνύµων Εταιρειών», όπως ισχύει. Το εν λόγω καταστατικό µε ηµεροµηνία 29/5/2019 αποτελείται από 33 άρθρα, ως αυτά διαλαµβάνονται στα κεφάλαια Ι έως ΙΧ αυτού.Ο ΠΡΟΪΣΤΑΜΕΝΟΣ ΤΗΣ ∆ΙEΥΘΥΝΣΗΣ                                                                                                     ΙΩΑΝΝΗΣ ΑΡΕΤΑΙΟΣ      1 ΝΕΟ ΚΕΙΜΕΝΟ ΤΟΥ ΚΑΤΑΣΤΑΤΙΚΟΥ ΤΗΣ ΑΝΩΝΥΜΗΣ ΕΤΑΙΡΙΑΣ «ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ» με αριθμό ΜΑΕ: 17520/06/Β/88/18 και αριθμό ΓΕΜΗ: 14492035000 όπως προέκυψε ύστερα από την εναρμόνιση με τις διατάξεις των άρθρων του Ν. 4548/2018 με απόφαση της από 29.05.2019 Γενικής Συνέλευσης των μετόχων της  «ΚΕΦΑΛΑΙΟ I ΣΥΣΤΑΣΗ - ΕΠΩΝΥΜΙΑ - ΣΚΟΠΟΣ - ΕΔΡΑ - ΔΙΑΡΚΕΙΑ  Άρθρο 1 Σύσταση - Επωνυμία Συνίσταται Ανώνυμος Εταιρία με την επωνυμία “ΑΛΟYΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟYΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ‘’ και διακριτικό τίτλο ‘’ΑΛΟΥΜΥΛ Α.Ε.’’. Σε περίπτωση συναλλαγής της Εταιρίας με πρόσωπα της αλλοδαπής, θα χρησιμοποιείται η αγγλόφωνη εκφορά της εταιρικής επωνυμίας, ήτοι ‘’ΑLUMΙL ΑLUΜΙNΙUΜ INDUSTRY SA”.»  Άρθρο 2 Σκοπός «Σκοπός της Εταιρίας είναι η ανέγερση και εκμετάλλευση εργοστασίου παραγωγής επιμήκων προϊόντων αλουμινίου με τη μέθοδο διελάσεως και επιφανειακής επεξεργασίας αυτών. Η έρευνα, ο σχεδιασμός, η μελέτη και η εμπορία εξοπλισμού για παραγωγή ηλεκτρικής ενέργειας από ανανεώσιμες πηγές ενέργειας και ειδικότερα αλλά όχι περιοριστικά από ηλιακή ενέργεια. Η εμπορία των προϊόντων αυτών, καθώς και η εμπορία παρεμφερών προϊόντων'

import regex
list_of_strings =['ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ', 
                  'ΑΝΕΚ ΤΟΥΡΙΣΤΙΚΗ - ΞΕΝΟΔΟΧΕΙΑΚΗ - ΣΥΜΜΕΤΟΧΩΝ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ', 
 'ATTICA BANK ΑΝΩΝΥΜΗ ΤΡΑΠΕΖΙΚΗ ΕΤΑΙΡΕΙΑ']
regex.findall(r"\L<words>", text, words= list_of_strings)
['ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ']

Что бы вы предложили?

1 Ответ

0 голосов
/ 27 апреля 2020

Это звучит как работа по разделению регулярных выражений.

from re import split

split('abc\d{3}','sldkfjsdl abc678 sldkfjsdlk thing')

РЕДАКТИРОВАТЬ:

Написал обобщенный сплиттер.

from re import split

def super_split(regex_list,string): 
    answer = [string] 
    for r in regex_list: 
        answer = sum([sum([[s,r] for s in split(r,a)],[])[:-1] for a in answer],[]) 
    return answer 

s = super_split(list_of_strings,text)

Заметил, что предоставленный вами текст не является полным текстом, приведенным на картинке, поэтому я мог проверить это только на том, что вы дали.

...