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
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
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()
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('использующий') ... 'использ'
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() ])
''' 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 = []