Buena técnica para la búsqueda de tokenización de texto.

8

Estamos buscando una manera de tokenizar un texto de la misma manera o similar a como lo haría un motor de búsqueda.

La razón por la que estamos haciendo esto es para que podamos ejecutar un análisis estadístico de los tokens. El lenguaje que estamos usando es python, por lo que preferiría una técnica que funcione en ese idioma, pero probablemente podría configurar algo para usar otro idioma si es necesario.

Ejemplo

Token original:

¡Tenemos unos burritos geniales!

Más simplificado: (eliminar plurales y puntuación)

Tenemos un gran burrito

Aún más simplificado: (eliminar palabras superfluas)

gran burrito

Mejor: (reconozca el significado positivo y negativo):

burrito positivo
Chris Dutrow
fuente
Examine los combinadores de analizador, aquí hay una biblioteca de combinador de analizador para python valuedlessons.com/2008/02/… y otra aquí Los combinadores de analizador pyparsing.wikispaces.com permiten un enfoque casi DSL para el análisis basado en intentos de emparejamiento similares a regexp pero mucho más flexibles / poderoso
Jimmy Hoffa
El otro enfoque que viene a la mente (pero se siente un poco ... divertido ...) es simplemente escribir una base de datos de tokens donde tenga los tokens únicos que desea en una tabla, y una tabla de listas negras para los tokens y una lista blanca tabla para tokens de duplicación donde tiene una ID que asigna muchos tokens a uno de los registros de tokens en la tabla de tokens que desea. Básicamente, una base de datos de diccionario que se traduce entre los dos idiomas que desea, donde uno de los idiomas es solo el vocabulario minimizado que "genial" "increíble" "excelente" se traduce a la misma cosa en "-positivo-"
Jimmy Hoffa

Respuestas:

7

Python tiene un gran conjunto de herramientas de lenguaje natural, el NLTK . Es compatible con la tokenización de palabras fuera de la caja:

>>> 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'), ('!', '.')]

La última estructura incluye etiquetas de lenguaje natural, que le permiten descartar palabras de acuerdo con su clasificación. Probablemente desee centrarse en las etiquetas JJ(adjetivo) y NNprefijadas (sustantivo).

A partir de ahí, puede aplicar la derivación y detectar adjetivos positivos y negativos.

Sin embargo, creo que para la clasificación de adjetivos, necesitaría crear su propio corpus a partir de recursos en línea como este ; la biblioteca te da las herramientas para esto.

Aquí hay un ejemplo de derivación utilizando el algoritmo de derivación de Porter:

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

O'Reilly publicó un libro en la biblioteca, ahora disponible en línea .

Martijn Pieters
fuente