[PYTHON] Word2Vec avec BoUoW

Avec traitement du langage naturel Vectorisation du langage, similitude de cos, division, apprentissage automatique ... J'ai beaucoup d'intérêts et j'essaye, mais je suis toujours frustré en chemin. .. .. ..

Même si je suis frustré, je veux l'écrire à nouveau, et je pense l'écrire comme un mémorandum pour ce moment-là.

Commençons par pourquoi vous devez utiliser BUW. Parce que c'est vague, mais j'ai fait diverses choses avec Jupyter Notebook sous Windows 10 et Anaconda, mais Mecab n'a pas bien fonctionné. .. .. .. J'ai oublié comment cela n'a pas fonctionné. .. Mais de toute façon, je me souviens juste que je n'ai pas compris.

Peut-être que Mecab-Python pour Windows ne fonctionnait pas bien.

Sur le net Mecab-Rewrite le code source Python pour Linux pour Windows et compile-le, et cela peut fonctionner! !! Même si j'obtiens les informations, je ne sais pas comment les réécrire pour Windows. .. .. ..

Est-ce aussi frustré cette fois? .. .. .. .. ..

J'ai vu un article quand je suis devenu de plus en plus réticent à m'asseoir devant un ordinateur en pensant à de telles choses.

「bash on ubuntu on Windows」

Bien. De plus, cela semble être une fonction standard de Windows 10. Je me sens plus motivé pour m'asseoir à nouveau devant l'ordinateur. Dans ce cas, Mecab-Python pour Linux peut être utilisé tel quel! !!

Je voudrais coller les résultats de diverses choses comme celle-ci.

Pour le moment, j'ai réussi ci-dessous, alors n'oubliez pas de coller le code. L'environnement est le suivant. ・ Mise à jour créative Windows10 64 bits ・ Bash sur Ubuntu sous Windows ・ Jupyter Notebook (anaconda3-4.4.0) ・ Python3.6

De plus, la plupart d'entre eux utilisent le code collé sur la page "@ enta0701" comme référence. Je vous remercie_(..) http://qiita.com/enta0701/items/87cbe783aeb44ddf41ce

Je n'ai pas pu déterminer si c'était parce que j'essayais de l'exécuter sur BUW au lieu de Mac, ou s'il y avait autre chose, mais avec le code source original, je ne pouvais pas bien lire le fichier ".txt".

(Début PostScript 16/11/2017) C'était comme si la zone autour de " __ file __`` `" ne fonctionnait pas bien. (Fin du post-scriptum)

(Début PostScript 2017/11/19) Le problème qu'une erreur se produit dans "` __file__ `` a été résolu comme suit. https://qiita.com/Chizizii/items/42a78754aa2fe6b6a29f (Fin du post-scriptum)

Après avoir essayé diverses choses, je me demande si le contenu du fichier ".txt" ne fonctionnera pas s'il est en japonais. Après cela, j'ai essayé de penser que c'était lié à UTF-8 etc., mais cela n'a pas fonctionné. .. ..

En mettant ".txt" dans la hiérarchie profonde de Windows, je me suis demandé si le chemin était trop long, abandonné le chemin dynamique, hiérarchie relativement peu profonde, ".txt" à l'endroit spécifié par le chemin fixe J'ai décidé de mettre le fichier. Parallèlement à cela, j'ai également découpé des éléments à importer.

Alors, j'ai réussi à le faire fonctionner! !!

De plus, nous l'utilisons presque tel quel, y compris les données textuelles à saisir.

Avant d'oublier, je ne collerai que le code source.

Si vous trouvez quelque chose d'étrange, veuillez le signaler. Je n'ai pas beaucoup de connaissances. ..

# -*- coding: utf-8 -*-
#Spécification du langage py3
#Source de référence http://qiita.com/enta0701/items/87cbe783aeb44ddf41ce

import os
import sys
import numpy as np
import MeCab
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

input_text = open('/mnt/c/BOW/documents.txt', 'r').read()
print(input_text)

documents = input_text.split("|")

def words(text):
    out_words = []
    tagger = MeCab.Tagger('-Ochasen')
    tagger.parse('')
    node = tagger.parseToNode(text)

    while node:
        word_type = node.feature.split(",")[0]
        if word_type in ["nom"]:
            out_words.append(node.surface)
        node = node.next
    return out_words

def vecs_array(documents):
    docs = np.array(documents)
    vectorizer = TfidfVectorizer(
        analyzer=words,
        stop_words='|',
        min_df=1,
        token_pattern='(?u)\\b\\w+\\b'
    )
    vecs = vectorizer.fit_transform(docs)
    return vecs.toarray()

tag = ["Article A", "Article B", "Article C", "Article D", "Article E", "Article F"]
cs_array = cosine_similarity(vecs_array(documents), vecs_array(documents))

for i, cs_item in enumerate(cs_array):
    print("[" + tag[i] + "]")
    cs_dic = {}
    for j, cs in enumerate(cs_item):
        if round(cs - 1.0, 5) != 0:
            cs_dic[tag[j]] = cs
    for k, v in sorted(cs_dic.items(), key=lambda x:x[1], reverse=True):
        print("\t" + k + " : " + str(v))

(Ajout) "py3" a été ajouté comme spécification de langage à la partie du code source. Merci, shiracamus.

c'est tout.

Recommended Posts

Word2Vec avec BoUoW
Implémentation de word2vec avec Theano + Keras
Analyse des émotions par Python (word2vec)
word2vec
J'ai créé Word2Vec avec Pytorch
Vérifiez "Fucking Deca" + "Rashomon" avec word2vec
Classification des ensembles de données SNLI avec Word2Vec + LSTM
Python2 + mot2vec
Comprendre Word2Vec
Facile! Utilisez gensim et word2vec avec MAMP.
100 traitement du langage knock-90 (en utilisant Gensim): apprendre avec word2vec
Utiliser Python et word2vec (appris) avec Azure Databricks
"Apprentissage de word2vec" et "Visualisation avec Tensorboard" sur Colaboratory