使用正则表达式从文本中提取嵌入字符串的句子
Extracting the sentence where a string is embedded from a text using Regex
我想从作为字符串变量提供的文本中提取句子,其中嵌入了属于子字符串列表的子字符串。如果我不能提取句子,我会妥协地提取感兴趣的子字符串前后的一段固定长度的字符串。
也许下图会让事情更清楚:
在此图像中,我们看到分配给字符串变量的文本。以黄色突出显示的子字符串是感兴趣的子字符串,在给定文本中出现了 3 次。我想要一个 return 两个突出显示的句子(绿色 + 黄色)的函数。如果我不能提取句子,我会在黄色突出显示的字符串前后提取固定数量的单词(例如 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)
['ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ']
你会提出什么建议?
这听起来像是正则表达式拆分的工作。
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)
注意到您提供的文字不是图片中给出的全文,所以我只能根据您提供的内容进行测试。
我想从作为字符串变量提供的文本中提取句子,其中嵌入了属于子字符串列表的子字符串。如果我不能提取句子,我会妥协地提取感兴趣的子字符串前后的一段固定长度的字符串。
也许下图会让事情更清楚:
在此图像中,我们看到分配给字符串变量的文本。以黄色突出显示的子字符串是感兴趣的子字符串,在给定文本中出现了 3 次。我想要一个 return 两个突出显示的句子(绿色 + 黄色)的函数。如果我不能提取句子,我会在黄色突出显示的字符串前后提取固定数量的单词(例如 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)
['ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ']
你会提出什么建议?
这听起来像是正则表达式拆分的工作。
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)
注意到您提供的文字不是图片中给出的全文,所以我只能根据您提供的内容进行测试。