-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
61 lines (47 loc) · 2.49 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import pandas as pd
from catboost.text_processing import Tokenizer
from sklearn.feature_extraction.text import TfidfVectorizer
import nltk
from sklearn.cluster import DBSCAN
from rutermextract import TermExtractor
# nltk.download("stop_words")
stop_words = list(nltk.corpus.stopwords.words("russian"))
stop_words.extend(["достоинства", "недостатки", "комментарий"])
def tokenize_list(lst):
'''
Принимает на вход список предложений
Возвращает массив (список списков) очищенных данных - без пунктаации и в нижнем регистре
'''
return [Tokenizer(separator_type='BySense', token_types=['Word'], languages=['russian', 'english']).tokenize(
text) for text in lst]
def tokenizer(text):
'''
Принимает на вход список предложений
Возвращает массив (список списков) очищенных данных - без пунктаации и в нижнем регистре
'''
return Tokenizer(separator_type='BySense', token_types=['Word'], languages=['russian', 'english']).tokenize(
text)
def sans_stops(lst):
return [[word.lower() for word in text if word.lower() not in stop_words] for text in lst]
print("Loading data...")
rawdata = pd.read_csv('outA.csv', engine='python', delimiter=';', names=['Page', 'Date', 'Text'], parse_dates=['Date'])
rawdata.drop_duplicates(['Text'], inplace=True)
print("Tokenizing and removing stopwords...")
rawdata["Sans_stops"] = sans_stops(tokenize_list(rawdata.Text.to_list()))
print("Extracting terms...")
rawdata["Extracted terms"] = [TermExtractor()(" ".join(text), strings=True)[:5] for text in
rawdata["Sans_stops"].to_list()]
extracted_terms = rawdata["Extracted terms"].to_list()
extracted_terms = [" ".join(text) for text in extracted_terms]
print(extracted_terms)
# flat_extracted_terms = [item for sublist in extracted_terms for item in sublist]
# print(flat_extracted_terms)
# Проведём векторизацию
vectorizer = TfidfVectorizer(min_df=1, tokenizer=tokenizer, stop_words=stop_words, decode_error='ignore',
ngram_range=(1, 3), norm='l2')
# Создадим матрицу векторов
print("Creating TF-IDF matrix...")
tfidf_matrix = vectorizer.fit_transform(extracted_terms)
print("Clustering...")
clustered = DBSCAN().fit(tfidf_matrix)
print(clustered.labels_)