Пусть есть некий текст, в котором многие слова повторяются. Опишите алгоритм поиска такого минимального списка слов, которые покрывают как минимум 35% текста
Слова в тексте выделены или их надо найти?
@Bhudh Не очень понял, вам надо составить список из некоторых слов текста при заданном условии
Составляем частотный словарь, а далее проверяем, сколько %% текста покрывает 1-е самое частотное слово, потом 1-е + 2-е и так далее — пока не дойдём до нужных 35%.
Цитата: Agnius от августа 14, 2024, 21:39Не очень понял, вам надо составить список из некоторых слов текста при заданном условии
Вот я и спрашиваю, какой у Вас текст: Декларация прав человека или надпись библским письмом (https://upload.wikimedia.org/wikipedia/commons/3/31/National_Museum_of_Beirut_%E2%80%93_Byblos_syllabary.jpg)?
@Andrey Lukyanov Верно :up:
Цитата: Bhudh от августа 14, 2024, 22:27Вот я и спрашиваю, какой у Вас текст:
Тогда известны
Ну тогда и алгоритм понятен. Он на Python вообще, считай, в одну строчку пишется с двумя лямбдами.
Зачем там лямбды? [*set(text.split())] плюс, возможно, предварительно заменить пунктуацию пробелами и взять только 0.35 от общей длины текста с выравниванием к ближайшему пробелу. Впрочем, это не алгоритм — алгоритмическая часть под капотом.
Эти 0.35 тоже надо каким-то образом взять, ни set, ни list за Вас этого не сделает.
Понятно, что определения слова тут еще не было, тем не менее.
Поскольку я подобную задачку решал когда-то лет 30 назад, хочется у знать у знатоков, как они будут поступать словоформами в языках с богатой морфологией, например, в русском?
Пример: как узнать, что "проводил" и "провел" - одно и то же слово в разных формах?
Боюсь, парой лямбд не обойтись.
@Basil2 Вопрос по словоформам и у меня самого недавно возникал — не в контексте данной задачи, а с более практической целью: восстановить базовые формы слов в тексте, чтобы можно было найти их в словаре. Берем слово из текста и применяем к нему все возможные шаблоны преобразования в базовую форму, в которые оно вписывается. В результате получится несколько слов в базовой форме, необязательно существующих (напр., из слова Київ в украинском можно получить настоящее существительное «кий» (которое в родительном падеже множественного числа выглядит как «київ»), но также и несуществующий глагол «киїти» (в мужском роде прошедшего времени тоже выглядящий как «київ»), и т.д., и т.п., а также само проверяемое слово, которое может быть базовой формой себя). Дальше остается проверить по словарю, существуют такие базовые формы или нет. Если найдено более одной базовой формы, угадать нужную можно только из контекста.
Цитата: Basil2 от августа 19, 2024, 03:40Пример: как узнать, что "проводил" и "провел" - одно и то же слово в разных формах?
Особенно если считается, что это 2 разных слова: форма от
проводить и форма от
провести.
Потому, что от «проводить до дома» (сов.) несовершенная форма — «провожать до дома», а от глагола «провести» ≈ «обмануть» несовершенной формы не существует.
Цитата: Bhudh от августа 19, 2024, 16:58Цитата: Basil2 от августа 19, 2024, 03:40Пример: как узнать, что "проводил" и "провел" - одно и то же слово в разных формах?
Особенно если считается, что это 2 разных слова: форма от проводить и форма от провести.
Потому, что от «проводить до дома» (сов.) несовершенная форма — «провожать до дома», а от глагола «провести» ≈ «обмануть» несовершенной формы не существует.
Проводил реформы - провел реформы.
А вопрос о том, два ли это слова или одно и тоже упрется в определние, что такое слово.
Преобразование между совершенным и несовершенным глаголом возможно более чем одним способом, поэтому обычно их рассматривают как отдельные глаголы (хотя могут объединять близкие по смыслу родственные совершенные и несовершенные глаголы в одну словарную статью).
Цитата: Andrey Lukyanov от августа 14, 2024, 21:43Составляем частотный словарь, а далее проверяем, сколько %% текста покрывает 1-е самое частотное слово, потом 1-е + 2-е и так далее — пока не дойдём до нужных 35%.
Тут ещё некоторый вопрос по самому условию задачи. Что такое вообще для автора процент покрытия, это процент от чего, в чём измеряется величина текста? В словах (тогда да, можно использовать обычный частотный словарь) или в символах (тогда надо не обычный частотный словарь, а отсортированный по частоте, умноженной на длину слова, т.е. по величине покрытия в символах)?