Лингвофорум

Общий раздел => Наука и техника => Тема начата: Agnius от августа 14, 2024, 18:09

Название: Задачка
Отправлено: Agnius от августа 14, 2024, 18:09
 Пусть есть некий текст, в котором многие слова повторяются. Опишите алгоритм поиска такого минимального списка слов, которые покрывают как минимум 35% текста
Название: От: Задачка
Отправлено: Bhudh от августа 14, 2024, 18:26
Слова в тексте выделены или их надо найти?
Название: От: Задачка
Отправлено: Agnius от августа 14, 2024, 21:39
@Bhudh
 Не очень понял, вам надо составить список из некоторых слов текста при заданном условии
Название: От: Задачка
Отправлено: Andrey Lukyanov от августа 14, 2024, 21:43
Составляем частотный словарь, а далее проверяем, сколько %% текста покрывает 1-е самое частотное слово, потом 1-е + 2-е и так далее — пока не дойдём до нужных 35%.
Название: От: Задачка
Отправлено: Bhudh от августа 14, 2024, 22:27
Цитата: Agnius от августа 14, 2024, 21:39Не очень понял, вам надо составить список из некоторых слов текста при заданном условии
Вот я и спрашиваю, какой у Вас текст: Декларация прав человека или надпись библским письмом (https://upload.wikimedia.org/wikipedia/commons/3/31/National_Museum_of_Beirut_%E2%80%93_Byblos_syllabary.jpg)?
Название: От: Задачка
Отправлено: Agnius от августа 14, 2024, 22:53
@Andrey Lukyanov
 Верно  :up:
 
Цитата: Bhudh от августа 14, 2024, 22:27Вот я и спрашиваю, какой у Вас текст:
Тогда известны
Название: От: Задачка
Отправлено: Bhudh от августа 14, 2024, 23:24
Ну тогда и алгоритм понятен. Он на Python вообще, считай, в одну строчку пишется с двумя лямбдами.
Название: От: Задачка
Отправлено: Python от августа 15, 2024, 04:42
Зачем там лямбды? [*set(text.split())] плюс, возможно, предварительно заменить пунктуацию пробелами и взять только 0.35 от общей длины текста с выравниванием к ближайшему пробелу. Впрочем, это не алгоритм — алгоритмическая часть под капотом.
Название: От: Задачка
Отправлено: Bhudh от августа 15, 2024, 14:02
Эти 0.35 тоже надо каким-то образом взять, ни set, ни list за Вас этого не сделает.
Название: От: Задачка
Отправлено: Basil2 от августа 19, 2024, 03:40
Понятно, что определения слова тут еще не было, тем не менее.

Поскольку я подобную задачку решал когда-то лет 30 назад, хочется у знать у знатоков, как они будут поступать словоформами в языках с богатой морфологией, например, в русском?

Пример: как узнать, что "проводил" и "провел" - одно и то же слово в разных формах?     

Боюсь, парой лямбд не обойтись. 
Название: От: Задачка
Отправлено: Python от августа 19, 2024, 05:33
@Basil2  Вопрос по словоформам и у меня самого недавно возникал — не в контексте данной задачи, а с более практической целью: восстановить базовые формы слов в тексте, чтобы можно было найти их в словаре. Берем слово из текста и применяем к нему все возможные шаблоны преобразования в базовую форму, в которые оно вписывается. В результате получится несколько слов в базовой форме, необязательно существующих (напр., из слова Київ в украинском можно получить настоящее существительное «кий» (которое в родительном падеже множественного числа выглядит как «київ»), но также и несуществующий глагол «киїти» (в мужском роде прошедшего времени тоже выглядящий как «київ»), и т.д., и т.п., а также само проверяемое слово, которое может быть базовой формой себя). Дальше остается проверить по словарю, существуют такие базовые формы или нет. Если найдено более одной базовой формы, угадать нужную можно только из контекста.
Название: От: Задачка
Отправлено: Bhudh от августа 19, 2024, 16:58
Цитата: Basil2 от августа 19, 2024, 03:40Пример: как узнать, что "проводил" и "провел" - одно и то же слово в разных формах?
Особенно если считается, что это 2 разных слова: форма от проводить и форма от провести.
Потому, что от «проводить до дома» (сов.) несовершенная форма — «провожать до дома», а от глагола «провести» ≈ «обмануть» несовершенной формы не существует.
Название: От: Задачка
Отправлено: Basil2 от августа 21, 2024, 22:46
Цитата: Bhudh от августа 19, 2024, 16:58
Цитата: Basil2 от августа 19, 2024, 03:40Пример: как узнать, что "проводил" и "провел" - одно и то же слово в разных формах?
Особенно если считается, что это 2 разных слова: форма от проводить и форма от провести.
Потому, что от «проводить до дома» (сов.) несовершенная форма — «провожать до дома», а от глагола «провести» ≈ «обмануть» несовершенной формы не существует.
Проводил реформы - провел реформы.

А вопрос о том, два ли это слова или одно и тоже упрется в определние, что такое слово. 
Название: От: Задачка
Отправлено: Python от августа 23, 2024, 18:35
Преобразование между совершенным и несовершенным глаголом возможно более чем одним способом, поэтому обычно их рассматривают как отдельные глаголы (хотя могут объединять близкие по смыслу родственные совершенные и несовершенные глаголы в одну словарную статью).
Название: От: Задачка
Отправлено: Toman от сентября 10, 2024, 14:20
Цитата: Andrey Lukyanov от августа 14, 2024, 21:43Составляем частотный словарь, а далее проверяем, сколько %% текста покрывает 1-е самое частотное слово, потом 1-е + 2-е и так далее — пока не дойдём до нужных 35%.
Тут ещё некоторый вопрос по самому условию задачи. Что такое вообще для автора процент покрытия, это процент от чего, в чём измеряется величина текста? В словах (тогда да, можно использовать обычный частотный словарь) или в символах (тогда надо не обычный частотный словарь, а отсортированный по частоте, умноженной на длину слова, т.е. по величине покрытия в символах)?