статистика повторов похожих слов в тексте
нужно посчитать 6 наиболее повторяющихся слов с одним корнем
при этом длина слов должна быть не менее 4 букв
находим 7 наиболее частых корней слов в тексте и выводим статистику
примерно так
текст 8
дело 7
строка 6
слова 5
верно 5
смысл 4
видно 4
мочь 8
гений 7
идея 7
общество 5
история 4
новый 4
инновация 3
> пошаговый план решения задачи на Python с использованием библиотеки pymorphy3 для морфологического анализа и определения корней слов.
Шаги решения:
Установить библиотеку pymorphy3 (если ещё не установлена).
Прочитать текст из файла текст.txt.
Разбить текст на слова, привести к нижнему регистру и убрать знаки препинания.
Отфильтровать слова длиной ; 4 символа.
Для каждого слова определить его корень с помощью pymorphy3.
Подсчитать частоту каждого корня.
Вывести 7 самых частых корней с их количеством.
Код программы :
import re
from collections import Counter
import pymorphy3
# Инициализация морфологического анализатора
morph = pymorphy3.MorphAnalyzer()
# Чтение файла
with open('текст.txt', 'r', encoding='utf-8') as file:
text = file.read()
# Извлечение слов (только буквы, нижний регистр)
words = re.findall(r'\b[а-яё]+\b', text.lower())
# Фильтрация по длине и получение корней
roots = []
for word in words:
if len(word) >= 4:
parsed = morph.parse(word)[0] # берём первый вариант разбора
root = parsed.normal_form # нормальная форма (корень)
roots.append(root)
# Подсчёт частот и вывод топ-7
counter = Counter(roots)
most_common = counter.most_common(7)
for root, count in most_common:
print(f"{root} {count}")
Примечания:
Установите pymorphy3 командой:
pip install pymorphy3
Если в тексте есть опечатки или редкие слова, морфологический анализ может быть неточным.
Для улучшения точности можно добавить дополнительную обработку (например, игнорирование стоп-слов).
**
Вот пример программы на Python, которая находит 6 наиболее часто встречающихся слов с одним корнем ( например, с корнем "яйц") в заданном тексте:
import re
from collections import Counter
def find_top_words_with_root(text, root, top_n=6):
# Приводим текст к нижнему регистру для корректного подсчёта
text = text.lower()
# Находим все слова, содержащие корень
words = re.findall(r'\b\w*' + re.escape(root) + r'\w*\b', text)
# Считаем частоту слов
counter = Counter(words)
# Получаем top_n наиболее частых слов с корнем
most_common = counter.most_common(top_n)
return most_common
# Пример использования
text = """ это ваш текст ( вставьте полный текст )"""
root = "яйц"
top_words = find_top_words_with_root(text, root)
print("6 наиболее часто встречающихся слов с корнем '{}':".format(root))
for word, count in top_words:
print(f"{word}: {count}")
Как использовать:
Вставьте ваш текст в переменную text.
Запустите программу — она выведет 6 наиболее частых слов с корнем "яйц".
Если нужно, могу помочь адаптировать под другие корни или добавить обработку пунктуации!
нет немного не так программа должна сама найти каких повторов однокоренных слов больше
то есть она должна найти 6 самых частых слов и их корней и сделать статистику по частоте каждого из них
Нужно найти 6 самых частых корней слов в тексте.
Вот исправленная программа:
import re
from collections import Counter
import pymorphy3
def get_word_root(word):
"""Получает корень слова с помощью pymorphy3"""
try:
morph = pymorphy3.MorphAnalyzer()
parsed = morph.parse(word)[0]
return parsed.normal_form
except:
return word
def find_top_roots(text, top_n=6):
"""Находит top_n самых частых корней в тексте"""
# Очищаем текст и разбиваем на слова
words = re.findall(r'\b[а-яё]+\b', text.lower())
# Получаем корни для всех слов
roots = [get_word_root(word) for word in words]
# Считаем частоту корней
root_counter = Counter(roots)
return root_counter.most_common(top_n)
# Ваш текст
text = """Ваш текст здесь..."""
# Находим 6 самых частых корней
top_roots = find_top_roots(text)
print("6 самых частых корней в тексте:")
for i, (root, count) in enumerate(top_roots, 1):
print(f"{i}. Корень '{root}': {count} слов")
# Дополнительно: покажем примеры слов для каждого корня
print("\nПримеры слов для каждого корня:")
for root, count in top_roots:
words_with_root = [word for word in re.findall(r'\b[а-яё]+\b', text.lower())
if get_word_root(word) == root]
unique_words = list(set(words_with_root))[:5] # первые 5 уникальных слов
print(f"Корень '{root}': {', '.join(unique_words)}{'...' if len(unique_words) == 5 else ''}")
Установка зависимостей:
pip install pymorphy3
Как это работает:
Извлекает все слова из текста
Находит корень каждого слова с помощью морфологического анализатора
Считает частоту каждого корня
Выводит 6 самых частых корней и примеры слов для каждого
Альтернативный вариант (проще - без pymorphy3):
Если не хотите устанавливать pymorphy3, вот упрощенная версия, которая считает основы слов:
import re
from collections import Counter
def find_top_word_bases(text, top_n=6, min_length=3):
"""Находит top_n самых частых основ слов (первые 3-4 буквы)"""
words = re.findall(r'\b[а-яё]+\b', text.lower())
# Создаем основы слов (первые 3-4 символа)
bases = []
for word in words:
if len(word) >= min_length + 1:
base = word[:min_length] # первые 3 буквы
bases.append(base)
base_counter = Counter(bases)
return base_counter.mmost_common(top_n)
# Использование
top_bases = find_top_word_bases(text)
print("6 самых частых основ слов:")
for base, count in top_bases:
print(f"Основа '{base}': {count} слов")
Первая версия с pymorphy3 будет точнее определять корни, вторая версия проще но менее точна.
**
Вот немного улучшенная версия программы с ограничением
по минимальной длине слов для поиска повторов:
Версия с pymorphy3 (точная)
import re
from collections import Counter
import pymorphy3
def get_word_root(word, min_length=4):
"""Получает корень слова, пропускает короткие слова"""
if len(word) < min_length:
return None
try:
morph = pymorphy3.MorphAnalyzer()
parsed = morph.parse(word)[0]
return parsed.normal_form
except:
return word if len(word) >= min_length else None
def find_top_roots(text, top_n=6, min_length=4):
"""Находит top_n самых частых корней в тексте (слова от min_length букв)"""
# Очищаем текст и разбиваем на слова
words = re.findall(r'\b[а-яё]+\b', text.lower())
# Получаем корни для слов (исключаем короткие)
roots = []
for word in words:
root = get_word_root(word, min_length)
if root: # добавляем только если корень не None
roots.append(root)
# Считаем частоту корней
root_counter = Counter(roots)
return root_counter.most_common(top_n)
# Ваш текст
text = """Ваш текст здесь..."""
# Находим 6 самых частых корней (слова от 4 букв)
top_roots = find_top_roots(text, min_length=4)
print(f"6 самых частых корней (слова от 4 букв):")
for i, (root, count) in enumerate(top_roots, 1):
print(f"{i}. Корень '{root}': {count} слов")
# Дополнительная статистика
print(f"\nСтатистика по каждому корню:")
for root, count in top_roots:
words_with_root = []
for word in re.findall(r'\b[а-яё]+\b', text.lower()):
if len(word) >= 4: # фильтруем по длине
current_root = get_word_root(word, 4)
if current_root == root:
words_with_root.append(word)
unique_words = sorted(set(words_with_root))
word_freq = Counter(words_with_root)
print(f"\nКорень '{root}' ({count} вхождений):")
print(f"Уникальные слова: {', '.join(unique_words[:10])}{'...' if len(unique_words) > 10 else ''}")
print(f"Самое частое слово: '{word_freq.most_common(1)[0][0]}' ({word_freq.most_common(1)[0][1]} раз)")
**
Упрощенная версия (без pymorphy3)
import re
from collections import Counter
def find_top_word_stems(text, top_n=6, min_length=4, stem_length=3):
"""Находит top_n самых частых основ слов"""
words = [word.lower() for word in re.findall(r'\b[а-яё]+\b', text)
if len(word) >= min_length]
# Создаем основы слов (первые stem_length символов)
stems = [word[:stem_length] for word in words]
stem_counter = Counter(stems)
word_counter = Counter(words)
return stem_counter.most_common(top_n), word_counter
# Использование
top_stems, all_words = find_top_word_stems(text, min_length=4)
print("6 самых частых основ слов (слова от 4 букв):")
for stem, count in top_stems:
# Находим слова, которые начинаются с этой основы
words_with_stem = [word for word in all_words if word.startswith(stem)]
unique_words = list(set(words_with_stem))
print(f"Основа '{stem}': {count} вхождений")
print(f"Слова: {', '.join(unique_words[:5])}{'...' if len(unique_words) > 5 else ''}")
print(f"Самое частое: '{max(unique_words, key=lambda x: all_words[x])}'")
print()
Ключевые особенности:
Фильтрация по длине - учитываются только слова от min_length букв
Точное определение корней с помощью морфологического анализатора
Подробная статистика для каждого корня
Альтернативный упрощенный вариант без внешних зависимостей
Какой вариант вам больше подходит?
Первый даст более точные лингвистические результаты, второй проще в установке.
Делая из гениев идиотов мы так меняем ход всей истории нашей планеты и цивилизации
это утверждение поднимает важный вопрос о том, как общество воспринимает и использует таланты и гениальность.
Действительно, если мы не ценим или не поддерживаем гениев, это может привести к потере уникальных идей и инноваций, которые могут изменить ход истории.
История знает немало примеров, когда выдающиеся умы не были поняты или были отвергнуты обществом, что замедляло прогресс.
Важно создавать условия для развития таланта, чтобы каждый мог внести свой вклад в цивилизацию. Поддержка креативности, открытость к новым идеям и критическое мышление все это способствует позитивным изменениям в мире.
Продолжая эту мысль, можно отметить, что процесс "делания из гениев идиотов" часто происходит из-за страха перед новизной, непонимания или нежелания менять устоявшиеся нормы.
Общество иногда предпочитает стабильность и привычные пути, даже если это означает игнорирование или подавление инновационных идей.
Важно понимать, что гении часто представляют собой не только выдающихся ученых или художников, но и людей, способных мыслить иначе.
Их идеи могут вызывать сопротивление, так как они бросают вызов существующему порядку вещей. Например, многие великие открытия в науке и технологии первоначально встречали недоверие и критику.
Для того чтобы не потерять потенциал, который могут предложить гении, необходимо:
Общество должно поощрять креативность и инновации, предоставляя ресурсы и возможности для их реализации.
Важно обучать людей критическому мышлению и открытости к новым идеям, чтобы они могли оценить и понять ценность нестандартного мышления.
Гении также на пути неизвестного часто совершают ошибки на своем пути к успеху.
Общество должно понимать, что неудачи — это часть процесса обучения и инноваций.
Объединение различных точек зрения и экспертиз может привести к более эффективным решениям и новым идеям.
В конечном итоге, поддержка и понимание гениев может не только изменить ход истории, но и улучшить качество жизни для всего человечества. Каждое новое открытие или идея могут стать катализатором для значительных изменений и прогресса.
(2x = y*a+2n)
Свидетельство о публикации №125082905028