Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 09.04.2024
Сообщений: 2

Работа с natasha или pymorphy2

09.04.2024, 11:11. Показов 1119. Ответов 1

Студворк — интернет-сервис помощи студентам
Несколько дней мучаюсь, помогите написать код с использованием этих библиотек
У меня есть много небольших русских текстов в эксель документе, нужно в этих текстах дополнительно все слова перевести в начальную форму (именительный падеж, единственное число, инфинитив для глаголов)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
from nltk.corpus import stopwords
import re
import openpyxl
 
stop_words = stopwords.words('russian')
 
def load():
    data = {'key': [], 'news': []}
 
    wb = openpyxl.load_workbook("new_news.xlsx")
    sheet = wb.active
 
    for row in sheet.iter_rows(min_row=1):  
        key = row[0].value
        news = row[1].value  
        if key and news:
            data['key'].append(key)
            data['news'].append(news) 
             
    return data
 
 
def cleaner(text, stop_words):
    cleaned_news = []
    for news_item in text:
        news_item = news_item.lower() # Приводим каждую новость к нижнему регистру
        news_item = ' '.join(word_tokenize(news_item)) # Разделяем текст на слова и объединяем обратно в строку
        news_item = re.sub( r'\b\d+\b', ' digit ', news_item )# Заменяем все числа на строку 'digit'
        news_item = re.sub( r'\bdigit\b', ' число ', news_item )# Исправляем проблему с словом 'digit'
        news_item = re.sub( r'[.,\(\)\[\]]', '', news_item ) # Убираем запятые, точки, кавычки и скобки
        lemmatizer = WordNetLemmatizer() # Чикаем окончания
        news_item = ' '.join([lemmatizer.lemmatize(word) for word in news_item.split() if word not in stop_words]) # Убираем все лишнее
        cleaned_news.append(news_item)
    return cleaned_news
 
data = load()
cleaned_news = cleaner(data['news'], stop_words)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.04.2024, 11:11
Ответы с готовыми решениями:

Pymorphy2: как изменить вид глагола с совершенного на несовершенный или обратно?
Как изменить вид глагола с совершенного на несовершенный или обратно? inflect только производит сравнение: выводит либо содержимое parse...

Yargy natasha
как скачать yargy? pip install yargy не помогает

установка pymorphy2
Всем доброго времени суток, столкнулся с проблемой. Очень нужна библиотека pymorphy2. Система Windows 8 64 bit пакет Anaconda Python...

1
 Аватар для Evetester
1 / 1 / 1
Регистрация: 15.10.2021
Сообщений: 7
13.04.2024, 07:54
вот глянь, возможно поможет, код подразумевает что в таблице файла существуют две колонки с названиями "key" и "news"...:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import re
import openpyxl
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
 
def load(file_name):
    wb = openpyxl.load_workbook(file_name)
    sheet = wb.active
 
    data = {'key': [], 'news': []}
    for row in sheet.iter_rows(min_row=1):
        key = row[0].value
        news = row[1].value
        if key and news:
            data['key'].append(key)
            data['news'].append(news)
    return data
 
def cleaner(text, stop_words):
    cleaned_news = []
    for news_item in text:
        news_item = news_item.lower()
        news_item = ' '.join(word_tokenize(news_item))
        news_item = re.sub(r'\b\d+\b', ' digit ', news_item)
        news_item = re.sub(r'\bdigit\b', ' число ', news_item)
        news_item = re.sub(r'[.,\(\)\[\]]', '', news_item)
        lemmatizer = WordNetLemmatizer()
        news_item = ' '.join([lemmatizer.lemmatize(word) for word in news_item.split() if word not in stop_words])
        cleaned_news.append(news_item)
    return cleaned_news
 
data = load("new_news.xlsx")
 
cleaned_news = cleaner(data['news'], stopwords.words('russian'))
print(cleaned_news)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2024, 07:54
Помогаю со студенческими работами здесь

Ошибка pymorphy2
Ребят, добрый день подскажите в чем проблема. Установил pymorphy2 выходит ошибка при выводе текста ...

Изменение лица в pymorphy2
Доброго времени. Необходимо изменить лицо повествования в тексте, но по какой-то причине inflect возвращает None Русский dict...

Проблема с библиотекой pymorphy2
import pymorphy2 morph = pymorphy2.MorphAnalyzer() morph.parse('День') Выдает такую ошибку: AttributeError: module...

Pymorphy2, метод класса
Добрый день, коллеги! Работаю с pymorphy2. В мануале написано, что: "Экземпляры класса MorphAnalyzer обычно занимают порядка 15Мб...

Спряжение глагола pymorphy2
Добрый день! Подскажите как сделать спряжение глагола "Осталась" в зависимости от числительного import pymorphy2 morph =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru