11import re
2+ from pymorphy2 import MorphAnalyzer
3+ morph = MorphAnalyzer ()
4+
25
36def get_unexplained_abbrev (text ):
47 abbreviations = find_abbreviations (text )
@@ -22,7 +25,9 @@ def find_abbreviations(text: str):
2225
2326 common_abbr = {
2427 'СССР' , 'РФ' , 'США' , 'ВКР' , 'ИТ' , 'ПО' , 'ООО' , 'ЗАО' , 'ОАО' , 'HTML' , 'CSS' ,
25- 'JS' , 'ЛЭТИ' , 'МОЕВМ' , 'ЭВМ' , 'DVD' , 'SSD' , 'PC' , 'HDD' ,
28+ 'JS' , 'ЛЭТИ' , 'МОЕВМ' , 'ЭВМ' , 'ГОСТ' , 'DVD'
29+
30+ 'SSD' , 'PC' , 'HDD' ,
2631 'AX' , 'BX' , 'CX' , 'DX' , 'SI' , 'DI' , 'BP' , 'SP' ,
2732 'AH' , 'AL' , 'BH' , 'BL' , 'CH' , 'CL' , 'DH' , 'DL' ,
2833 'CS' , 'DS' , 'ES' , 'SS' , 'FS' , 'GS' ,
@@ -38,25 +43,38 @@ def find_abbreviations(text: str):
3843 'LAN' , 'WAN' , 'WLAN' , 'VPN' , 'ISP' , 'DNS' , 'DHCP' , 'TCP' , 'UDP' , 'IP' ,
3944 'HTTP' , 'HTTPS' , 'FTP' , 'SSH' , 'SSL' , 'TLS' ,
4045 'API' , 'GUI' , 'CLI' , 'IDE' , 'SDK' , 'SQL' , 'NoSQL' , 'XML' , 'JSON' , 'YAML' ,
41- 'MAC' , 'IBM'
46+ 'MAC' , 'IBM' , 'ГОСТ'
4247 }
43- filtered_abbr = [abbr for abbr in abbreviations if abbr not in common_abbr ]
48+ filtered_abbr = [abbr for abbr in abbreviations if abbr not in common_abbr and morph . parse ( abbr . lower ())[ 0 ]. score != 0 ]
4449
4550 return list (set (filtered_abbr ))
4651
4752
4853def is_abbreviation_explained (abbr : str , text : str ) -> bool :
4954 patterns = [
50- rf'{ abbr } \s*\([^)]+\)' , # АААА (расшифровка)
51- rf'\([^)]+\)\s*{ abbr } ' , # (расшифровка) АААА
52- rf'{ abbr } \s*—\s* [^.,;!?]+' , # АААА — расшифровка
53- rf'{ abbr } \s*-\s*[^.,;!?]+' , # АААА - расшифровка
54- rf'[^.,;!?]+\s*—\ s*{ abbr } ' , # расшифровка — АААА
55- rf'[^.,;!?]+\s*-\s*{ abbr } ' # расшифровка - АААА
55+ rf'{ abbr } \s*\(( [^)]+) \)' , # АААА (расшифровка)
56+ rf'\(( [^)]+) \)\s*{ abbr } ' , # (расшифровка) АААА
57+ rf'{ abbr } \s*[—\-]\s*( [^.,;!?]+)' , # АААА — расшифровка
58+ rf'{ abbr } \s*-\s*( [^.,;!?]+)' , # АААА - расшифровка
59+ rf'( [^.,;!?]+) \s*[—\-]\ s*{ abbr } ' , # расшифровка — АААА
60+ rf'( [^.,;!?]+) \s*-\s*{ abbr } ' # расшифровка - АААА
5661 ]
62+
5763
5864 for pattern in patterns :
59- if re .search (pattern , text , re .IGNORECASE ):
65+ match = re .search (pattern , text , re .IGNORECASE )
66+ if match and correctly_explained (abbr , match .group (1 )):
6067 return True
6168
6269 return False
70+
71+ def correctly_explained (abbr , explan ):
72+ words = explan .split ()
73+
74+ first_letter = ""
75+ for word in words :
76+ first_letter += word [0 ].upper ()
77+
78+ if (first_letter == abbr [len (first_letter )]):
79+ return True
80+ return False
0 commit comments