Веса слов

как можно определить вес слова по буквам ?
определяем частоту букв в наборе слов из файла грам.txt ->

здесь будет список разных биграмм из наборов случайных слов поиск
это наверно так и есть что или пока нужно найти принять определить
верно проверить невероятно сложно чтобы понять немного точнее данный расчёт
частоты буквенных вхождений словесной лексики здесь слишком мало строк для этого


from collections import Counter
import string

def extract_words(filename):
    with open(filename, 'r', encoding='utf-8') as file:
        text = file.read()

    # Удаляем знаки препинания из текста, кроме апострофа
    for punct in string.punctuation:
        if punct != "'":
            text = text.replace(punct, " ")

    # Разбиваем текст на слова
    words = text.lower().split()

    return words

def calculate_word_frequency(words):
    total_freq = Counter("".join(words))
    total_words = sum(len(word) for word in words)

    letter_freq = {letter: freq/total_words*100 for letter, freq in total_freq.items()}

    return letter_freq

# Пример использования
filename = "грам.txt"

words = extract_words(filename)
letter_frequency = calculate_word_frequency(words)

for letter, freq in letter_frequency.items():
    print(f"{letter}: {freq:.2f}%")



получаем список частот букв -
з: 1.62%
д: 2.83%
е: 7.29%
с: 6.48%
ь: 2.83%
б: 2.02%
у: 1.62%
т: 7.29%
п: 2.83%
и: 6.07%
о: 12.55%
к: 3.64%
р: 4.86%
а: 4.86%
н: 9.31%
ы: 2.43%
х: 1.62%
г: 1.21%
м: 2.02%
в: 3.64%
л: 4.05%
ч: 2.43%
й: 2.02%
э: 0.81%
ж: 1.21%
я: 1.62%
ё: 0.40%
ш: 0.40%



теперь можно по этому принципу посчитать среднюю частоту слов


from collections import Counter
import string

def extract_words(filename):
    with open(filename, 'r', encoding='utf-8') as file:
        text = file.read()

    for punct in string.punctuation:
        if punct != "'":
            text = text.replace(punct, " ")

    words = text.lower().split()

    return words

def calculate_word_frequency(words):
    total_freq = Counter("".join(words))
    total_words = sum(len(word) for word in words)

    letter_freq = {letter: freq/total_words*100 for letter, freq in total_freq.items()}

    return letter_freq

def calculate_word_weights(words, letter_frequency):
    word_weights = {}

    for word in words:
        word_freq = [letter_frequency.get(letter, 0) for letter in word]
        avg_freq = sum(word_freq) / len(word)
        word_weights[word] = avg_freq

    return word_weights

# Пример использования
filename = "грам.txt"

words = extract_words(filename)
letter_frequency = calculate_word_frequency(words)
word_weights = calculate_word_weights(words, letter_frequency)

for word, weight in word_weights.items():
    print(f" '{word}':    {weight:.2f}")





 'здесь':     4.21
 'будет':     4.21
 'список':    6.34
 'разных':    4.12
 'биграмм':   3.30
 'из':        3.85
 'наборов':    7.11
 'случайных':  3.87
 'слов':      6.68
 'поиск':     6.32
 'это':       6.88
 'наверно':   7.40
 'так':       5.26
 'и':         6.07
 'есть':      5.97
 'что':       7.42
 'или':       5.40
 'пока':      5.97
 'нужно':     6.80
 'найти':     5.91
 'принять':   4.97
 'определить':  5.79
 'верно':       7.53
 'проверить':   5.80
 'невероятно':  7.57
 'сложно':      7.69
 'чтобы':      5.34
 'понять':     6.07
 'немного':    7.75
 'точнее':     7.69
 'данный':     5.13
 'расчёт':     4.39
 'частоты':    6.19
 'буквенных':  4.54
 'вхождений':  5.17
 'словесной':  7.15
 'лексики':    5.32
 'слишком':    5.03
 'мало':       5.87
 'строк':      6.96
 'для':        2.83
 'этого':      6.88





другой похожий алгоритм с готовыми весами букв -


letter_frequencies = {
    'о': 9.28, 'а': 8.66,
    'е': 8.10, 'и': 7.45,
    'н': 6.35, 'т': 6.30,
    'р': 5.53, 'с': 5.45,
    'л': 4.32, 'в': 4.19,
    'к': 3.47, 'п': 3.35,
    'м': 3.29, 'у': 2.90,
    'д': 2.56, 'я': 2.22,
    'ы': 2.11, 'ь': 1.90,
    'з': 1.81, 'б': 1.51,
    'г': 1.41, 'й': 1.31,
    'ч': 1.27, 'ю': 1.03,
    'х': 0.92, 'ж': 0.78,
    'ш': 0.60, 'ц': 0.52,
    'щ': 0.30, 'ф': 0.40,
    'э': 0.33,  'ъ': 0.04,
    'ё': 0.03
}

def calculate_weight(word):
    word = word.lower()
    total_frequency = sum(letter_frequencies.get(letter, 0) for letter in word)
    weight = total_frequency / len(word)
    return weight

# Пример использования
word = "невероятно"

weight = calculate_weight(word)
print(f"Вес слова   '{word}'   {weight}")



Вес слова   'невероятно'   6.57



-------------------------------------------------------




веса векторов между слов на основе gensim.models



from gensim.models import Word2Vec

# Загрузка файла utf-8
with open('грам.txt', 'r', encoding='utf-8') as file:
    text = file.read()

# Разделение слов
words = text.split()

# Обучение модели Word2Vec на тексте файла
model = Word2Vec([words], vector_size=100, window=5, min_count=1, workers=4)

# Получение всех пар слов в строке файла
pairs = [(words[i], words[i+1]) for i in range(len(words)-1)]

# Вывод векторов и расстояний для каждой пары слов
for word1, word2 in pairs:
    vector1 = model.wv[word1]
    vector2 = model.wv[word2]
    vector_distance = model.wv.distance(word1, word2)

    print(f"вектор ->   '{word1}'  +  '{word2}':  =  {vector_distance}")






вектор ->   'здесь'  +  'будет':     =  0.9159514158964157
вектор ->   'будет'  +  'список':    =  1.0009244489483535
вектор ->   'список'  +  'разных':   =  0.9994549340917729
вектор ->   'разных'  +  'биграмм':  =  0.8805310130119324
вектор ->   'биграмм'  +  'из':       =  1.1489791125059128
вектор ->   'из'  +  'наборов':       =  0.9343783780932426
вектор ->   'наборов'  +  'случайных':  =  1.097934477031231
вектор ->   'случайных'  +  'слов':  =  0.9730002321302891
вектор ->   'слов'  +  'мало':       =  1.1356839686632156
вектор ->   'мало'  +  'поиск':      =  0.8266819268465042
вектор ->   'поиск'  +  'чего':      =  0.95869430154562
вектор ->   'чего'  +  'это':        =  0.9870359757915139
вектор ->   'это'  +  'наверно':     =  0.9847016679123044
вектор ->   'наверно'  +  'так':     =  0.9552917145192623
вектор ->   'так'  +  'и':           =  1.1443192809820175
вектор ->   'и'  +  'что':           =  1.114928513765335
вектор ->   'что'  +  'тогда':       =  1.1136391386389732
вектор ->   'тогда'  +  'есть':      =  0.9801502116024494
вектор ->   'есть'  +  'что':        =  0.9905351540073752
вектор ->   'что'  +  'или':         =  0.9955049818381667
вектор ->   'или'  +  'пока':        =  0.9008314982056618
вектор ->   'пока'  +  'нужно':      =  0.8510173559188843
вектор ->   'нужно'  +  'найти':     =  0.9629067555069923
вектор ->   'найти'  +  'принять':   =  1.0835110992193222
вектор ->   'принять'  +  'определить':  =  0.940118346363306
вектор ->   'определить'  +  'верно':  =  0.9281177446246147
вектор ->   'верно'  +  'проверить':  =  1.051510013639927
вектор ->   'проверить'  +  'невероятно':  =  0.8896315917372704
вектор ->   'невероятно'  +  'сложно':  =  0.9973461648914963
вектор ->   'сложно'  +  'чтобы':    =  0.9926906893961132
вектор ->   'чтобы'  +  'понять':    =  1.2375228554010391
вектор ->   'понять'  +  'немного':  =  0.9729314390569925
вектор ->   'немного'  +  'точнее':  =  1.032123003154993
вектор ->   'точнее'  +  'данный':   =  0.9089153334498405
вектор ->   'данный'  +  'расчёт':   =  1.0066691441461444
вектор ->   'расчёт'  +  'частоты':  =  0.8508281111717224
вектор ->   'частоты'  +  'буквенных':  =  1.1485106199979782
вектор ->   'буквенных'  +  'вхождений':  =  1.1022704392671585
вектор ->   'вхождений'  +  'словесной':  =  1.00804284773767
вектор ->   'словесной'  +  'лексики':  =  1.0598921217024326
вектор ->   'лексики'  +  'здесь':  =  0.8045419156551361
вектор ->   'здесь'  +  'слишком':  =  0.900634653866291
вектор ->   'слишком'  +  'мало':   =  0.9413843750953674
вектор ->   'мало'  +  'строк':     =  0.9455307424068451
вектор ->   'строк'  +  'для':      =  0.880500927567482
вектор ->   'для'  +  'этого':      =  1.0020318638999015
вектор ->   'этого'  +  'действия':  =  0.8922931179404259



следующая программа определяет частоту слов по числу вхождений в тексте




import string

# Открыть текстовый файл
with open("файл.txt", "r", encoding='utf-8') as file:
    # Прочитать текст из файла
    text = file.read()

# Удалить знаки пунктуации
translator = str.maketrans("", "", string.punctuation)
clean_text = text.translate(translator)

# Разбить текст на слова
words = clean_text.split()

# Создать пустой словарь для хранения частот слов
word_frequencies = {}

# Посчитать каждое слово в тексте и добавить его в словарь
for word in words:
    if word.lower() in word_frequencies:
        word_frequencies[word.lower()] += 1
    else:
        word_frequencies[word.lower()] = 1

# Вывести и упорядочить результаты
print("Частота всех слов:")
for word, frequency in sorted(word_frequencies.items(), key=lambda item: item[1], reverse=True):
    print(word, frequency)








делаем список слов из текста и сохраняем в файл -


with open('дтт.txt', 'r', encoding='utf-8') as f:
    text = f.read()

words = text.split()
words = [word for word in words if not word.isdigit()]

sorted_words = sorted(set(words))

with open('слова.txt', 'w', encoding='utf-8') as f:
    f.write('\n'.join(sorted_words))






делаем словарь из набора текстов из файлов *.txt



import os
import re

# Список для хранения всех слов
words = []

# Поиск и обработка всех файлов .txt в текущем каталоге
for file_name in os.listdir():
    if file_name.endswith(".txt"):
        # Загрузка файла
        with open(file_name, 'r', encoding='utf-8') as file:
            # Чтение содержимого файла
            content = file.read()
            
            # Очистка от лишних символов
            cleaned_content = re.sub(r'[^\w\s]', '', content)
            
            # Разделение текста на слова
            word_list = cleaned_content.lower().split()
            
            # Добавление слов в список
            words.extend(word_list)

# Удаление повторяющихся слов
unique_words = list(set(words))

# Сортировка списка по алфавиту
sorted_words = sorted(unique_words)

# Сохранение списка в файле "словарь.txt"
with open("словарь.txt", "w", encoding='utf-8') as file:
    for word in sorted_words:
        file.write(word + "\n")


Рецензии