fruitpicker01 commited on
Commit
a486861
·
verified ·
1 Parent(s): db81244

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -26
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
- tokens = re.split(r'[,\s.!?;:\(\)"«»–—]+', message)
1560
 
1561
- chain = []
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
- p = morph.parse(word)[0]
1573
- lemma = p.normal_form
1574
- if 'NOUN' in p.tag:
1575
- count += 1
1576
- chain.append(lemma)
1577
- else:
1578
- # Как только встретили не-сущ. — сбрасываем
1579
- count = 0
1580
- chain.clear()
1581
-
1582
- if count > 2:
1583
- chain_tuple = tuple(chain)
1584
- if chain_tuple not in allowed_chains:
1585
- return False, f"Несколько существительных подряд: {chain_tuple}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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. Производные предлоги