Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1550,39 +1550,48 @@ def check_no_time_parasites(message, exceptions=None):
|
|
1550 |
# 16. Несколько существительных подряд
|
1551 |
|
1552 |
def check_no_multiple_nouns(message, exceptions=None):
|
|
|
|
|
|
|
|
|
1553 |
if exceptions is None:
|
1554 |
exceptions = {}
|
1555 |
allowed_chains = exceptions.get("multiple_nouns", set())
|
1556 |
|
1557 |
morph = pymorphy3.MorphAnalyzer()
|
1558 |
-
|
1559 |
-
|
1560 |
|
1561 |
-
|
1562 |
-
count = 0
|
1563 |
-
for t in tokens:
|
1564 |
-
word = t.strip()
|
1565 |
-
if not word:
|
1566 |
-
# Если токен пустой (двойные пробелы, переносы строк),
|
1567 |
-
# сбрасываем цепочку
|
1568 |
-
count = 0
|
1569 |
-
chain.clear()
|
1570 |
-
continue
|
1571 |
|
1572 |
-
|
1573 |
-
|
1574 |
-
if
|
1575 |
-
|
1576 |
-
|
1577 |
-
|
1578 |
-
|
1579 |
-
|
1580 |
-
|
1581 |
-
|
1582 |
-
|
1583 |
-
|
1584 |
-
if
|
1585 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1586 |
return True
|
1587 |
|
1588 |
# 17. Производные предлоги
|
|
|
1550 |
# 16. Несколько существительных подряд
|
1551 |
|
1552 |
def check_no_multiple_nouns(message, exceptions=None):
|
1553 |
+
"""
|
1554 |
+
Проверка на 3+ подряд существительных (в рамках одного предложения).
|
1555 |
+
Если конкретная цепочка лемм не в exceptions['multiple_nouns'], считаем нарушением.
|
1556 |
+
"""
|
1557 |
if exceptions is None:
|
1558 |
exceptions = {}
|
1559 |
allowed_chains = exceptions.get("multiple_nouns", set())
|
1560 |
|
1561 |
morph = pymorphy3.MorphAnalyzer()
|
1562 |
+
|
1563 |
+
# Разбиваем текст на предложения.
|
1564 |
|
1565 |
+
sentences = re.split(r'[.!?]\s*|\n+', message.strip())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1566 |
|
1567 |
+
for sentence in sentences:
|
1568 |
+
sentence = sentence.strip()
|
1569 |
+
if not sentence:
|
1570 |
+
continue
|
1571 |
+
|
1572 |
+
# Теперь разбиваем *предложение* на токены (знаки препинания / пробелы и т.п.)
|
1573 |
+
tokens = re.split(r'[,\s;:\(\)"«»–—]+', sentence)
|
1574 |
+
|
1575 |
+
chain = []
|
1576 |
+
count = 0
|
1577 |
+
for t in tokens:
|
1578 |
+
w = t.strip()
|
1579 |
+
if not w:
|
1580 |
+
continue
|
1581 |
+
parsed = morph.parse(w)[0]
|
1582 |
+
if 'NOUN' in parsed.tag:
|
1583 |
+
count += 1
|
1584 |
+
chain.append(parsed.normal_form)
|
1585 |
+
else:
|
1586 |
+
# как только встретили не-сущ., сбрасываем
|
1587 |
+
count = 0
|
1588 |
+
chain = []
|
1589 |
+
|
1590 |
+
# Если встретили 3 подряд
|
1591 |
+
if count > 2:
|
1592 |
+
chain_tuple = tuple(chain)
|
1593 |
+
if chain_tuple not in allowed_chains:
|
1594 |
+
return (False, f"Несколько существительных подряд: {chain_tuple}")
|
1595 |
return True
|
1596 |
|
1597 |
# 17. Производные предлоги
|