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
O Texthero possui quatro módulos úteis que lidam com diferentes funcionalidades que você pode aplicar no seu conjunto de dados baseado em texto.
- 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 (). - PNL
Este módulo possui algumas tarefas de PNL, como named_entities, noun_chunks e assim por diante. - 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. - 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 textheroO 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 pdEm 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()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.
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()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() 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.
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()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")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