[PYTHON] Morphologische Analyse und tfidf (mit Testcode), die in ca. 1 Minute durchgeführt werden können

Vorbereitung

pip install nltk
pip install mecab-python

Versuchen Sie, den folgenden Code einzufügen und auszuführen

Die Funktion zur Ausgabe von TF-IDF ist tfidf Die Funktion für die morphologische Analyse lautet extract_words Der langwierige Typ unter dem Import-Unit-Test unten ist ein 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 des Zieldokuments, wenn das Zieldokument und die nach Morphologie des gesamten Satzes analysierte Wortliste angegeben sind-Gibt IDF zurück"""
  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):
  """Der angegebene Text wird als Liste der Nomenklaturen zurückgegeben"""
  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'Substantiv']:
      words.append(node.surface)
    node = node.next
  return words

import unittest

class MachineLearningTest(unittest.TestCase):
  def test_extract_words(self):
    """Morphologischer Analysetest"""
    text = "Morphologische Analyse von Text und gibt eine Liste der Nomenklaturen zurück"
    keywords = extract_words(text)
    self.assertEqual(keywords, ["text","Morphem","Analyse","Substantiv","aufführen"])
  def test_tfidf(self):
    """tfidf test"""
    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")#Wenn die Qiita-Seite das Design ändert, schlägt der Test möglicherweise fehl
    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()

Referenz Berechnung von TF-IDF http://everydayprog.blogspot.jp/2011/12/tf-idf.html

Recommended Posts

Morphologische Analyse und tfidf (mit Testcode), die in ca. 1 Minute durchgeführt werden können
Textanalyse, die in 5 Minuten durchgeführt werden kann [Word Cloud]
Es scheint, dass Skeleton Tracking mit RealSense durchgeführt werden kann
Ich habe die Vorbehandlung untersucht, die mit PyCaret durchgeführt werden kann
Erstellen Sie eine Spinbox, die mit Tkinter in Binär angezeigt werden kann
Umgang mit Zeichenketten in der JSON-Kommunikation
Kann es in 1 Minute erledigt werden? Keine Installation erforderlich, Google Test-Beispiel für C-Sprache für Linux
Erstellen Sie eine Spinbox, die mit Tkinter in HEX angezeigt werden kann
[Für Anfänger] Baseball-Statistiken, die in 33 Minuten und 4 Sekunden gespeichert werden können, und PyData ~ mit Yojima Steel
Ein Skript, das Tweets mit Python abruft, sie in einer externen Datei speichert und morphologische Analysen durchführt.
EXCEL-Datenleiste und Farbskala können auch mit Pandas erstellt werden
Serverloser LINE-Bot, der in 2 Stunden ausgeführt werden kann (Erfassung der Quellkennung)
[Kann in 10 Minuten erledigt werden] Erstellen Sie schnell eine lokale Website mit Django
Eine Geschichte, die Heroku, die in 5 Minuten gemacht werden kann, tatsächlich 3 Tage dauerte
Visualisieren Sie Schlüsselwörter in Dokumenten mit TF-IDF und Word Cloud
Generieren Sie Word Cloud aus Testfalldaten mit Python3
Jupyter in Cloud9 IDE
Textanalyse, die in 5 Minuten durchgeführt werden kann [Word Cloud]
[Flask & Bootstrap] Visualisiere den Inhalt von Texten mit Word Cloud ~ Lyrics Word Cloud ~
Pass PYTHONPATH in 1 Minute mit VS Code
Artikel, der eine Person sein kann, die den Mechanismus der API versteht und beherrscht (mit Python-Code)
Einfache Programminstallation und automatische Programmaktualisierung, die in jeder Sprache verwendet werden kann
Es kann in 1 Minute erreicht werden! Ein Dekorator, der die Funktionsausführung zwischenspeichert, führt zu einem Memcached
Liste der Tools, mit denen Sie auf einfache Weise die Emotionsanalyse japanischer Sätze mit Python ausprobieren können (versuchen Sie es mit Google Colab).
Funktionen, die in der for-Anweisung verwendet werden können
Erstellen von Sphinx, das mit Markdown geschrieben werden kann
Listen Sie Pakete auf, die mit pip aktualisiert werden können
Zusammenfassung der statistischen Datenanalysemethoden mit Python, die im Geschäftsleben verwendet werden können
Visualisierung von geografischen Informationen von R und Python, die von Power BI ausgedrückt werden können
Richten Sie einen FTP-Server ein, der sofort erstellt und zerstört werden kann (in Python).
In Python3.8 und höher kann der inverse Mod mit der integrierten Funktion pow berechnet werden.
Die Geschichte, dass sendmail, die im Terminal ausgeführt werden kann, mit cron nicht funktioniert hat
Ein Mechanismus zum Aufrufen von Ruby-Methoden aus Python, der in 200 Zeilen ausgeführt werden kann
Grundlegende Algorithmen, die bei Wettkampfprofis eingesetzt werden können
Liste der Farben, die mit tkinter (Denkmal) eingestellt werden können
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
ANTs Bildregistrierung, die in 5 Minuten verwendet werden kann
Visualisieren Sie Schlüsselwörter in Dokumenten mit TF-IDF und Word Cloud
[Django] Über Benutzer, die für Vorlagen verwendet werden können
Grenzwerte, die mit MeCab sofort analysiert werden können
Kann mit AtCoder verwendet werden! Eine Sammlung von Techniken zum Zeichnen von Kurzcode in Python!
[Django] Feldnamen, die für das Benutzermodell, die Benutzerregistrierung und die Anmeldemethoden verwendet werden können
[Python3] Code, der verwendet werden kann, wenn Sie die Größe von Bildern Ordner für Ordner ändern möchten
So zeigen Sie Hover-Text und Text an, der ausgeführt werden kann, indem Sie mit dem Minecraft-Plug-In klicken
Behandlung des Fehlers, dass ein HTTP-Abruffehler in gpg auftritt und der Schlüssel nicht abgerufen werden kann