algorithm - idf - word embedding




Wortfrequenzalgorithmus für die Verarbeitung natürlicher Sprache (6)

Ohne einen Grad an Information Retrieval zu erhalten, würde ich gerne wissen, ob es irgendwelche Algorithmen zum Zählen der Häufigkeit gibt, mit der Wörter in einem gegebenen Textkörper vorkommen. Das Ziel ist es, ein "allgemeines Gefühl" dessen zu bekommen, was die Leute über eine Reihe von Textkommentaren sagen. In Anlehnung an Wordle .

Was ich gerne hätte:

  • ignorieren Sie Artikel, Pronomen usw. ('a', 'an', 'der', 'ihn', 'sie' usw.)
  • Eigennamen bewahren
  • Ignorieren Sie die Silbentrennung, mit Ausnahme der weichen Art

Nach den Sternen greifen, wären diese pfirsichfarben:

  • Umgang mit Stemming & Plurals (zB Like, Likes, Mover, Likes stimmen mit dem gleichen Ergebnis überein)
  • Gruppierung von Adjektiven (Adverbien, etc.) mit ihren Themen ("great service" im Gegensatz zu "great", "service")

Ich habe einige grundlegende Sachen versucht, die Wordnet verwenden, aber ich ändere gerade Sachen blind und hoffend, dass es für meine spezifischen Daten funktioniert. Etwas generischer wäre großartig.


Der Algorithmus, den Sie gerade beschrieben haben. Ein Programm, das es aus der Box mit einem großen Knopf macht, der sagt "Tun Sie es" ... ich weiß nicht.

Aber lass mich konstruktiv sein. Ich empfehle Ihnen dieses Buch Programmierung Collective Intelligence . Kapitel 3 und 4 enthalten sehr pragmatische Beispiele (wirklich keine komplexen Theorien, nur Beispiele).


Der erste Teil Ihrer Frage klingt nicht so schlecht. Alles, was Sie im Grunde tun müssen, ist, jedes Wort aus der Datei (oder dem Stream w / e) zu lesen und es in einen Präfixbaum einzufügen. Jedes Mal, wenn Sie auf ein bereits vorhandenes Wort stoßen, inkrementieren Sie den zugehörigen Wert. Natürlich hättest du eine Liste von allem, was du nicht sehen würdest.

Wenn Sie einen Präfix-Baum verwenden, stellen Sie sicher, dass jedes Wort zu O (N) zu finden ist, wobei N die maximale Länge eines Wortes in Ihrem Datensatz ist. Der Vorteil eines Präfixbaums in dieser Situation ist, dass, wenn Sie nach Pluralformen suchen und stemming wollen, Sie O (M + 1) einchecken können, wenn das überhaupt möglich ist, wobei M die Länge des Wortes ohne Stamm oder Plural ist. (Ist das ein Wort? hehe). Sobald Sie Ihren Präfix-Baum erstellt haben, würde ich ihn für die Stämme und dergleichen erneut analysieren und ihn so kondensieren, dass das Wurzelwort die Ergebnisse enthält.

Bei der Suche könnten einige einfache Regeln vorhanden sein, damit die Übereinstimmung im Falle der Wurzel oder des Stammes positiv ist oder was Sie haben.

Der zweite Teil scheint extrem schwierig zu sein. Meine naive Neigung wäre, separate Ergebnisse für Adjektiv-Subjekt-Gruppierungen zu halten. Verwenden Sie die gleichen Prinzipien wie oben, aber halten Sie sie einfach getrennt.

Eine andere Option für die semantische Analyse könnte sein, jeden Satz als einen Baum von Subjekt-, Verb-, usw.-Beziehungen zu modellieren (Satz hat ein Subjekt und ein Verb, Subjekt hat ein Substantiv und ein Adjektiv, usw.). Sobald Sie alle Ihren Text auf diese Weise aufgebrochen haben, scheint es, als wäre es ziemlich einfach, durch zu laufen und eine schnelle Zählung der verschiedenen passenden Paarungen zu bekommen, die aufgetreten sind.

Nur ein paar Gedanken, ich bin mir sicher, dass es bessere Ideen gibt, aber ich liebe es, über dieses Zeug nachzudenken.




Willkommen in der Welt von NLP ^ _ ^

Alles, was Sie brauchen, ist ein kleines Grundwissen und einige Werkzeuge.

Es gibt bereits Werkzeuge, die Ihnen sagen, ob ein Wort in einem Satz ein Substantiv, ein Adjektiv oder ein Verb ist. Sie werden als Tag-of-Speech-Tagger bezeichnet . Typischerweise nehmen sie Klartext-Englisch als Eingabe und geben das Wort, seine Grundform und die Wortart aus. Hier ist die Ausgabe eines beliebten UNIX-Sprachausgabegeräts für den ersten Satz Ihres Beitrags:

$ echo "Without getting a degree in information retrieval, I'd like to know if there exists any algorithms for counting the frequency that words occur in a given body of text." | tree-tagger-english 
# Word  POS     surface form
Without IN  without
getting VVG get
a   DT  a
degree  NN  degree
in  IN  in
information NN  information
retrieval   NN  retrieval
,   ,   ,
I   PP  I
'd  MD  will
like    VV  like
to  TO  to
know    VV  know
if  IN  if
there   EX  there
exists  VVZ exist
any DT  any
algorithms  NNS algorithm
for IN  for
counting    VVG count
the DT  the
frequency   NN  frequency
that    IN/that that
words   NNS word
occur   VVP occur
in  IN  in
a   DT  a
given   VVN give
body    NN  body
of  IN  of
text    NN  text
.   SENT    .

Wie Sie sehen können, identifizierte es "Algorithmen" als die Pluralform (NNS) von "Algorithmus" und "existiert" als eine Konjugation (VBZ) von "existieren". Es identifizierte auch "a" und "the" als "Determiners (DT)" - ein anderes Wort für Artikel. Wie Sie sehen können, hat der POS-Tagger auch die Interpunktion in Token umgewandelt.

Um alles außer dem letzten Punkt auf Ihrer Liste zu tun, müssen Sie den Text nur durch einen POS-Tagger laufen lassen, die Kategorien filtern, die Sie nicht interessieren (Determinierer, Pronomen usw.) und die Häufigkeiten der Basisformen von die Wörter.

Hier sind einige beliebte POS-Tagger:

TreeTagger (nur binär: Linux, Solaris, OS-X)
GENIA Tagger (C ++: kompilieren Sie sich selbst)
Stanford POS Tagger (Java)

Um das letzte auf Ihrer Liste zu tun, benötigen Sie mehr als nur Informationen auf Wortebene. Ein einfacher Weg, um zu beginnen, besteht darin, Sequenzen von Wörtern statt nur Wörter selbst zu zählen. Diese heißen N-Gramme . Ein guter Anfang ist UNIX für Poets . Wenn Sie bereit sind, in ein Buch über NLP zu investieren, würde ich Foundations of Statistical Natural Language Processing empfehlen.


Du brauchst nicht einen, sondern mehrere nette Algorithmen, ähnlich wie die folgenden.

  • Ignorieren von Pronomen erfolgt über eine Stoppliste .
  • Eigennamen bewahren? Sie meinen, nannte Entitäten wie Hoover Dam zu entdecken und zu sagen "es ist ein Wort" oder zusammengesetzte Substantive, wie Programmiersprache ? Ich gebe Ihnen einen Hinweis: Das ist hart, aber es gibt Bibliotheken für beide. Suchen Sie nach NER (Named Entitiy Recognition) und lexikalischem Chunking. OpenNLP ist ein Java-Toolkit, das beides ermöglicht.
  • ignorieren Silbentrennung? Du meinst, wie bei Zeilenumbrüchen? Verwenden Sie reguläre Ausdrücke und verifizieren Sie das resultierende Wort über die Wörterbuchsuche.
  • Umgang mit Pluralformen / Stemming: Sie können in den Snowball-Stampfer schauen. Es macht den Trick schön.
  • Das "Gruppieren" von Adjektiven mit ihren Substantiven ist im Allgemeinen eine Aufgabe des flachen Parsens . Aber wenn Sie gezielt nach qualitativen Adjektiven suchen (gut, schlecht, beschissen, verblüffend ...), sind Sie möglicherweise an der Stimmungsanalyse interessiert. LingPipe tut dies und noch viel mehr.

Es tut mir leid, ich weiß, dass Sie gesagt haben, dass Sie KISS wollen, aber leider sind Ihre Forderungen nicht so einfach zu erfüllen. Nichtsdestoweniger gibt es Werkzeuge für all das, und Sie sollten in der Lage sein, sie einfach miteinander zu verknüpfen und müssen keine Aufgabe selbst ausführen, wenn Sie nicht wollen. Wenn Sie eine Aufgabe selbst ausführen wollen, schlage ich vor, dass Sie sich mit Stemming beschäftigen, es ist das einfachste von allen.

Wenn Sie Java verwenden, kombinieren Sie Lucene mit dem OpenNLP- Toolkit. Sie werden sehr gute Ergebnisse erzielen, da Lucene bereits einen eingebauten Stemmer und viele Tutorials hat. Das OpenNLP-Toolkit hingegen ist schlecht dokumentiert, aber Sie brauchen nicht zu viel davon. Vielleicht interessieren Sie sich auch für NLTK , geschrieben in Python.

Ich würde sagen, dass Sie Ihre letzte Anforderung fallenlassen, da es flaches Parsing beinhaltet und Ihre Ergebnisse definitiv nicht beeinflussen wird.

Ah, übrigens. Der genaue Begriff des Dokument-Term-Häufigkeit-Dings, nach dem Sie gesucht haben, heißt tf-idf . Es ist so ziemlich der beste Weg, nach der Dokumenthäufigkeit für Begriffe zu suchen. Um es richtig zu machen, kommen Sie nicht mit multidimenionalen Vektormatrizen um.

... Ja, ich weiß. Nach einem Seminar über IR war mein Respekt für Google noch größer. Nachdem ich einige Sachen in der IR gemacht hatte, war mein Respekt für sie jedoch genauso schnell gefallen.





word-frequency