vantu5z / RHVoice-dictionary

Русский словарь для RHVoice и дополнительные инструменты
35 stars 8 forks source link

Определение падежа + Рефакторинг #217

Closed vantu5z closed 6 years ago

vantu5z commented 6 years ago

Я тут подумал вынести определение падежа, рода, числа в отдельный класс. Основан будет на том словаре который уже есть, но немного в другом формате с описанием одного слова в разных формах, что упростит его пополнение. Использоваться будет в виде: words.get_gender('слово') -> мужской / женский words.get_case('слово') -> [список совпавших падежей] например [0, 1, 0, 1, 1, 0]
Буду рад услышать предложения, а также пожелания к необходимым запросам к этому классу. Через пару дней покажу первый вариант.

capricorn2001 commented 6 years ago

В принципе "за". С пополнением однозначно станет проще, да и структура будет выглядеть лучше. Пока не представляю, как приспособить к обработке шаблонов - я очень мало имел дело с классами, ориентируюсь с трудом. Еще вот. Обработка текстов идет быстро, но пропускать их через все шаблоны подряд не оптимально. Скажем, проверять, присутствует ли число + г./гг. и, только если присутствует, запускать соответствующие шаблоны. Не знаю, стот ли игра свеч - конструкция точно усложнится, а будет ли выигрыш в скорости - вопрос.

vantu5z commented 6 years ago

Добавил ветку check_words_form, посмотри. Теперь нужно подумать над необходимыми запросами и оптимизацией. Ну и если приживётся, нужно переносить словарь в новый формат.

По поводу пропуска через не все шаблоны, пока не очень понимаю, как это реализовать.

capricorn2001 commented 6 years ago

Посмотрел файлы пока в броузере. Ищу информацию, как клонировать новую ветку :) Как-то привычнее у себя на компе разбираться.

vantu5z commented 6 years ago

git fetch должен все подтянуть. А дальше git checkout <имя ветки>.

vantu5z commented 6 years ago

Пытался применять к правилам, иногда получается более громоздко. А где проверки с модификациями слова [:-2] вообще мрак :)

capricorn2001 commented 6 years ago

Спасибо, клонировал. Боюсь, что не скоро разберусь, что к чему - программист из меня... :)

vantu5z commented 6 years ago

Ну там вроде не сложно, если что не понятно спрашивай ;)

capricorn2001 commented 6 years ago

Я чего-то глобально не улавливаю :) от слова "туплю"

from words_forms import * Words.get_attr('автобус') Traceback (most recent call last): File "", line 1, in TypeError: get_attr() missing 1 required positional argument: 'word'

vantu5z commented 6 years ago
from words_forms import *
# для начала нужно создать экземпляр с которым работать
w = Words()
# и уже к нему обращаться
print(w.get_attr('автобус'))

При создании экземпляра вызывается его инициализация def __init__(self), где создаются три экземпляра класса WordsForms с загрузкой словарей:

self.muz = WordsForms(words_muz.words, M_GENDER)
self.zen = WordsForms(words_zen.words, Z_GENDER)
self.sre = WordsForms(words_sre.words, S_GENDER)
vantu5z commented 6 years ago

Применил ко всем правилам. Даже и не знаю, местами сложно читаемо получилось.

capricorn2001 commented 6 years ago

Да и раньше не особо легко читалось - сам теперь порой не понимаю, чего наваял... Вот что значит, начинать изучение программирования с Бейсика.

capricorn2001 commented 6 years ago

Боюсь, проблемой станет конвертировать словари в новый формат - вручную нереально делать.

vantu5z commented 6 years ago

Да, это будет немного затруднительно.

vantu5z commented 6 years ago

Добавил возможность определения формы слова через pymorphy2 #215 Вроде работает.

vantu5z commented 6 years ago

Перевел словарь в новый формат.

capricorn2001 commented 6 years ago

Пытался синхронизировать ветку. Накосячил, как обычно.

git status
На ветке check_words_form
Ваша ветка опережает «origin/check_words_form» на 23 коммита.
  (используйте «git push», чтобы опубликовать ваши локальные коммиты)

нечего коммитить, нет изменений в рабочем каталоге

Пребываю в задумчивости.

vantu5z commented 6 years ago

git pull не помогает? Может из-за того, что я делал rebase и push --force, чтобы внести изменения из мастера.

capricorn2001 commented 6 years ago

Я делал:

git fetch
git pull

(Выдал несколько конфликтов). git add tools/preprocessing/* Еще сделал git commit зачем-то.

capricorn2001 commented 6 years ago

Наверно проще снести всю папку и заново всё загрузить :)

vantu5z commented 6 years ago

Погоди пару минут, я сейчас последние изменения применю. И потом синхронизируешься :)

vantu5z commented 6 years ago

Всё, я закончил. Можешь обновляться :)

capricorn2001 commented 6 years ago

Обновил.

capricorn2001 commented 6 years ago

Не установлен "pymorphy2".Определение аттрибутов слова будет вестись по словарю. ВНИМАНИЕ! неверное преобразование: "в течение 21 сек" -> "в течение двадцати одного секунды." должно быть: "в течение двадцати одной секунды." ВНИМАНИЕ! неверное преобразование: "1 царя" -> "1 царя." должно быть: "одного царя."

Пройдено проверок: 44 из 46

Попробую разобраться.

capricorn2001 commented 6 years ago

Введите текст: 21 сек Обработанный текст: 21 секунда.

vantu5z commented 6 years ago

нашел косяк, исправил fcb889df22574528b081bc25de5156d9e975ff9c

vantu5z commented 6 years ago

Еще вопрос по поводу буквы Ё в словарях. Раньше все слова были с Е, а теперь с Ё. Как думаешь вернуть Е или добавить дубликаты слов?

capricorn2001 commented 6 years ago

Если возможно, думаю, лучше оба варианта. Если оставить один, то я бы оставил Е - чаще употребляют.

capricorn2001 commented 6 years ago

(кило-, мега-, гига-)парсекОВ.

vantu5z commented 6 years ago

Немного доработал определение падежа. Проверь теперь. И поподробней напиши про (кило-, мега-, гига-)парсекОВ.

capricorn2001 commented 6 years ago

Пока не обнаруживаю ошибок. В words_muz.py неправильная форма род. пад. мн. ч.: парсек. Должно быть парсеков. 1 парсек, 10 парсеков. И, соответственно, кило-, мега-, гига-.

vantu5z commented 6 years ago

поправил 2f8217b057b8bbbbe9755a9a7c0b01460d5d4904

capricorn2001 commented 6 years ago

Такая мысль - довести до логического конца разделение: в файле templates.py у нас шаблоны и функции: не стоит ли выделить функции в отдельный файл, а, возможно, txt_prep() вообще сделать отдельным файлом? Рефакторинг так рефакторинг...

vantu5z commented 6 years ago

Я тоже об этом подумываю :) Как тебе такой вариант? templates.py - шаблоны functions.py - функции words_forms.py - разбор слов dict\words_muz.py... - словари main.py - основной модуль c txt_prep() (наверно стоит как-то по-другому назвать)

capricorn2001 commented 6 years ago

Согласен. В templates.py оставим кортежи, словари и строки вроде units и months. main.py или prep.py/txt_prep.py - как хочешь.

vantu5z commented 6 years ago

Эх! Наворотил всякого-разного, можешь проверить не забыл ли я чего?

capricorn2001 commented 6 years ago

Предлагаю, как только новый вариант будет готов, перенести его в ветку master, чтобы упростить редактирование шаблонов..

capricorn2001 commented 6 years ago

По-моему, нормально. Со временем может что-то проявиться, но пока порядок.

vantu5z commented 6 years ago

Cлил всё в мастер.

capricorn2001 commented 6 years ago

git status показыввает новые файлы и советует:

Ваша ветка обновлена в соответствии с «origin/master».

Изменения, которые будут включены в коммит: (используйте «git reset HEAD <файл>…», чтобы убрать из индекса)

Мне их перечислить в этой команде?

vantu5z commented 6 years ago

Как у тебя это получается)))) посмотри git reset -h, думаю можно сделать git reset --hard, если нечего терять.

capricorn2001 commented 6 years ago

Стоп. Там в списке файлы из tools/preprocessing/dict/__pycache__/

vantu5z commented 6 years ago

хм.. он их не должен видеть, каталог(и) __pycache__ включен в .gitignore

capricorn2001 commented 6 years ago

В любой директории не должен видеть?

vantu5z commented 6 years ago

Ну да. У меня не видит.

capricorn2001 commented 6 years ago

Удалю из tools/preprocessing/dict и сделаю git rm.

capricorn2001 commented 6 years ago

Вроде порядок.

capricorn2001 commented 6 years ago

Предлагаю новую ветку переименовать в testing, я буду в ней работать. Ты будешь смотреть и переносить в главную.

vantu5z commented 6 years ago

Думаю ветки стоит создавать, когда изменения неоднозначные или глобальные. А так, смотри сам, попробовать можно. Если запутаемся или не понравиться вернёмся к старой схеме :) Ну и сливать в master тоже можешь сам, как протестишь изменения ;)

capricorn2001 commented 6 years ago

Хорошо. Буду вносить изменения в мастер :)