Ein effizienter Weg, um die Hauptthemen aus einem Satz zu extrahieren, die Tokenizer
Letzte Woche, während auf neue Features für unser Produkt zu arbeiten. Ich hatte eine schnelle und effiziente Art und Weise zu finden, die wichtigsten Themen / Objekte aus einem Satz zu extrahieren. Da ich Python bin mit, dachte ich zunächst, dass es eine sehr einfache Aufgabe mit NLTK zu erreichen sein wird. Allerdings, wenn ich die Standardtools (POS-Tagger, Parser ...) versucht, ich in der Tat ziemlich genaue Ergebnisse erhalten, aber die Leistung war ziemlich schlecht. So hatte ich einen besseren Weg zu finden.
Wie ich in meiner vorherigen Post. Ich werde mit der unteren Zeile beginnen - Hier können Sie meinen Code zum Extrahieren der Hauptthemen / Nominalphrasen aus einem bestimmten Satz finden. Es funktioniert gut mit echten Sätzen (aus einem Blog / Meldung). Es ist ein bisschen weniger genau im Vergleich zu dem Standard NLTK Tool, aber es funktioniert viel schneller!
Ich lief es auf diesem Satz -
„Swayy ist ein schönes, neues Armaturenbrett für die Entdeckung und Online-Inhalte kuratieren.“
Und bekam dieses Ergebnis -
Dieser Satz ist etwa: Swayy, schönes neues Armaturenbrett, Online-Inhalte
Das erste Mal, wenn Sie den Code ausführen, lädt es den braunen Korpus in dem Speicher, so könnte es ein paar Sekunden dauern.
Aus dem sprachlichen Aspekt, sagen wir in der Regel, dass die wichtigsten „Bausteine“ eines Satzes Nominalphrasen sind (NP) und Verbalphrasen (VP). Die Nominalphrasen sind in der Regel der Themen oder Gegenstände im Satz oder in einfachen Worten - das ist, was der Satz spricht, während Verbphrasen eine Aktion zwischen den Objekten in dem Satz beschreiben. Nehmen Sie dieses Beispiel:
„Facebook erworben Instagram“
Über Wer / Was? - Facebook und Instagram> Nominalphrasen
Was ist passiert? - erworben (= Erwerb)> Verbalphrase
Jetzt glaube ich, dass einige von euch wahrscheinlich fragen - „Warte! Was? Warum Sie nicht Parsing verwenden?“
Also, zuerst - du hast Recht! Das bekannte Verfahren einen Satz in Nomen und Verb-Sätze konvertieren (oder in anderen Worten - ein Baum ..) ist das Parsen. Allerdings ist das Problem mit Parsing-Algorithmen, dass ihre Komplexität ziemlich schlecht ist. Zum Beispiel CYK Algorithmus hat die Komplexität von O (n ^ 3 * | G |)!
Das zweite Problem ist, dass Full-Parsing ein bisschen zuviel des Guten für das war, was wollte ich erreichen.
Also in einem Satz - nur mein Code, um den Satz mit meinem Tagger Tags, sucht dann nach NP-Muster in dem Satz.
Hier werde ich Ihnen einen schnellen Überblick über meinen Code geben:
bigram_tagger - Ich verwende die NLTK Klassen Tagger meine eigenen Tagger zu definieren. Wie Sie es gebaut aus 3 verschiedenen Tagger sehen können und es mit dem braunen Korpus trainiert wird.
cfg - Das ist mein „Semi-CFG“. Es enthält die Grundregeln eine regelmäßige Nominalphrase übereinstimmen.
tokenize_sentence - Teilen Sie den Satz in Token (einzelne Wörter).
normalize_tags - Da es viele Tags in der braunen Korpus sind, habe ich einige von ihnen nur umbenennen.
Extrakt - Das ist unsere Methode. Teilen Sie den Satz, markieren sie und suchen nach Mustern.
96-97 Lines - Der Unterschied zwischen diesen Linien, ist diese Linie 97 auch einzelne Substantive akzeptiert. Die Bedeutung dieser Bedingung ist, dass Sie mehr Ergebnisse pro Satz bekommen - aber einige der Ergebnisse werden falsch positiv sein! Sie können die falsch positiven Ergebnisse durch Verwendung von Worten Frequenzen oder durch die Definition einige spezielle Wörterbuch nach Ihren Bedürfnissen überwinden / ignorieren.
Die untere Zeile
Wie ich bereits sagte, ist der beste Weg, Nomen / Verb-Sätze aus einem Satz extrahieren durch Parsing verwenden. Allerdings, wenn Sie tun müssen, um es schnell und Sie wollen in der Lage viele Sätze / Voll Dokumente in kürzester Zeit zu verarbeiten - ich schlage vor, Sie einen Ansatz wie das nehmen ich oben dargestellt.