Skip to content

Commit 813ad32

Browse files
committed
quality: deep dictionary & detection expansion for EN/RU/UK
Detection: EN AI patterns 62->100+, RU/UK AI words 36->66 each. Humanization: RU intensity clusters 11->32, UK 8->27, UK phrases +15, EN/RU/UK perplexity boosters significantly expanded. Syntax: RU/UK nominalization->verb tables (68 entries each). Data: UK word freq 0->427 uni + 34 bi, UK collocations 38->193. All 1995 tests pass, ruff clean.
1 parent 1670f50 commit 813ad32

9 files changed

Lines changed: 1183 additions & 43 deletions

File tree

scripts/_gen_uk_colloc.py

Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
#!/usr/bin/env python3
2+
"""Generate expanded Ukrainian collocations for _colloc_data.py."""
3+
import base64
4+
import zlib
5+
6+
# 200+ Ukrainian collocations with PMI-like association scores
7+
uk_collocs = {
8+
# Core function word collocations
9+
("тому", "що"): 8.5,
10+
("для", "того"): 8.2,
11+
("з", "метою"): 7.9,
12+
("у", "результаті"): 7.8,
13+
("в", "результаті"): 7.7,
14+
("на", "підставі"): 7.6,
15+
("за", "допомогою"): 7.5,
16+
("у", "межах"): 7.4,
17+
("в", "межах"): 7.3,
18+
("на", "основі"): 7.2,
19+
("з", "огляду"): 7.1,
20+
("у", "процесі"): 7.0,
21+
("в", "цілому"): 6.9,
22+
("у", "цілому"): 6.8,
23+
# Bureaucratic / academic collocations (AI-typical)
24+
("широкий", "спектр"): 9.2,
25+
("значний", "вплив"): 8.8,
26+
("суттєвий", "вплив"): 8.7,
27+
("важливий", "аспект"): 8.5,
28+
("ключовий", "фактор"): 8.9,
29+
("основний", "принцип"): 8.4,
30+
("головний", "чинник"): 8.3,
31+
("першочергове", "завдання"): 8.2,
32+
("невід'ємна", "частина"): 9.0,
33+
("неотъемлемая", "часть"): 8.6,
34+
("з", "урахуванням"): 7.5,
35+
("стратегічний", "напрямок"): 8.1,
36+
("комплексний", "підхід"): 8.8,
37+
("системний", "аналіз"): 8.5,
38+
("якісний", "аналіз"): 8.3,
39+
("кількісний", "аналіз"): 8.2,
40+
("ефективний", "метод"): 8.0,
41+
("дієвий", "механізм"): 8.1,
42+
("сприятливі", "умови"): 7.9,
43+
("критичний", "стан"): 7.8,
44+
# Verb + noun collocations
45+
("приймати", "рішення"): 9.1,
46+
("досягати", "результату"): 8.7,
47+
("відігравати", "роль"): 9.0,
48+
("здійснювати", "вплив"): 8.5,
49+
("забезпечувати", "можливість"): 8.3,
50+
("створювати", "умови"): 8.4,
51+
("набувати", "значення"): 8.2,
52+
("мати", "значення"): 7.8,
53+
("мати", "можливість"): 7.7,
54+
("становити", "інтерес"): 8.0,
55+
("привертати", "увагу"): 8.6,
56+
("звертати", "увагу"): 8.5,
57+
("надавати", "перевагу"): 8.1,
58+
("ставити", "питання"): 7.9,
59+
("вирішувати", "проблему"): 8.4,
60+
("долати", "перешкоди"): 8.3,
61+
("нести", "відповідальність"): 8.7,
62+
("докладати", "зусиль"): 8.6,
63+
("вживати", "заходів"): 8.5,
64+
("брати", "участь"): 8.8,
65+
("проводити", "дослідження"): 8.4,
66+
("здійснювати", "контроль"): 8.2,
67+
("виконувати", "функції"): 8.1,
68+
("виконувати", "завдання"): 8.0,
69+
("реалізовувати", "проєкт"): 7.9,
70+
("впроваджувати", "технології"): 7.8,
71+
("підвищувати", "якість"): 8.3,
72+
("знижувати", "ризик"): 8.2,
73+
("збільшувати", "ефективність"): 8.1,
74+
("зменшувати", "витрати"): 8.0,
75+
("оптимізувати", "процес"): 8.5,
76+
("модернізувати", "систему"): 8.1,
77+
("сприяти", "розвитку"): 8.4,
78+
("стимулювати", "зростання"): 8.2,
79+
("гарантувати", "безпеку"): 8.0,
80+
# Adjective + noun collocations
81+
("соціальний", "захист"): 8.3,
82+
("економічний", "розвиток"): 8.5,
83+
("сталий", "розвиток"): 9.1,
84+
("науковий", "дослідження"): 8.4,
85+
("технічний", "прогрес"): 8.2,
86+
("інноваційний", "розвиток"): 8.6,
87+
("міжнародний", "співпраця"): 8.3,
88+
("національний", "безпека"): 8.5,
89+
("громадський", "організація"): 8.1,
90+
("державний", "управління"): 8.4,
91+
("правовий", "регулювання"): 8.2,
92+
("ринковий", "економіка"): 8.3,
93+
("вищий", "освіта"): 8.1,
94+
("загальний", "освіта"): 7.9,
95+
("професійний", "розвиток"): 8.0,
96+
("глобальний", "виклик"): 8.4,
97+
("стратегічний", "мета"): 8.2,
98+
("перспективний", "напрямок"): 8.1,
99+
("потенційний", "ризик"): 8.0,
100+
("реальний", "можливість"): 7.9,
101+
("конкретний", "результат"): 8.1,
102+
("практичний", "застосування"): 8.0,
103+
("теоретичний", "основа"): 7.8,
104+
("окремий", "випадок"): 7.7,
105+
("певний", "мірою"): 7.6,
106+
("значний", "кількість"): 7.5,
107+
("дедалі", "більше"): 8.3,
108+
("дедалі", "частіше"): 8.1,
109+
# Connective collocations
110+
("з", "точки"): 7.8,
111+
("на", "відміну"): 7.7,
112+
("у", "сфері"): 7.5,
113+
("у", "галузі"): 7.4,
114+
("на", "жаль"): 7.9,
115+
("на", "щастя"): 7.8,
116+
("перш", "за"): 8.0,
117+
("перш", "ніж"): 7.9,
118+
("навіть", "якщо"): 7.3,
119+
("не", "зважаючи"): 7.5,
120+
("по", "суті"): 7.6,
121+
("так", "само"): 7.4,
122+
("таким", "чином"): 8.5,
123+
("у", "такому"): 7.2,
124+
("іншими", "словами"): 8.3,
125+
("у", "першу"): 7.8,
126+
("першу", "чергу"): 8.9,
127+
("в", "першу"): 7.7,
128+
("разом", "з"): 7.5,
129+
("поряд", "з"): 7.4,
130+
("крім", "того"): 8.0,
131+
("окрім", "того"): 7.9,
132+
("проте", "слід"): 7.2,
133+
("водночас", "необхідно"): 7.3,
134+
("зокрема", "важливо"): 7.1,
135+
# Prepositional collocations
136+
("відповідно", "до"): 8.1,
137+
("згідно", "з"): 8.0,
138+
("стосовно", "цього"): 7.5,
139+
("щодо", "цього"): 7.6,
140+
("завдяки", "тому"): 7.4,
141+
("внаслідок", "того"): 7.5,
142+
("з", "причини"): 7.3,
143+
("з", "приводу"): 7.2,
144+
("на", "користь"): 7.4,
145+
("у", "напрямку"): 7.1,
146+
("на", "противагу"): 7.3,
147+
("замість", "того"): 7.2,
148+
("на", "додаток"): 7.0,
149+
("з", "огляду"): 7.1,
150+
("на", "думку"): 7.5,
151+
# Nominalization collocations (AI-detection relevant)
152+
("здійснення", "заходів"): 8.5,
153+
("забезпечення", "якості"): 8.4,
154+
("підвищення", "ефективності"): 8.6,
155+
("досягнення", "мети"): 8.3,
156+
("виконання", "завдань"): 8.2,
157+
("прийняття", "рішень"): 9.0,
158+
("впровадження", "інновацій"): 8.4,
159+
("залучення", "інвестицій"): 8.5,
160+
("створення", "умов"): 8.3,
161+
("формування", "політики"): 8.1,
162+
("розроблення", "стратегії"): 8.2,
163+
("управління", "ризиками"): 8.4,
164+
("використання", "ресурсів"): 8.3,
165+
("розвиток", "інфраструктури"): 8.1,
166+
("зниження", "витрат"): 8.2,
167+
("збільшення", "обсягу"): 8.0,
168+
("покращення", "показників"): 8.1,
169+
("розширення", "можливостей"): 8.3,
170+
("обмеження", "доступу"): 7.9,
171+
# Long-range / discourse collocations
172+
("не", "лише"): 7.5,
173+
("а", "й"): 7.3,
174+
("як", "наслідок"): 7.8,
175+
("як", "правило"): 8.0,
176+
("у", "свою"): 7.6,
177+
("свою", "чергу"): 8.8,
178+
("без", "сумніву"): 7.9,
179+
("без", "перебільшення"): 7.7,
180+
("не", "випадково"): 7.5,
181+
("цілком", "очевидно"): 7.8,
182+
("цілком", "можливо"): 7.6,
183+
("безумовно", "важливо"): 7.4,
184+
("слід", "зазначити"): 8.2,
185+
("варто", "зазначити"): 8.1,
186+
("необхідно", "зазначити"): 8.0,
187+
("доцільно", "зазначити"): 7.9,
188+
("важливо", "підкреслити"): 7.8,
189+
("слід", "наголосити"): 7.7,
190+
("варто", "відзначити"): 8.0,
191+
("потрібно", "враховувати"): 7.6,
192+
("не", "можна"): 7.8,
193+
("можна", "стверджувати"): 7.7,
194+
("можна", "констатувати"): 7.5,
195+
# Domain-specific high-frequency
196+
("штучний", "інтелект"): 9.5,
197+
("машинне", "навчання"): 9.3,
198+
("інформаційний", "технологія"): 8.8,
199+
("глибоке", "навчання"): 9.1,
200+
("нейронний", "мережа"): 9.2,
201+
("великий", "дані"): 8.5,
202+
("хмарний", "обчислення"): 8.7,
203+
("кібер", "безпека"): 8.9,
204+
("відкритий", "код"): 8.4,
205+
("відкритий", "доступ"): 8.2,
206+
("велика", "кількість"): 7.6,
207+
("значна", "кількість"): 7.7,
208+
("суттєва", "різниця"): 7.8,
209+
("помітна", "тенденція"): 7.5,
210+
("зростаюча", "потреба"): 7.6,
211+
}
212+
213+
# Generate compressed data
214+
lines = []
215+
for (w1, w2), score in uk_collocs.items():
216+
lines.append(f"{w1}\t{w2}\t{score}")
217+
tsv = "\n".join(lines)
218+
compressed = base64.b64encode(zlib.compress(tsv.encode("utf-8"), 9)).decode("ascii")
219+
220+
print(f"# UK collocations: {len(uk_collocs)}")
221+
print()
222+
223+
width = 76
224+
data_lines = [compressed[i:i+width] for i in range(0, len(compressed), width)]
225+
print('_UK_DATA = (')
226+
for dl in data_lines:
227+
print(f' "{dl}"')
228+
print(f') # {len(uk_collocs)} pairs')

0 commit comments

Comments
 (0)