Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2024, 14:03   #1
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,115
По умолчанию Прогнозирование завершения слов=словосочетаний

здравствуйте прогнозирование- штука тёмная))
но то что под капотом у одного из простых примеров
Код:
import nltk # pip install nltk
from nltk.util import ngrams
from collections import defaultdict

# Assume we have a large corpus of text data
with open("i:/replaces/AllDoc.txt", 'r', encoding='utf-8') as f_in:  # исходные файлы
    text_data = f_in.read()


# Create a list of all possible words in the text data
words = text_data.split()

# Build an n-gram model with n=2 (bi-grams)
bigrams = list(ngrams(words, 2))

# Create a frequency distribution of the bi-grams
freq_dist = defaultdict(int)
for bi_gram in bigrams:
    freq_dist[bi_gram[0]] += 1

# Now we can use the frequency distribution to predict the next word based on the current word
current_word = "значительный"
predictions = [word for word, freq in freq_dist.items() if word.startswith(current_word[len(current_word)-1])]

print(predictions)
ни в какие ворота
выдало ответ ['йенах,', 'йод,'] - тушите свет
есть у кого пример кода получше, в датасете закондательство РФ, спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 08.07.2024, 02:02   #2
MakarovDs
Пользователь
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 85
По умолчанию

Ципихович Эндрю,
Прогнозирование следующего слова на основе предыдущего слова с использованием n-грамм — довольно сложная задача, особенно для юридических текстов, которые часто содержат сложную терминологию и структуру.

Вот улучшенный пример кода, который может дать более релевантные предсказания для юридических текстов:
Код:
import nltk
from nltk.util import ngrams
from collections import defaultdict
from nltk.lm import NgramLanguageModel

# Загрузите данные набора законов РФ
with open("i:/replaces/AllDoc.txt", 'r', encoding='utf-8') as f_in:
    text_data = f_in.read()

# Токенизируйте текст на слова
words = nltk.word_tokenize(text_data)

# Создайте модель языка n-грамм с n=3 (триграммы)
n = 3
model = NgramLanguageModel(n, words)

# Получите вероятностное распределение следующего слова на основе текущего слова
current_word = "значительный"
next_words = model.generate(current_word, n-1)

# Выведите 5 самых вероятных следующих слов
for word, prob in next_words[:5]:
    print(word, prob)
Этот код использует модель языка n-грамм из библиотеки NLTK, которая более совершенна, чем просто подсчет частот. Модель языка n-грамм учитывает не только частоту появления n-грамм, но и их последовательность. Это приводит к более точным прогнозам, особенно для длинных и сложных текстов.

Обратите внимание, что для получения хороших результатов важно иметь большой и представительный набор данных. Рекомендуется использовать как можно больше юридических текстов для обучения модели языка.
MakarovDs вне форума Ответить с цитированием
Старый 08.07.2024, 15:41   #3
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,115
По умолчанию

спасибо за ответ, опробовать не смог, гуглёж возникающих ошибок подсказывает:
В последних версиях NLTK (Natural Language Toolkit) класс NgramLanguageModel был удален в пользу более гибкого и модульного подхода к языковому моделированию
можете исправить?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 08.07.2024, 23:59   #4
MakarovDs
Пользователь
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
спасибо за ответ, опробовать не смог, гуглёж возникающих ошибок подсказывает:
В последних версиях NLTK (Natural Language Toolkit) класс NgramLanguageModel был удален в пользу более гибкого и модульного подхода к языковому моделированию
можете исправить?
Код:
import nltk
from nltk.lm.preprocessing import padded_everygram_pipeline
from nltk.lm import MLE

# Загрузите данные набора законов РФ
with open("i:/replaces/AllDoc.txt", 'r', encoding='utf-8') as f_in:
    text_data = f_in.read()

# Токенизируйте текст на слова
words = nltk.word_tokenize(text_data)

# Создайте конвейер предварительной обработки для создания всех возможных n-грамм с нулевым заполнением
# (с n=3 для триграмм)
n = 3
padding_pipeline = padded_everygram_pipeline(n)

# Обучите модель языка MLE (максимальное правдоподобие) на предварительно обработанных данных
model = MLE(n)
model.fit(padding_pipeline(words), vocabulary=set(words))

# Получите вероятностное распределение следующего слова на основе текущего слова
current_word = "значительный"
next_words = model.generate(current_word, n-1)

# Выведите 5 самых вероятных следующих слов
for word, prob in next_words[:5]:
    print(word, prob)
Используй Gemeni, zzzcode, ChatGPT они помогут...

Последний раз редактировалось MakarovDs; 09.07.2024 в 00:04.
MakarovDs вне форума Ответить с цитированием
Старый 09.07.2024, 10:34   #5
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,115
По умолчанию

MakarovDs, а у вас разве не было ошибки при запуске кода
Traceback (most recent call last): File "C:\pythonProject\sudrf.ru1.py" , line 16, in <module> padding_pipeline = padded_everygram_pipeline(n) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: padded_everygram_pipeline() missing 1 required positional argument: 'text'
??
джипити мне подсказало
Сообщение об ошибке указывает на то, что в функции Padded_everygram_pipeline отсутствует необходимый текст позиционного аргумента. Эта функция ожидает два аргумента: n и текст.
Вам нужно передать слова в функцию Padded_everygram_pipeline.
и исправило код.......
только толку нет
я его запустил - жду уже минут 15, а ведь речь про подсказки при вводе текста и тогда это время неприемлемо для этой задачи, такие дела........
Ципихович Эндрю вне форума Ответить с цитированием
Старый 09.07.2024, 10:49   #6
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,115
По умолчанию

понял 1 раз нужно запускать код:
Код:
import nltk
from nltk.lm.preprocessing import padded_everygram_pipeline
from nltk.lm import MLE

# Загрузите данные набора законов РФ
with open("i:/replaces/AllDoc.txt", 'r', encoding='utf-8') as f_in:
    text_data = f_in.read()

# Токенизируйте текст на слова
words = nltk.word_tokenize(text_data)

# Создайте конвейер предварительной обработки для создания всех возможных n-грамм с нулевым заполнением
# (с n=3 для триграмм)
n = 3
train_data, vocab = padded_everygram_pipeline(n, words)

# Обучите модель языка MLE (максимальное правдоподобие) на предварительно обработанных данных
model = MLE(n)
model.fit(train_data, vocab)

# Сохраните обученную модель в файл my_model.pkl
model.save_to_file('my_model.pkl')

# Получите вероятностное распределение следующего слова на основе текущего слова
current_word = "значительный"
next_words = model.generate(current_word, n-1)

# Выведите 5 самых вероятных следующих слов
for word, prob in next_words[:5]:
    print(word, prob)
впоследствии - не в первый раз нужно запускать код

Код:
import nltk
from nltk.lm import MLE
# Загрузите сохраненную модель
model = MLE.load_from_file('my_model.pkl')
# Сгенерируйте текст
current_word = "значительный"
# n-грамма, 2=биграмма, 3=триграмма
next_words = model.generate(current_word, 2)
# Выведите результат
for word, prob in next_words:
    print(word, prob)
одним словом пробую

Последний раз редактировалось Ципихович Эндрю; 09.07.2024 в 10:56.
Ципихович Эндрю вне форума Ответить с цитированием
Старый 09.07.2024, 16:07   #7
DeepFlake
Пользователь
 
Регистрация: 16.05.2024
Сообщений: 74
По умолчанию

to ЭЦ: алгоритм, который в сообщении 1, мне кажется, тоже неплохой (на подсчёте частоты появления в текстах определённой пары слов), надо только его аккуратно запрограммировать и натаскать.
DeepFlake вне форума Ответить с цитированием
Старый 09.07.2024, 16:25   #8
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,115
По умолчанию

я пока застрял на
Код:
import nltk
print("nltk версия:", nltk.__version__)
твердит: nltk версия: 3.8.1
я ожидаю увидеть 3.11.1, выпущенную 24 мая 2024 года - как этого добиться?
всё перепробовал:
# pip install nltk --upgrade обновить nltk
# pip uninstall nltk удалить nltk
# pip install nltk установить nltk
# pip list | grep nltk проверить установленную версию nltk
Ципихович Эндрю вне форума Ответить с цитированием
Старый 09.07.2024, 17:11   #9
DeepFlake
Пользователь
 
Регистрация: 16.05.2024
Сообщений: 74
По умолчанию

если посмотреть сайт проекта www.nltk.org , то там внизу слева написано что последняя версия 3.8.1 , так что всё верно.
При помощи NLTK удобно подготавливать лексикон (набор слов из предметной области) и тексты для анализа.
Разбиение на лексемы, удаление незначащих слов, "нормализация" (stemming)
https://habr.com/ru/companies/otus/articles/774498/
DeepFlake вне форума Ответить с цитированием
Старый 09.07.2024, 17:20   #10
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,115
По умолчанию

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
если посмотреть сайт проекта www.nltk.org , то там внизу слева написано что последняя версия 3.8.1
ок - одной проблемой меньше.......
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с макросом: поиск и подсчет словосочетаний в примечаниях Alex_dolg Microsoft Office Word 3 05.11.2016 19:19
Прогнозирование осадков TURIK Паскаль, Turbo Pascal, PascalABC.NET 1 20.12.2011 17:56
Заплачу за создание системы для выбора правильного перевода слов (а). Словосочетаний. aquatell Фриланс 0 10.05.2011 10:44
прогнозирование excel dron7sem Фриланс 0 07.05.2011 23:57
Анализ словосочетаний. PUH Помощь студентам 19 11.06.2008 01:53