Texte de cluster en Python

from janome.tokenizer import Tokenizer
from sklearn.feature_extraction.text import TfidfVectorizer
from scipy.cluster.hierarchy import linkage, fcluster

Lecture des données

On suppose qu'un document est décrit sur une ligne dans input.txt.

with open('input.txt') as f:
    org_sentences = f.readlines()

Analyse morphologique

Séparez chaque document avec un espace demi-largeur pour chaque mot.

t = Tokenizer()
sentences = []
for s in org_sentences:
    tmp = ' '.join(t.tokenize(s, wakati=True))
    sentences.append(tmp)

Vectorisation

Cette fois, Tf-Idf est utilisé pour vectoriser le document. Il existe d'autres moyens tels que BoW / LSI / LDA / Word2Vec average / Doc2Vec / FastText average / BERT.

vectorizer = TfidfVectorizer(use_idf=True, token_pattern=u'(?u)\\b\\w+\\b')
vecs = vectorizer.fit_transform(sentences)
v = vecs.toarray()

Calcul de distance

La distance cosinus, courante dans les tâches de traitement du langage naturel, définit la distance entre chaque vecteur. Sur la base de cette distance, les documents sont regroupés en clusters par regroupement hiérarchique (méthode de liaison unique).

z = linkage(v, metric='cosine')

Clustering

Un exemple dans lequel le cluster final est déterminé avec une distance de 0,2 comme seuil. Si le nombre de documents devient énorme, le calcul de la distance prend un temps considérable. Par conséquent, si vous souhaitez essayer plusieurs seuils, vous devez vérifier en enregistrant le résultat du calcul de distance ci-dessus dans le pickle. Il est également possible d'utiliser le nombre de clusters comme seuil. Le numéro de cluster de chaque document est stocké dans le groupe.

group = fcluster(z, 0.2, criterion='distance')
print(group)

Recommended Posts

Texte de cluster en Python
Traitement de texte avec Python
Traitement de texte UTF8 avec python
Parler avec Python [synthèse vocale]
GOTO en Python avec Sublime Text 3
Extraire du texte d'images avec Python
Trier les gros fichiers texte en Python
Lire et écrire du texte en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Essayez de fouiller votre journal avec Python
Lire des caractères dans des images avec Python OCR
Liste triée en Python
AtCoder # 36 quotidien avec Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python