[PYTHON] Obtenir des publications similaires en utilisant Doc2Vec

Utilisez le corpus de nouvelles de livingoor. Préparé avec le Dockerfile suivant.

Dockerfile


FROM shwld/mecab-python

WORKDIR /usr/data
RUN wget http://www.rondhuit.com/download/ldcc-20140209.tar.gz \
    && tar xvfz ldcc-20140209.tar.gz
WORKDIR /usr/src

Lisez le fichier et préparez les données d'entraînement

Utilisez gemsim.

from os import listdir, path
import MeCab
from gensim.models.doc2vec import Doc2Vec
from gensim.models.doc2vec import LabeledSentence

mecab = MeCab.Tagger('-Owakati -d /usr/lib/mecab/dic/mecab-ipadic-neologd')

dirs = [{'key':i, 'label':path.join('../data/text', x)} for i, x in enumerate(listdir('../data/text')) if not x.endswith('.txt')]
dir_docs = [[path.join(x['label'], y), x['label']] for x in dirs for i, y in enumerate(listdir(x['label']))]

training_docs = []
for idx, (dir_doc) in enumerate(dir_docs):
    text = ''
    for line in open(dir_doc[0], 'r'):
        if (line is ''):
            continue

        text += mecab.parse(line)

    training_docs.append(LabeledSentence(words=text, tags=[dir_doc[0]]))

model = Doc2Vec(documents=training_docs, min_count=1, dm=0)

Entrez un document pour obtenir un document similaire

print(open('../data/text/dokujo-tsushin/dokujo-tsushin-4842348.txt').read())

print(model.docvecs.most_similar('../data/text/dokujo-tsushin/dokujo-tsushin-4842348.txt'))

Vous pouvez obtenir un résultat comme celui-ci

[('../data/text/dokujo-tsushin/dokujo-tsushin-4887920.txt', 0.8448764085769653), ('../data/text/dokujo-tsushin/dokujo-tsushin-6083306.txt', 0.7008811831474304), ('../data/text/livedoor-homme/livedoor-homme-5297934.txt', 0.6486650109291077), ('../data/text/dokujo-tsushin/dokujo-tsushin-4799908.txt', 0.6451865434646606), ('../data/text/dokujo-tsushin/dokujo-tsushin-5927658.txt', 0.6374314427375793), ('../data/text/dokujo-tsushin/dokujo-tsushin-6443618.txt', 0.627821147441864), ('../data/text/dokujo-tsushin/dokujo-tsushin-5453372.txt', 0.6207228899002075), ('../data/text/dokujo-tsushin/dokujo-tsushin-6661458.txt', 0.6123473644256592), ('../data/text/dokujo-tsushin/dokujo-tsushin-5665838.txt', 0.6056432723999023), ('../data/text/dokujo-tsushin/dokujo-tsushin-6624494.txt', 0.6007457971572876)]

Il est sorti dans l'ordre de similitude, donc quand j'ai vu le plus similaire, c'était exactement la même chose.

Regardez le contenu comme ça.

print(open('../data/text/dokujo-tsushin/dokujo-tsushin-4887920.txt').read())

Recommended Posts

Obtenir des publications similaires en utilisant Doc2Vec
Obtenir les messages Google+ AKB48
Obtenir des informations GitHub à l'aide de PyGithub
Obtenez des données Amazon à l'aide de Keep API # 1 Obtenez des données
Essayez d'obtenir des statistiques en utilisant e-Stat
Obtenez des données de Twitter avec Tweepy
Obtenez le chemin du fichier à l'aide de Pathlib