예제 #1
0
파일: util.py 프로젝트: anssar/Sber-ml
def stemmer(X):
    stemmer_obj = snowballstemmer.RussianStemmer()
    ret = []
    for x in X:
        retx = []
        for word in x:
            retxx = stemmer_obj.stemWord(word)
            retx.append(retxx)
        ret.append(retx)
    return ret
예제 #2
0
def tagger(input_text):
    tags=[]
    def sigmoid(x):
        return 1/(1+n.exp(-1*x))

    stop_list = 'но и с от по над в об у'.split()
    stemmer = sn.RussianStemmer()

    #загружаем результат обучения
    synapse_file = 'synapses.json'
    with open(synapse_file) as data_file:
        synapse = json.load(data_file)
        W_1 = n.asarray(synapse['W_1'])
        W_2 = n.asarray(synapse['W_2'])
        clean_st = synapse['clean_st']
    try:
        Z=[]
        tests = [input_text]
        for i in tests:
            #print('текст: ',i)
            b=[1]# *тут первые единицы для W_1_0 нужны
            i=i.lower()
            a = i.split()
            for word in a:
                if word in stop_list:
                    a.remove(word)
            a_stem = (stemmer.stemWords(a))
            #print('стеммированная строка: ',a_stem)
            words_in_one_text = len(a_stem)
            for j in clean_st:
               b.append(a_stem.count(j)/words_in_one_text)
            Z.append(b)


        tst_in = Z
        L1 = sigmoid(n.dot(tst_in,W_1))
        L2 = sigmoid(n.dot(L1,W_2))
        #print(L2)

        L2 = L2[0]
        cap = 0.6

        if L2[0]>cap:
            tags.append('#политика')
        elif L2[1]>cap:
            tags.append('#спорт')
        elif L2[2]>cap:
            tags.append('#экономика')
    except Exception:
        tags.append('#none')


    return tags
예제 #3
0
    def stemming(self, text_without_punctuation):
        """Stemming text"""

        if self.lang == 2:
            stemmer = snowballstemmer.RussianStemmer()
        else:
            stemmer = snowballstemmer.EnglishStemmer()

        self.stemmed_text = []
        for sentence in text_without_punctuation:
            self.stemmed_text.append(" ".join(
                [stemmer.stemWord(i) for i in sentence.split()]))
        self.remove_stop_words()
예제 #4
0
import re
from collections import Counter

import snowballstemmer

from settings import NUM_WORDS

# все, что не является русскими буквами, будет удаляться из текста
char_filter = re.compile('[^А-я ]')

stemmer = snowballstemmer.RussianStemmer()

# чтобы каждый раз не получать стемму слова алгоритмом, можно записывать их в словарь и потом брать оттуда
stem_cache = dict()


def get_stem(word):
    """
    возвращает стемму слова

    поскольку в русском языке огромное количество различных форм слов, правильнее будет использовать их стеммы (основы)
    для заполнения словаря. Используя такой подход, мне удалось повысить точность на тестовой выборке
    на 9% (с 65 до 74), что на самом деле, не смотря на низкую цифру, является большим приростом.

    примеры:

    >>> from utils.tokenizer import get_stem
    >>> get_stem('проектный')
    ... 'проекнт'
    >>> get_stem('использующий')
    ... 'использ'
예제 #5
0
def stemming_user_description(row):
    if (row["user lang"] == "ca" or row["user lang"] == "eu"):
        stemmer = snowballstemmer.SpanishStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["removed_stopwords"].split()
        ])
    if (row["user lang"] == "da"):
        stemmer = snowballstemmer.DanishStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "nl"):
        stemmer = snowballstemmer.DutchStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "en" or row["user lang"] == "fi"):
        stemmer = snowballstemmer.EnglishStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "fu"):
        stemmer = snowballstemmer.FinnishStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "fr"):
        stemmer = snowballstemmer.FrenchStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "de"):
        stemmer = snowballstemmer.GermanStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "hu"):
        stemmer = snowballstemmer.HungarianStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "it"):
        stemmer = snowballstemmer.ItalianStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "no"):
        stemmer = snowballstemmer.NorwegianStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "pt"):
        stemmer = snowballstemmer.PortugueseStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "ro"):
        stemmer = snowballstemmer.RomanianStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "ru"):
        stemmer = snowballstemmer.RussianStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    if (row["user lang"] == "es"):
        stemmer = snowballstemmer.SpanishStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
    #if(row["user lang"]=="sv"):
    #    stemmer = snowballstemmer.SwedishStemmer(word)
    #    return ' '.join([stemmer.stemWord() for word in row["removed_stopwords"].split()])
    if (row["user lang"] == "tr"):
        stemmer = snowballstemmer.TurkishStemmer()
        return ' '.join([
            stemmer.stemWord(word)
            for word in row["user description2"].split()
        ])
예제 #6
0
'''
1-я часть. 
Работа по векторизации слов в тексте
'''

texts = []
join_texts = ''
for i in training_set:
    text = i.get('text')
    texts.append(text)
    join_texts = join_texts + text

split_words_texts = join_texts.split()

#выделяем корни слов(стемминг)
stemmer = sn.RussianStemmer()

#получаем очищенный и стеммированный текст
S = ' '.join(stemmer.stemWords(split_words_texts))
S = S.lower()

#строим словарь всех нормализ слов всех текстов (просто присваиваем номера словам)
V = {}
m = 1
for w in S.split():
    V.update({w: m})
    m += 1

#удаляем повторяющиеся слова
st = S.split()
clean_st = []