Gute Technik für die Tokenisierung von Suchtexten

8

Wir suchen nach einer Möglichkeit, Text auf die gleiche oder ähnliche Weise zu tokenisieren, wie es eine Suchmaschine tun würde.

Der Grund, warum wir dies tun, ist, dass wir statistische Analysen für die Token durchführen können. Die Sprache, die wir verwenden, ist Python. Daher würden wir eine Technik bevorzugen, die in dieser Sprache funktioniert, aber möglicherweise etwas einrichten könnte, um bei Bedarf eine andere Sprache zu verwenden.

Beispiel

Original-Token:

Wir haben einige tolle Burritos!

Einfacher: (Plural und Interpunktion entfernen)

Wir haben einen tollen Burrito

Noch einfacher: (überflüssige Wörter entfernen)

toller Burrito

Am besten: (positive und negative Bedeutung erkennen):

Burrito -positiv-
Chris Dutrow
quelle
Schauen Sie sich Parser-Kombinatoren an. Hier ist eine Parser-Kombinator-Bibliothek für Python worthlessons.com/2008/02/… und eine andere hier. Pyparsing.wikispaces.com- Parser-Kombinatoren ermöglichen einen fast DSL-ähnlichen Parsing-Ansatz, der auf Übereinstimmungsversuchen basiert, die Regexp ähneln, aber weitaus flexibler sind / mächtig
Jimmy Hoffa
Der andere Ansatz, der mir in den Sinn kommt (sich aber ein wenig lustig anfühlt ...), besteht darin, einfach eine Token-Datenbank zu schreiben, in der Sie die gewünschten eindeutigen Token in einer Tabelle haben, sowie eine Blacklist-Tabelle für zu entfernende Token und eine weiße Liste Tabelle für betrogene Token, in der Sie eine ID haben, die viele Token einem der Token-Datensätze in der gewünschten Token-Tabelle zuordnet. Grundsätzlich eine Wörterbuchdatenbank, die zwischen den beiden gewünschten Sprachen übersetzt, wobei eine der Sprachen nur das minimierte Vokabular ist, das "großartig", "großartig", "großartig" alle in "-positiv-"
Jimmy Hoffa,

Antworten:

7

Python hat ein großartiges Toolkit für natürliche Sprachen, das NLTK . Es unterstützt die sofort einsatzbereite Wort-Tokenisierung:

>>> import nltk
>>> input = 'We have some great burritos!'
>>> tokens = nltk.word_tokenize(input)
>>> tokens
['We', 'have', 'some', 'great', 'burritos', '!']
>>> nltk.pos_tag(tokens)
[('We', 'PRP'), ('have', 'VBP'), ('some', 'DT'), ('great', 'JJ'), ('burritos', 'NNS'), ('!', '.')]

Die letzte Struktur enthält Tags in natürlicher Sprache, mit denen Sie Wörter aufgrund ihrer Klassifizierung aus der Betrachtung streichen können. Sie möchten sich wahrscheinlich auf die Tags JJ(Adjektiv) und NN-präfixiert (Substantiv) konzentrieren.

Von da an können Sie Stemming anwenden und positive und negative Adjektive erkennen.

Ich glaube, dass Sie für die Adjektivklassifizierung jedoch Ihren eigenen Korpus aus solchen Online-Ressourcen erstellen müssen . Die Bibliothek bietet Ihnen die Werkzeuge dafür.

Hier ist ein Stemming-Beispiel mit dem Porter-Stemming-Algorithmus:

>>> from nltk.stem.porter import PorterStemmer
>>> PorterStemmer().stem('burritos')
'burrito'

O'Reilly veröffentlichte ein Buch in der Bibliothek, das jetzt online verfügbar ist .

Martijn Pieters
quelle