Almira commited on
Commit
a45aa62
1 Parent(s): 2b720c7

Split words by spaces rather than regexp

Browse files
Files changed (2) hide show
  1. README.md +1 -1
  2. sbert-punc-case-ru/sbertpunccase.py +4 -20
README.md CHANGED
@@ -11,7 +11,7 @@ license: apache-2.0
11
 
12
  SbertPuncCase - модель восстановления пунктуации и регистра для русского языка. Модель способна расставлять точки, запятые и знаки вопроса;
13
  определять регистр - слово в нижнем регистре, слово с первой буквой в верхнем регистре, слово в верхнем регистре.
14
- Модель разработана для восстановления пунктуации и регистра после распознавания речи, поэтому работает со строками в нижнем регистре.
15
  В основу модели лег [sbert_large_nlu_ru](https://huggingface.co/sberbank-ai/sbert_large_nlu_ru).
16
  В качестве обучающих данных использованы текстовые расшифровки интервью.
17
 
 
11
 
12
  SbertPuncCase - модель восстановления пунктуации и регистра для русского языка. Модель способна расставлять точки, запятые и знаки вопроса;
13
  определять регистр - слово в нижнем регистре, слово с первой буквой в верхнем регистре, слово в верхнем регистре.
14
+ Модель разработана для восстановления текста после распознавания речи, поэтому работает со строками в нижнем регистре.
15
  В основу модели лег [sbert_large_nlu_ru](https://huggingface.co/sberbank-ai/sbert_large_nlu_ru).
16
  В качестве обучающих данных использованы текстовые расшифровки интервью.
17
 
sbert-punc-case-ru/sbertpunccase.py CHANGED
@@ -6,26 +6,12 @@ import torch.nn as nn
6
  import numpy as np
7
 
8
  from transformers import AutoTokenizer, AutoModelForTokenClassification
9
- import re
10
- import string
11
-
12
-
13
- TOKEN_RE = re.compile(r'-?\d*\.\d+|[a-zа-яё]+|-?[\d\+\(\)\-]+|\S', re.I)
14
- """
15
- Регулярка, для того чтобы выделять в отдельные токены знаки препинания, числа и слова. А именно:
16
- - Числа с плавающей точкой вида 123.23 выделяются в один токен. Десятичным разделителем рассматривается только точка
17
- - Число может быть отрицательным: иметь знак -123.4
18
- - Целой части числа может вовсе не быть: последовательности -0.15 и −.15 означают одно и то же число.
19
- - При этом числа с нулевой дробной частью не допускаются: строка "12345." будет разделена на два токена "12345" и "."
20
- - Идущие подряд знаки препинания выделяются каждый в отдельный токен.
21
- - Телефонные номера выделяются в один токен +7(999)164-20-69
22
- - Множество букв в словах ограничивается только кириллическим и англ алфавитом (33 буквы и 26 cоотв).
23
- """
24
 
25
  # Прогнозируемые знаки препинания
26
  PUNK_MAPPING = {'.': 'PERIOD', ',': 'COMMA', '?': 'QUESTION'}
27
 
28
- # Прогнозируемый регистр LOWER - нижний регистр, UPPER - верхний регистр для первого символа, UPPER_TOTAL - верхний регистр для всех символов
 
29
  LABELS_CASE = ['LOWER', 'UPPER', 'UPPER_TOTAL']
30
  # Добавим в пунктуацию метку O означающий отсутсвие пунктуации
31
  LABELS_PUNC = ['O'] + list(PUNK_MAPPING.values())
@@ -107,10 +93,8 @@ class SbertPuncCase(nn.Module):
107
  def punctuate(self, text):
108
  text = text.strip().lower()
109
 
110
- # Разобъем предложение на слова и знаки препинания
111
- tokens = TOKEN_RE.findall(text)
112
- # Удалим знаки препинания
113
- words = [token for token in tokens if token not in string.punctuation]
114
 
115
  tokenizer_output = self.tokenizer(words, is_split_into_words=True)
116
 
 
6
  import numpy as np
7
 
8
  from transformers import AutoTokenizer, AutoModelForTokenClassification
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  # Прогнозируемые знаки препинания
11
  PUNK_MAPPING = {'.': 'PERIOD', ',': 'COMMA', '?': 'QUESTION'}
12
 
13
+ # Прогнозируемый регистр LOWER - нижний регистр, UPPER - верхний регистр для первого символа,
14
+ # UPPER_TOTAL - верхний регистр для всех символов
15
  LABELS_CASE = ['LOWER', 'UPPER', 'UPPER_TOTAL']
16
  # Добавим в пунктуацию метку O означающий отсутсвие пунктуации
17
  LABELS_PUNC = ['O'] + list(PUNK_MAPPING.values())
 
93
  def punctuate(self, text):
94
  text = text.strip().lower()
95
 
96
+ # Разобъем предложение на слова
97
+ words = text.split()
 
 
98
 
99
  tokenizer_output = self.tokenizer(words, is_split_into_words=True)
100