[PYTHON] Analyse morphologique et tfidf (avec code de test) pouvant être effectuée en 1 minute environ

Préparation

pip install nltk
pip install mecab-python

Essayez de coller le code ci-dessous et de l'exécuter

La fonction de sortie TF-IDF est tfidf La fonction d'analyse morphologique est extract_words Le long gars sous le test unitaire d'importation en bas est un test

#!/usr/bin/env python
#-*- encoding: utf-8 -*-
import nltk
import MeCab
import urllib2
from urllib2 import HTTPError
from itertools import chain


def tfidf(doc,docs):
  """TF du document cible lorsque le document cible et la liste de mots analysés par morphologie de la phrase entière sont spécifiés-Renvoie IDF"""
  tokens = list(chain.from_iterable(docs)) #flatten
  A = nltk.TextCollection(docs)
  token_types = set(tokens)
  return [{"word":token_type,"tfidf":A.tf_idf(token_type, doc)} for token_type in token_types]
    

def extract_words(text):
  """Texte donné, retourne sous forme de liste de nomenclature"""
  text =  text.encode("utf-8") if isinstance(text,unicode) else text
  mecab = MeCab.Tagger("")
  node = mecab.parseToNode(text)
  words = []
  while node:
    fs = node.feature.split(",")
    if (node.surface is not None) and node.surface != "" and fs[0] in [u'nom']:
      words.append(node.surface)
    node = node.next
  return words

import unittest

class MachineLearningTest(unittest.TestCase):
  def test_extract_words(self):
    """Test d'analyse morphologique"""
    text = "Analyse morphologique du texte et retourne une liste de nomenclature"
    keywords = extract_words(text)
    self.assertEqual(keywords, ["text","morphème","une analyse","nom","liste"])
  def test_tfidf(self):
    """test tfidf"""
    urls = ["http://qiita.com/puriketu99/items/"+str(i) for i in range(1,10)]
    def url2words(url):
      try:
        html = urllib2.urlopen(url).read()
      except HTTPError:
        html = ""
      plain_text = nltk.clean_html(html).replace('\n','')
      words = extract_words(plain_text)
      return words
    docs = [url2words(url) for url in urls]
    tfidfs_fizzbuzz = tfidf(docs[0],docs)
    tfidfs_fizzbuzz.sort(cmp=lambda x,y:cmp(x["tfidf"],y["tfidf"]),reverse=True)
    result = [e for i,e in enumerate(tfidfs_fizzbuzz) if len(e["word"]) > 2 and i < 30]
    self.assertEqual(result[7]["word"],"yaotti")#Si le côté Qiita change la conception, le test peut échouer
    print result
    #[{'tfidf': 0.08270135278254376, 'word': 'quot'},
    # {'tfidf': 0.02819364299404901, 'word': 'FizzBuzz'},
    # {'tfidf': 0.02067533819563594, 'word': 'fizzbuzz'},
    # {'tfidf': 0.02067533819563594, 'word': 'Buzz'},
    # {'tfidf': 0.016916185796429405, 'word': 'Fizz'},
    # {'tfidf': 0.016726267030018446, 'word': 'end'},
    # {'tfidf': 0.015036609596826138, 'word': 'map'},
    # {'tfidf': 0.015036609596826138, 'word': 'yaotti'},
    # {'tfidf': 0.011277457197619604, 'word': 'def'}]

if __name__ == '__main__':
  unittest.main()

Référence Calcul de TF-IDF http://everydayprog.blogspot.jp/2011/12/tf-idf.html

Recommended Posts

Analyse morphologique et tfidf (avec code de test) pouvant être effectuée en 1 minute environ
Analyse de texte pouvant être effectuée en 5 minutes [Word Cloud]
Il semble que le suivi des squelettes puisse être effectué avec RealSense
J'ai étudié le prétraitement qui peut être fait avec PyCaret
Créez une Spinbox qui peut être affichée en binaire avec Tkinter
Gestion des chaînes de caractères dans la communication JSON
Cela peut-il être fait en 1 minute? Aucune installation requise, exemple de test Google pour le langage C pour Linux
Créez une Spinbox pouvant être affichée dans HEX avec Tkinter
[Pour les débutants] Statistiques de baseball dont on peut se souvenir en 33 minutes et 4 secondes et PyData ~ avec Yojima Steel
Un script qui récupère les tweets avec Python, les enregistre dans un fichier externe et effectue une analyse morphologique.
La barre de données EXCEL et l'échelle de couleurs peuvent également être faites avec des pandas
Bot LINE sans serveur qui peut être réalisé en 2 heures (acquisition de l'identifiant source)
[Peut être fait en 10 minutes] Créez rapidement un site Web local avec Django
Une histoire que heroku, qui peut se faire en 5 minutes, a en fait duré 3 jours
Visualisez les mots-clés dans les documents avec TF-IDF et Word Cloud
Générez Word Cloud à partir de données de cas d'essai avec python3
Jupyter dans l'IDE Cloud9
Analyse de texte pouvant être effectuée en 5 minutes [Word Cloud]
[Flask & Bootstrap] Visualisez le contenu des paroles avec Word Cloud ~ Lyrics Word Cloud ~
Passez PYTHONPATH en 1 minute avec VS Code
Article qui peut être une ressource humaine qui comprend et maîtrise le mécanisme de l'API (avec du code Python)
Programme d'installation facile et programme de mise à jour automatique pouvant être utilisé dans n'importe quelle langue
Cela peut être réalisé en 1 minute! Le décorateur qui met en cache l'exécution de la fonction entraîne Memcached
Liste des outils qui peuvent être utilisés pour essayer facilement l'analyse des émotions des phrases japonaises avec Python (essayez avec google colab)
Fonctions pouvant être utilisées dans l'instruction for
Construire un Sphinx qui peut être écrit avec Markdown
Répertorier les packages pouvant être mis à jour avec pip
Résumé des méthodes d'analyse de données statistiques utilisant Python qui peuvent être utilisées en entreprise
Visualisation des informations géographiques de R et Python qui peuvent être exprimées par Power BI
Mettre en place un serveur FTP qui peut être créé et détruit immédiatement (en Python)
Dans Python3.8 et versions ultérieures, le mod inverse peut être calculé avec la fonction intégrée pow.
L'histoire selon laquelle sendmail qui peut être exécuté dans le terminal ne fonctionnait pas avec cron
Un mécanisme pour appeler des méthodes Ruby à partir de Python qui peut être fait en 200 lignes
Algorithmes de base utilisables par les pros de la compétition
Liste des couleurs pouvant être définies avec tkinter (mémorial)
Notes sur les connaissances Python utilisables avec AtCoder
Enregistrement d'image ANT qui peut être utilisé en 5 minutes
Visualisez les mots-clés dans les documents avec TF-IDF et Word Cloud
[Django] À propos des utilisateurs pouvant être utilisés sur un modèle
Limites qui peuvent être analysées à la fois avec MeCab
Peut être utilisé avec AtCoder! Une collection de techniques pour dessiner du code court en Python!
[Django] Noms de champs pouvant être utilisés pour le modèle utilisateur, l'enregistrement des utilisateurs et les méthodes de connexion
[Python3] Code qui peut être utilisé lorsque vous souhaitez redimensionner des images dossier par dossier
Comment afficher le texte et le texte de survol qui peuvent être exécutés en cliquant avec le plug-in Minecraft
Traiter l'erreur selon laquelle une erreur de récupération HTTP se produit dans gpg et la clé ne peut pas être obtenue