Saltar al contenido

Tokenizar palabras en una lista de oraciones Python

La guía o código que encontrarás en este artículo es la resolución más rápida y válida que hallamos a tu duda o problema.

Solución:

Puede utilizar la palabra tokenizer en NLTK (http://nltk.org/api/nltk.tokenize.html) con una lista de comprensión, consulte http://docs.python.org/2/tutorial/datastructures.html#list -comprensiones

>>> from nltk.tokenize import word_tokenize
>>> example = ['Mary had a little lamb' , 
...            'Jack went up the hill' , 
...            'Jill followed suit' ,    
...            'i woke up suddenly' ,
...            'it was a really bad dream...']
>>> tokenized_sents = [word_tokenize(i) for i in example]
>>> for i in tokenized_sents:
...     print i
... 
['Mary', 'had', 'a', 'little', 'lamb']
['Jack', 'went', 'up', 'the', 'hill']
['Jill', 'followed', 'suit']
['i', 'woke', 'up', 'suddenly']
['it', 'was', 'a', 'really', 'bad', 'dream', '...']

Hago este script para que todas las personas entiendan cómo tokenizar, para que puedan construir su motor de procesamiento de lenguaje natural por sí mismos.

import re
from contextlib import redirect_stdout
from io import StringIO

example = 'Mary had a little lamb, Jack went up the hill, Jill followed suit, i woke up suddenly, it was a really bad dream...'

def token_to_sentence(str):
    f = StringIO()
    with redirect_stdout(f):
        regex_of_sentence = re.findall('([ws]0,)[^ws]', str)
        regex_of_sentence = [x for x in regex_of_sentence if x is not '']
        for i in regex_of_sentence:
            print(i)
        first_step_to_sentence = (f.getvalue()).split('n')
    g = StringIO()
    with redirect_stdout(g):
        for i in first_step_to_sentence:
            try:
                regex_to_clear_sentence = re.search('s([ws]0,)', i)
                print(regex_to_clear_sentence.group(1))
            except:
                print(i)
        sentence = (g.getvalue()).split('n')
    return sentence

def token_to_words(str):
    f = StringIO()
    with redirect_stdout(f):
        for i in str:
            regex_of_word = re.findall('([w]0,)', i)
            regex_of_word = [x for x in regex_of_word if x is not '']
            for word in regex_of_word:
                print(regex_of_word)
        words = (f.getvalue()).split('n')

Hago un proceso diferente, reinicio el proceso desde el párrafo, para que todos comprendan mejor el procesamiento de textos. párrafo a procesar es:

example = 'Mary had a little lamb, Jack went up the hill, Jill followed suit, i woke up suddenly, it was a really bad dream...'

tokenizar párrafo a oración:

sentence = token_to_sentence(example)

resultará:

['Mary had a little lamb', 'Jack went up the hill', 'Jill followed suit', 'i woke up suddenly', 'it was a really bad dream']

convertir en palabras:

words = token_to_words(sentence)

resultará:

['Mary', 'had', 'a', 'little', 'lamb', 'Jack', 'went, 'up', 'the', 'hill', 'Jill', 'followed', 'suit', 'i', 'woke', 'up', 'suddenly', 'it', 'was', 'a', 'really', 'bad', 'dream']

Explicaré cómo funciona esto.

Primero, utilicé expresiones regulares para buscar todas las palabras y espacios que separan las palabras y se detienen hasta encontrar una puntuación, la expresión regular es:

([ws]0,)[^ws]0,

por lo que el cálculo se tomará las palabras y los espacios entre paréntesis:

'(Mary had a little lamb),( Jack went up the hill, Jill followed suit),( i woke up suddenly),( it was a really bad dream)...'

el resultado aún no está claro, contiene algunos caracteres “Ninguno”. así que usé este script para eliminar los caracteres ‘Ninguno’:

[x for x in regex_of_sentence if x is not '']

por lo que el párrafo se convertirá en una oración, pero no una oración clara, el resultado es:

['Mary had a little lamb', ' Jack went up the hill', ' Jill followed suit', ' i woke up suddenly', ' it was a really bad dream']

cuando vea el resultado, muestre alguna oración que comience con un espacio. así que para hacer un párrafo claro sin comenzar un espacio, hago esta expresión regular:

s([ws]0,)

dejará una oración clara como:

['Mary had a little lamb', 'Jack went up the hill', 'Jill followed suit', 'i woke up suddenly', 'it was a really bad dream']

por lo tanto, debemos realizar dos procesos para obtener un buen resultado.

la respuesta a tu pregunta es empezar desde aquí …

para convertir la oración en palabras, hago la iteración del párrafo y utilicé expresiones regulares solo para capturar la palabra mientras estaba iterando con esta expresión regular:

([w]0,)

y vuelva a borrar los caracteres vacíos con:

[x for x in regex_of_word if x is not '']

por lo que el resultado es realmente claro solo la lista de palabras:

['Mary', 'had', 'a', 'little', 'lamb', 'Jack', 'went, 'up', 'the', 'hill', 'Jill', 'followed', 'suit', 'i', 'woke', 'up', 'suddenly', 'it', 'was', 'a', 'really', 'bad', 'dream']

En el futuro para hacer un buen PNL, es necesario tener su propia base de datos de frases y buscar si la frase está en la oración, luego de hacer una lista de frases, el resto de palabras es una palabra clara.

con este método, puedo construir mi propio PNL en mi idioma (bahasa, Indonesia) que realmente carece de módulo.

editado:

No veo su pregunta que quiera comparar las palabras. así que tienes otra oración para comparar …. te doy un bono no solo un bono, te doy cómo contarlo.

mod_example = ["'Mary' 'had' 'a' 'little' 'lamb'" , 'Jack' 'went' 'up' 'the' 'hill']

en este caso el paso que debe hacer es: 1. iter el mod_example 2. comparar la primera oración con las palabras de mod_example. 3.Haz algún cálculo

entonces el guión será:

import re
from contextlib import redirect_stdout
from io import StringIO

example = 'Mary had a little lamb, Jack went up the hill, Jill followed suit, i woke up suddenly, it was a really bad dream...'
mod_example = ["'Mary' 'had' 'a' 'little' 'lamb'" , 'Jack' 'went' 'up' 'the' 'hill']

def token_to_sentence(str):
    f = StringIO()
    with redirect_stdout(f):
        regex_of_sentence = re.findall('([ws]0,)[^ws]', str)
        regex_of_sentence = [x for x in regex_of_sentence if x is not '']
        for i in regex_of_sentence:
            print(i)
        first_step_to_sentence = (f.getvalue()).split('n')
    g = StringIO()
    with redirect_stdout(g):
        for i in first_step_to_sentence:
            try:
                regex_to_clear_sentence = re.search('s([ws]0,)', i)
                print(regex_to_clear_sentence.group(1))
            except:
                print(i)
        sentence = (g.getvalue()).split('n')
    return sentence

def token_to_words(str):
    f = StringIO()
    with redirect_stdout(f):
        for i in str:
            regex_of_word = re.findall('([w]0,)', i)
            regex_of_word = [x for x in regex_of_word if x is not '']
            for word in regex_of_word:
                print(regex_of_word)
        words = (f.getvalue()).split('n')

def convert_to_words(str):
    sentences = token_to_sentence(str)
    for i in sentences:
        word = token_to_words(i)
    return word

def compare_list_of_words__to_another_list_of_words(from_strA, to_strB):
        fromA = list(set(from_strA))
        for word_to_match in fromA:
            totalB = len(to_strB)
            number_of_match = (to_strB).count(word_to_match)
            data = str((((to_strB).count(word_to_match))/totalB)*100)
            print('words: -- ' + word_to_match + ' --' + 'n'
            '       number of match    : ' + number_of_match + ' from ' + str(totalB) + 'n'
            '       percent of match   : ' + data + ' percent')



#prepare already make, now we will use it. The process start with script below:

if __name__ == '__main__':
    #tokenize paragraph in example to sentence:
    getsentences = token_to_sentence(example)

    #tokenize sentence to words (sentences in getsentences)
    getwords = token_to_words(getsentences)

    #compare list of word in (getwords) with list of words in mod_example
    compare_list_of_words__to_another_list_of_words(getwords, mod_example)

Sección de Reseñas y Valoraciones

Eres capaz de sostener nuestra ocupación exponiendo un comentario y valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *