[Программирование, Алгоритмы, R, Изучение языков] Дети, русский язык и R
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Типичная ситуация в нынешнем образовательном процессе в школе. На часах 22:00, в электронном дневнике ребенка появляется новое задание. В лучшем случае на послезавтра, но обычно на завтра.
Вариантов реакции три:
- не делать вовсе;
- «не заметить» и отложить решение вопроса на потом;
- попробовать сделать.
Вторая реакция по сути идентична первой, поскольку снежный ком таких заданий будет стремительно накапливаться без каких-либо шансов его разобрать.
Выбирая третий вариант, в отдельных случах даже задания по русскому языку можно попробовать решить с помощью R, принимая во внимание, что на все про все есть 15-20 минут максимум. 5 минут на «экстремальное программирование», 10-15 минут на чистовое оформление. Когда принципиально задача решена оформление можно уже и утром сделать
Является продолжением серии предыдущих публикаций.
Какие задачи пытаемся решить?
Естественно, сочинение писать или думать надо самостоятельно. Но есть определенный класс задач, который выглядит как задание для робота и алгоритмизируется хорошо.
Ниже просто обобщенные примеры, наверняка, многие найдут что добавить.
Задачка 1
Составление кроссвордов (русский/английский). Существуют псевдовариации — составление в заданной геометрической структуре или же в свободной форме. Опционально может быть задана тема.
Задачка 2
Подобрать N слов на заданную тему в которых встречаются (отсутствуют) буквы (подмножество на выбор).
Задачка 3
Подобрать N слов, которые могут быть написаны с 'не' как слитно, так и раздельно.
Варианты решения при помощи R
Подобный класс задач подразумевает наличие большого словарного запаса. Эта «долгая» стратегия и решается она только системным чтением художественной литературы.
N может быть реально большим (несколько десятков), а у нас есть 5 минут.
Шаг №1. Ищем и загружаем готовые корпуса русского языка. Можно использовать все, что удастся найти. Недавно хорошая подборка была здесь. Если ее там нет, то можно поглядеть в кладовке.
Загрузка словарей
SPL
library(tidyverse)
library(readr)
library(magrittr)
library(stringi)
library(udpipe)
library(tictoc)
# Cловари русского языка для скачивания
# http://www.speakrus.ru/dict/
# Словарь Про-Линг, 125723 слова
voc1_df <- here::here("data", "pldf-win.zip") %>%
readr::read_delim(col_names = "word", delim = " ",
locale = locale("ru", encoding = "windows-1251"))
# Словарь русской литературы, 162232 слова
voc2_df <- here::here("data", "litf-win.zip") %>%
readr::read_delim(col_names = c("word", "freq"), delim = " ",
locale = locale("ru", encoding = "windows-1251")) %>%
select(-freq)
# Словарь А. А. Зализняка, 93392 слова
voc3_df <- here::here("data", "zdf-win.zip") %>%
readr::read_delim(col_names = "word", delim = " ",
locale = locale("ru", encoding = "windows-1251"))
# Толковый словарь под ред. C. И. Ожегова, 1991 г., 61458 статей
voc4_df <- here::here("data", "ozhegovw.zip") %>%
readr::read_delim(delim = "|", quote = "", locale = locale("ru", encoding = "windows-1251")) %>%
select(word = VOCAB)
voc_df <- bind_rows(voc1_df, voc2_df, voc3_df, voc4_df) %>%
distinct()
Шаг №2. Решаем задачи
Решаем задачу 1. Например, нам нужны слова из 7 букв, 1-ая — 'Р', 3-я — 'Ч'
words_df <- voc_df %>%
filter(stri_length(word) == 7) %>%
filter(stri_sub(word, 3, 3) == "ч") %>%
filter(stri_sub(word, 1, 1) == "р")
Решаем задачу 2. Например, нам нужно Подобрать слова в которых встречаются буквы "В е ж з к н о с х э ю"
voc_df %>%
filter(stri_detect_regex(tolower(word), "^[вежзкносхэю]+$")) %>%
mutate(l = stri_length(word)) %>%
arrange(desc(l)) %>%
print(n = 400)
Решаем задачу 3. Какие существительные могут быть написаны с 'не' как слитно, так и раздельно?
tic("Аннотируем")
print(lubridate::now())
ann_tbl <- voc_df %>%
mutate(ne_word = stri_c("не", word)) %>%
inner_join(voc_df, by = c("ne_word" = "word")) %>%
# stri_trans_general(id ="Latin-ASCII")
{udpipe_annotate(ud_model, x = .$word, trace = TRUE)} %>%
as_tibble()
toc()
ne_tbl <- ann_tbl %>%
filter(upos == "NOUN") %>%
select(word = token) %>%
# немного постправок
filter(stri_length(word) > 3) %>%
filter(!stri_detect_regex(word, "ий$")) %>%
mutate(ne_word = stri_c("не", word)) %>%
sample_n(200) %T>%
print(n = 200)
И т.д. и т.п. Нет цели написать идеально работающий алгоритм, основная задача — отсеять максимально быстро 99% ненужного, а из оставшегося выбрать то, что интересует. Экономит много времени, сил и нервов.
Предыдущая публикация — «IT Service Health Monitoring средствами R. Взгляд под иным углом».
===========
Источник:
habr.com
===========
Похожие новости:
- [Java, Администрирование баз данных, DevOps] Версионирование структуры БД при помощи Liquibase
- [IT-инфраструктура, Big Data, Разработка под e-commerce, Карьера в IT-индустрии] IT-2021: Где деньги?
- Выпуск Tor Browser 10.0.14 и дистрибутива Tails 4.17
- [Java, Разработка под Android, Kotlin] Уже сегодня Android MeetUp: VK, Leroy Merlin, FindMyKids, Кухня на районе
- [Законодательство в IT, Гаджеты, Софт, Финансы в IT] За продажу гаджетов без российского ПО ввели штрафы
- [Машинное обучение, Искусственный интеллект, Natural Language Processing] Синтез речи виртуальных ассистентов Салют: как мы отошли от классических научных статей, чтобы сделать его человеческим
- [Kubernetes] VMware Tanzu: как «приручить» Kubernetes
- [Разработка под Windows, Дизайн, Софт] Microsoft показала новые иконки папок в Windows 10
- [Программирование, Анализ и проектирование систем, Проектирование и рефакторинг, Микросервисы] Разложение монолита: Декомпозиция БД (часть 1)
- [Управление персоналом, Карьера в IT-индустрии] 30 марта: HoRosho Meetup Online для IT HR
Теги для поиска: #_programmirovanie (Программирование), #_algoritmy (Алгоритмы), #_r, #_izuchenie_jazykov (Изучение языков), #_data_science, #_russkij_jazyk (русский язык), #_obuchenie (обучение), #_shkola (школа), #_obrazovanie (образование), #_programmirovanie (
Программирование
), #_algoritmy (
Алгоритмы
), #_r, #_izuchenie_jazykov (
Изучение языков
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 10:31
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Типичная ситуация в нынешнем образовательном процессе в школе. На часах 22:00, в электронном дневнике ребенка появляется новое задание. В лучшем случае на послезавтра, но обычно на завтра. Вариантов реакции три:
Вторая реакция по сути идентична первой, поскольку снежный ком таких заданий будет стремительно накапливаться без каких-либо шансов его разобрать. Выбирая третий вариант, в отдельных случах даже задания по русскому языку можно попробовать решить с помощью R, принимая во внимание, что на все про все есть 15-20 минут максимум. 5 минут на «экстремальное программирование», 10-15 минут на чистовое оформление. Когда принципиально задача решена оформление можно уже и утром сделать Является продолжением серии предыдущих публикаций. Какие задачи пытаемся решить? Естественно, сочинение писать или думать надо самостоятельно. Но есть определенный класс задач, который выглядит как задание для робота и алгоритмизируется хорошо. Ниже просто обобщенные примеры, наверняка, многие найдут что добавить. Задачка 1 Составление кроссвордов (русский/английский). Существуют псевдовариации — составление в заданной геометрической структуре или же в свободной форме. Опционально может быть задана тема. Задачка 2 Подобрать N слов на заданную тему в которых встречаются (отсутствуют) буквы (подмножество на выбор). Задачка 3 Подобрать N слов, которые могут быть написаны с 'не' как слитно, так и раздельно. Варианты решения при помощи R Подобный класс задач подразумевает наличие большого словарного запаса. Эта «долгая» стратегия и решается она только системным чтением художественной литературы. N может быть реально большим (несколько десятков), а у нас есть 5 минут. Шаг №1. Ищем и загружаем готовые корпуса русского языка. Можно использовать все, что удастся найти. Недавно хорошая подборка была здесь. Если ее там нет, то можно поглядеть в кладовке. Загрузка словарейSPLlibrary(tidyverse)
library(readr) library(magrittr) library(stringi) library(udpipe) library(tictoc) # Cловари русского языка для скачивания # http://www.speakrus.ru/dict/ # Словарь Про-Линг, 125723 слова voc1_df <- here::here("data", "pldf-win.zip") %>% readr::read_delim(col_names = "word", delim = " ", locale = locale("ru", encoding = "windows-1251")) # Словарь русской литературы, 162232 слова voc2_df <- here::here("data", "litf-win.zip") %>% readr::read_delim(col_names = c("word", "freq"), delim = " ", locale = locale("ru", encoding = "windows-1251")) %>% select(-freq) # Словарь А. А. Зализняка, 93392 слова voc3_df <- here::here("data", "zdf-win.zip") %>% readr::read_delim(col_names = "word", delim = " ", locale = locale("ru", encoding = "windows-1251")) # Толковый словарь под ред. C. И. Ожегова, 1991 г., 61458 статей voc4_df <- here::here("data", "ozhegovw.zip") %>% readr::read_delim(delim = "|", quote = "", locale = locale("ru", encoding = "windows-1251")) %>% select(word = VOCAB) voc_df <- bind_rows(voc1_df, voc2_df, voc3_df, voc4_df) %>% distinct() Шаг №2. Решаем задачи Решаем задачу 1. Например, нам нужны слова из 7 букв, 1-ая — 'Р', 3-я — 'Ч' words_df <- voc_df %>%
filter(stri_length(word) == 7) %>% filter(stri_sub(word, 3, 3) == "ч") %>% filter(stri_sub(word, 1, 1) == "р") Решаем задачу 2. Например, нам нужно Подобрать слова в которых встречаются буквы "В е ж з к н о с х э ю" voc_df %>%
filter(stri_detect_regex(tolower(word), "^[вежзкносхэю]+$")) %>% mutate(l = stri_length(word)) %>% arrange(desc(l)) %>% print(n = 400) Решаем задачу 3. Какие существительные могут быть написаны с 'не' как слитно, так и раздельно? tic("Аннотируем")
print(lubridate::now()) ann_tbl <- voc_df %>% mutate(ne_word = stri_c("не", word)) %>% inner_join(voc_df, by = c("ne_word" = "word")) %>% # stri_trans_general(id ="Latin-ASCII") {udpipe_annotate(ud_model, x = .$word, trace = TRUE)} %>% as_tibble() toc() ne_tbl <- ann_tbl %>% filter(upos == "NOUN") %>% select(word = token) %>% # немного постправок filter(stri_length(word) > 3) %>% filter(!stri_detect_regex(word, "ий$")) %>% mutate(ne_word = stri_c("не", word)) %>% sample_n(200) %T>% print(n = 200) И т.д. и т.п. Нет цели написать идеально работающий алгоритм, основная задача — отсеять максимально быстро 99% ненужного, а из оставшегося выбрать то, что интересует. Экономит много времени, сил и нервов. Предыдущая публикация — «IT Service Health Monitoring средствами R. Взгляд под иным углом». =========== Источник: habr.com =========== Похожие новости:
Программирование ), #_algoritmy ( Алгоритмы ), #_r, #_izuchenie_jazykov ( Изучение языков ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 10:31
Часовой пояс: UTC + 5