In [3]:
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from scipy import sparse
from tqdm import tqdm
from sklearn.svm import LinearSVC

tqdm.pandas()

%matplotlib inline

In [4]:
data_dir = "/home/sabr/PycharmProjects/kaggle_competitions/sberbank/data"
train_csv = os.path.join(data_dir, "train_task1_latest.csv")
test_csv = os.path.join(data_dir, "sdsj_A_test.csv")

df = pd.read_csv(train_csv)
df.head()


Out[4]:
paragraph_id question_id paragraph question target
0 1094 46273 В отличие от рыб, земноводные (амфибии) и прес... С какого года Русское Царство перешло на летои... 0.0
1 7414 19164 В 1049 году Балдуину V удалось отнять у Герман... Кто упомянул о его первых разногласиях со Штей... 0.0
2 6744 39767 Стремление достичь предельных значений ёмкости... Как называется имеющая мировое значение эпоха ... 0.0
3 7300 36318 Первый практически пригодный двухтактный газов... Что усугублялось из-за международного давления... 0.0
4 7077 41534 Требуя от художника углубленного изучения изоб... Какой характер носят пророчества Леонардо да В... 0.0

In [16]:
from pymystem3 import Mystem
from functools import lru_cache

from nltk.corpus import stopwords
STOP_WORDS_RU = set(stopwords.words("russian"))

mystem = Mystem()

In [18]:
import re

# TOKEN_LEN_THRESHOLD = 2  # word's length should be minimum 1
rgx_remove_sym = re.compile(r'[^\w]')

# remove symbols -> split by word -> lowercase -> lemmatize -> remove stop words -> join by space
def normalize(sentence):
    tokens = []
    for word in rgx_remove_sym.sub(" ", sentence).split():
        lemma = mystem.lemmatize(word.lower())
        tokens.append(lemma)
    filtered = list(set(tokens) - STOP_WORDS_RU)
    return " ".join(filtered)

df.loc[:, "paragraph"] = df.paragraph.apply(lambda x: normalize(x))
df.loc[:, "question"] = df.question.apply(lambda x: normalize(x))


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-7dd1f4cc5555> in <module>()
     13     return " ".join(filtered)
     14 
---> 15 df.loc[:, "paragraph"] = df.paragraph.apply(lambda x: normalize(x))
     16 df.loc[:, "question"] = df.question.apply(lambda x: normalize(x))

/usr/local/lib/python3.5/dist-packages/pandas/core/series.py in apply(self, func, convert_dtype, args, **kwds)
   2353             else:
   2354                 values = self.asobject
-> 2355                 mapped = lib.map_infer(values, f, convert=convert_dtype)
   2356 
   2357         if len(mapped) and isinstance(mapped[0], Series):

pandas/_libs/src/inference.pyx in pandas._libs.lib.map_infer (pandas/_libs/lib.c:66645)()

<ipython-input-18-7dd1f4cc5555> in <lambda>(x)
     13     return " ".join(filtered)
     14 
---> 15 df.loc[:, "paragraph"] = df.paragraph.apply(lambda x: normalize(x))
     16 df.loc[:, "question"] = df.question.apply(lambda x: normalize(x))

<ipython-input-18-7dd1f4cc5555> in normalize(sentence)
     10         lemma = mystem.lemmatize(word.lower())
     11         tokens.append(lemma)
---> 12     filtered = list(set(tokens) - STOP_WORDS_RU)
     13     return " ".join(filtered)
     14 

TypeError: unhashable type: 'list'

In [ ]:


In [ ]: