Skip to content

Instantly share code, notes, and snippets.

@allatambov
Last active June 28, 2018 11:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save allatambov/320e3482af860af639e445584ed2fbbb to your computer and use it in GitHub Desktop.
Save allatambov/320e3482af860af639e445584ed2fbbb to your computer and use it in GitHub Desktop.
# маленькая база с текстами
import pandas as pd
df = pd.read_csv('articles.csv', encoding= 'UTF-8')
df
df.text[3]
# пока сами - взять функцию normalize() из прошлой части
# и создать новый столбец с text_norm с нормализованным текстом
# с помощью apply
import string
def normalize(x):
to_remove = string.punctuation + '«»—'
translator = str.maketrans('', '', to_remove)
res = x.translate(translator)
res = res.lower()
return res
df['text_norm'] = df.text.apply(normalize)
# потом написать функцию split_text() для разбиения текста (строки) по пробелу
# пусть функция разбивает строку по пробелу, удаляет лишние пробелы в получившихся словах
# и возвращает список слов
# с помощью apply применить split_text() к столбцу text_norm -
# создать новый столбец words
def split_text(text):
res = text.split(" ")
final = [r.strip() for r in res]
return final
df['words'] = df.text_norm.apply(split_text)
# написать функцию filter_words() для разбения текста на слова
# с помощью tokenize из nltk и для фильтрации стоп-стоп
# функция должна возвращать список слов без стоп-слов
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords
def filter_words(text, lang = 'russian'):
wordsFiltered = []
stopWords = set(stopwords.words(lang))
words = word_tokenize(text)
for w in words:
if w not in stopWords:
wordsFiltered.append(w)
return wordsFiltered
df
# переходим к pymorphy
# https://pymorphy2.readthedocs.io/en/latest/
# простые примеры (пока общие, не связаны с базой выше)
import pymorphy2
morph = pymorphy2.MorphAnalyzer()
p = morph.parse('стекла')[0]
p.lexeme
p.normal_form
p.tag
p.tag.POS
p.inflect({'ablt'})
morph.parse('наступающий')[0].normal_form
butyavka = morph.parse('бутявка')[0]
butyavka.make_agree_with_number(3).word
morph.parse('стекло')
# возвращаясь к нашим текстам
s = morph.parse('сопротивление')[0]
s
lexemes = [s.lexeme[i].word for i in range(len(s.lexeme))]
lexemes
# напишите код, который выбирает только те строки из df,
# где в words встречаются слова из списка лексем
with_keys = []
for w in df.words:
if w in lexemes:
with_keys.append(w)
# поиск по ключевым словам с учетом вариативности форм слова
# альтернатива: привести все слова к начальной форме,
# а потом искать среди них слова (более простой способ,
# но бывают разные ситуации)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment