Como usar o Texthero para preparar um conjunto de dados baseado em texto para o seu projeto de PNL

Texthero Logo

O Texthero foi desenvolvido para ser usado em cima de pandas, facilitando o pré-processamento e a análise da Série ou Dataframes de Pandas baseados em texto.

Se você estiver trabalhando em um projeto de PNL, o Texthero pode ajudá-lo a fazer as coisas mais rapidamente do que antes e oferece mais tempo para você se concentrar em tarefas importantes.

NOTA: A biblioteca Texthero ainda está na versão beta. Você pode enfrentar alguns erros e os pipelines podem mudar. Uma versão mais rápida e melhor será lançada e trará algumas mudanças importantes.

Visão geral do Texthero

Módulos Texthero

O Texthero possui quatro módulos úteis que lidam com diferentes funcionalidades que você pode aplicar no seu conjunto de dados baseado em texto.

  1. Pré-processando
    Este módulo permite o pré-processamento eficiente de Pandas Series ou DataFrames baseados em texto. Possui métodos diferentes para limpar seu conjunto de dados de texto, como minúsculas (), remove_html_tags () e remove_urls ().
  2. PNL
    Este módulo possui algumas tarefas de PNL, como named_entities, noun_chunks e assim por diante.
  3. Representação
    Este módulo possui algoritmos diferentes para mapear palavras em vetores como TF-IDF, GloVe, Análise de componentes principais (PCA) e term_frequency.
  4. Visualização
    O último módulo possui três métodos diferentes para visualizar os insights e as estatísticas de um DataFrame do Pandas baseado em texto. Ele pode traçar um gráfico de dispersão e uma nuvem de palavras.

Instalar Texthero

O Texthero é gratuito, de código aberto e bem documentado. Para instalá-lo, abra um terminal e execute o seguinte comando:

pip install texthero

O pacote usa muitas outras bibliotecas no back-end, como Gensim, SpaCy, scikit-learn e NLTK. Você não precisa instalá-los todos separadamente, o pip cuidará disso.

Como usar o Texthero

Neste artigo, usarei um conjunto de dados de notícias para mostrar como você pode usar diferentes métodos fornecidos pelos módulos do texthero em seu próprio projeto de PNL.

Começaremos importando pacotes importantes do Python que vamos usar.

#import important packages

import texthero as hero
import pandas as pd

Em seguida, carregaremos um conjunto de dados do diretório de dados. O conjunto de dados deste artigo concentra-se em notícias no Suaíli Língua.

#load dataset 

data = pd.read_csv("data/swahili_news_dataset.csv")

Vejamos as 5 principais linhas do conjunto de dados:

# show top 5 rows 

data.head()

5 principais linhas

Como você pode ver, em nosso conjunto de dados, temos três colunas (ID, conteúdo e categoria). Neste artigo, focaremos no recurso de conteúdo.

# select news content only and show top 5 rows

news_content = data[["content"]]
news_content.head()

Criamos um novo quadro de dados focado apenas no conteúdo e, em seguida, mostraremos as 5 principais linhas.

5 principais linhas

Pré-processamento com Texthero.

Nós podemos usar o limpar limpo(). método para pré-processar uma série Pandas baseada em texto.

# clean the news content by using clean method from hero package

news_content['clean_content'] = hero.clean(news_content['content'])

o limpar limpo() O método executa sete funções quando você passa uma série de pandas. Essas sete funções são:

  • minúsculas: minúsculas todo o texto.
  • remove_diacritics (): remove todos os acentos das strings.
  • remove_stopwords (): remove todas as palavras de parada.
  • remove_digits (): remove todos os blocos de dígitos.
  • remove_punctuation (): Remove toda a string.punctuation (! “# $% & ‘() * +, -. / :; <=>? @[]^ _` {|} ~).
  • fillna (s): substitui valores não atribuídos por espaços vazios.
  • remove_whitespace (): remove todo o espaço em branco entre as palavras

Agora podemos ver o conteúdo de notícias limpas.

#show unclean and clean news content

news_content.head()

content vs clean_content

Limpeza Personalizada

Se o pipeline padrão do limpar limpo() Se o método não atender às suas necessidades, você poderá criar um pipeline personalizado com a lista de funções que deseja aplicar no seu conjunto de dados.

Como exemplo, criei um pipeline personalizado com apenas 5 funções para limpar meu conjunto de dados.

#create custom pipeline
from texthero import preprocessing

custom_pipeline = [preprocessing.fillna,
                   preprocessing.lowercase,
                   preprocessing.remove_whitespace,
                   preprocessing.remove_punctuation,
                   preprocessing.remove_urls,
                   ]

Agora eu posso usar o custome_pipeline para limpar meu conjunto de dados.

#altearnative for custom pipeline

news_content['clean_custom_content'] = news_content['content'].pipe(hero.clean, custom_pipeline)

Você pode ver o conjunto de dados limpo que criamos usando o pipeline personalizado.

# show output of custome pipeline

news_content.clean_custom_content.head() 

resultado do pipeline limpo personalizado

Métodos úteis de pré-processamento

Aqui estão algumas outras funções úteis dos módulos de pré-processamento que você pode tentar limpar seu conjunto de dados baseado em texto.

Remover dígitos

Você pode usar o remove_digits () para remover dígitos nos seus conjuntos de dados baseados em texto.

text = pd.Series("Hi my phone number is +255 711 111 111 call me at 09:00 am")
clean_text = hero.preprocessing.remove_digits(text)

print(clean_text)

saída: Olá, meu número de telefone é + ligue para: am
dtype: object

Remover palavras-chave

Você pode usar o remove_stopwords () para remover palavras irrelevantes nos seus conjuntos de dados baseados em texto.

text = pd.Series("you need to know NLP to develop the chatbot that you desire")
clean_text = hero.remove_stopwords(text)

print(clean_text) 

saída: precisa conhecer a PNL desenvolver o desejo do chatbot
dtype: object

Remover URLs

Você pode usar o remove_urls () para remover links em seus conjuntos de dados baseados em texto.

text = pd.Series("Go to https://www.freecodecamp.org/news/ to read more articles you like")
clean_text = hero.remove_urls(text)

print(clean_text)

output: Vá para ler mais artigos que você gosta
dtype: object

Tokenize

Tokenize cada linha da série Pandas fornecida usando o comando tokenize () e retorne uma Série Pandas em que cada linha contém uma lista de tokens.

text = pd.Series(["You can think of Texthero as a tool to help you understand and work with text-based dataset. "])
clean_text = hero.tokenize(text)

print(clean_text)

resultado: [You, can, think, of, Texthero, as, a, tool, to, help, you, understand, and, work, with, text, based, dataset]
dtype: object

Remover tags HTML

Você pode remover tags html da série Pandas fornecida usando o comando remove_html_tags () método.

text = pd.Series("<html><body><h2>hello world</h2></body></html>")
clean_text = hero.remove_html_tags(text)

print(clean_text)

saída: olá mundo
dtype: object

Métodos úteis de visualização

Texthero contém um método diferente para visualizar informações e estatísticas de um Pandas DataFrame baseado em texto.

Palavras principais

Se você quiser conhecer as principais palavras do seu conjunto de dados baseado em texto, poderá usar o top_words () método do módulo de visualização. Este método é útil se você quiser ver palavras adicionais que podem ser adicionadas às listas de palavras de parada.

Este método não retorna um gráfico de barras, então usarei matplotlib para visualizar as palavras principais em um gráfico de barras.

import matplotlib.pyplot as plt

NUM_TOP_WORDS = 20

top_20 = hero.visualization.top_words(news_content['clean_content']).head(NUM_TOP_WORDS)

# Draw the bar chart

top_20.plot.bar(rot=90, title="Top 20 words");

plt.show(block=True);

No gráfico acima, podemos visualizar as 20 principais palavras do nosso conjunto de dados de notícias.

Wordclouds

o palavra nuvem() O método do módulo de visualização plota uma imagem usando o WordCloud do pacote word_cloud.

#Plot wordcloud image using WordCloud method
hero.wordcloud(news_content.clean_content, max_words=100,)

Passamos a série de quadros de dados e o número máximo de palavras (neste exemplo, são 100 palavras) no palavra nuvem() método.

wordclouds

Métodos úteis de representação

O Texthero contém métodos diferentes do módulo de representação que ajudam a mapear palavras em vetores usando algoritmos diferentes, como TF-IDF, word2vec ou GloVe. Nesta seção, mostrarei como você pode usar esses métodos.

TF-IDF

Você pode representar uma série Pandas baseada em texto usando o TF-IDF. Criei uma nova série de pandas com dois conteúdos de notícias e os representei nos recursos TF_IDF usando o tfidf () método.

# Create a new text-based Pandas Series.

news = pd.Series(["mkuu wa mkoa wa tabora aggrey mwanri amesitisha likizo za viongozi wote mkoani humo kutekeleza maazimio ya jukwaa la fursa za biashara la mkoa huo", "serikali imetoa miezi sita kwa taasisi zote za umma ambazo hazitumii mfumo wa gepg katika ukusanyaji wa fedha kufanya hivyo na baada ya hapo itafanya ukaguzi na kuwawajibisha"])

#convert into tfidf features 
hero.tfidf(news)

resultado: [0.187132760851739, 0.0, 0.187132760851739, 0….
              [0.0, 0.18557550845969953, 0.0, 0.185575508459…
dtype: object

NOTE: TF-IDF stands for term frequency-inverse document frequency.

Term Frequency

You can represent a text-based Pandas Series using the term_frequency() method. Term frequency (TF) is used to show how frequently an expression (term or word) occurs in a document or text content.


news = pd.Series(["mkuu wa mkoa wa tabora aggrey mwanri amesitisha likizo za viongozi wote mkoani humo kutekeleza maazimio ya jukwaa la fursa za biashara la mkoa huo", "serikali imetoa miezi sita kwa taasisi zote za umma ambazo hazitumii mfumo wa gepg katika ukusanyaji wa fedha kufanya hivyo na baada ya hapo itafanya ukaguzi na kuwawajibisha"]) # Represente uma série Pandas baseada em texto usando term_frequency.  hero.term_frequency (notícias)

resultado: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, …
             [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, …
dtype: object

K-means

Texthero can perform K-means clustering algorithm by using the kmeans() method. If you have an unlabeled text-based dataset, you can use this method to group content according to their similarities.

In this example, I will create a new pandas dataframe called news with the following columns content,tfidf and kmeans_labels.

column_names = ["content","tfidf", "kmeans_labels"]

news = pd.DataFrame (colunas = nome_da_coluna)

Usaremos apenas as 30 primeiras partes de conteúdo limpo de nossos news_content dataframe e agrupe-os em grupos usando o kmeans () método.

# collect 30 clean content.
news["content"] = news_content.clean_content[:30]

# convert them into tf-idf features.
news['tfidf'] = (
    news['content']
    .pipe(hero.tfidf)
)

# perform clustering algorithm by using kmeans() 
news['kmeans_labels'] = (
    news['tfidf']
    .pipe(hero.kmeans, n_clusters=5)
    .astype(str)
)

No código fonte acima, no pipeline do método k-means, passamos o número de clusters que é 5. Isso significa que agruparemos esse conteúdo em 5 grupos.

Agora, o conteúdo de notícias selecionado foi rotulado em cinco grupos.

# show content and their labels
news[["content","kmeans_labels"]].head()

conteúdo de notícias com etiquetas

PCA

Você também pode usar o pca () método para executar a análise de componentes principais na série Pandas fornecida. Análise do componente principal (PCA) é uma técnica para reduzir a dimensionalidade dos seus conjuntos de dados. Isso aumenta a interpretabilidade, mas ao mesmo tempo minimiza a perda de informações.

Neste exemplo, usamos os recursos tfidf do dataframe de notícias e os representamos em dois componentes usando o comando pca () método. Finalmente, mostraremos um gráfico de dispersão usando o scatterplot () método.

#perform pca
news['pca'] = news['tfidf'].pipe(hero.pca)

#show scatterplot
hero.scatterplot(news, 'pca', color="kmeans_labels", title="news")

Gráfico de Dispersão

Embrulhar

Neste artigo, você aprendeu o básico de como usar o pacote Python do Texthero toolkit em seu projeto de PNL. Você pode aprender mais sobre os métodos disponíveis no documentação.

Você pode baixar o conjunto de dados e o bloco de anotações usados ​​neste artigo aqui: https://github.com/Davisy/Texthero-Python-Toolkit .

Se você aprendeu algo novo ou gostou de ler este artigo, compartilhe-o para que outros possam vê-lo. Até lá, até o próximo post! Também posso ser encontrado no Twitter @Davis_McDavid