Last active
June 28, 2018 11:47
-
-
Save allatambov/320e3482af860af639e445584ed2fbbb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# маленькая база с текстами | |
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