Рубрики
Без рубрики

Как использовать TextHero для подготовки текстового набора данных для вашего проекта NLP

Автор оригинала: Davis David.

Обработка натурального языка (NLP) является одним из важнейших областей обучения и исследований в современном мире. Он имеет много приложений в бизнес-секторе, такому как Chatbots, Analysicate resentiament и классификация документов. Предварительная обработка и представление текста является одним из самых сложных и самых раздражающих частей работы над проектом NLP. Текстовые наборы данных могут быть невероятно тернистыми и сложными для предварительной обработки. Но, к счастью, последний пакет Python под названием Texthero может помочь вам решить эти проблемы.

Что такое тексторический?

TextHero – это простой инструментарий Python, который помогает вам работать с текстовым набором данных. Это обеспечивает быструю и легкую функциональные возможности, которые позволяют вам Предварительная обработка, представляйте, карта на векторы и визуализировать Текстовые данные всего за пару строк кода.

TextHero предназначен для использования на вершине Pands, поэтому он упрощает предварительно обработку и проанализировать текстовые Pandas Series или DataFrames.

Если вы работаете над проектом NLP, TextHero может помочь вам сделать все быстрее, чем раньше и дает вам больше времени на сосредоточенность на важных задачах.

Примечание: Библиотека TextHero все еще находится в бета-версии. Вы можете столкнуться с некоторыми жуками, а трубопроводы могут измениться. Быстрее и лучшая версия будет выпущена, и она принесет некоторые серьезные изменения.

Обзор Texthero

TextHero имеет четыре полезных модуля, которые обрабатывают разные функции, которые вы можете применить в вашем текстовом наборе данных.

  1. Предварительная обработка Этот модуль обеспечивает эффективную предварительную обработку текстовых панелей Pandas или DataFrames. Он имеет разные методы для очистки вашего текстового набора данных, такие как строчные (), RESING_HTML_TAGS () и RESING_URLS ().
  2. NLP Этот модуль имеет несколько задач NLP, таких как named_entities, noun_chunks и так далее.
  3. Представительство Этот модуль имеет разные алгоритмы для отображения слов на векторы, такие как TF-IDF, перчатка, основной компонентный анализ (PCA) и TERM_FRECTION.
  4. Визуализация Последний модуль имеет три различных метода для визуализации понимания и статистики текстовых пандов DataFrame. Он может построить рассеивание и облако слов.

Установить TextHero.

TextHero бесплатный, открытый источник и хорошо документирован. Чтобы установить его открыть терминал и выполнить следующую команду:

pip install texthero

Пакет использует множество других библиотек на задней части, такую как Gensim, Spacy, Scikit-Survey и NLTK. Вам не нужно устанавливать их все отдельно, PIP позаботится об этом.

Как использовать TextHero

В этой статье я буду использовать News DataSet, чтобы показать вам, как вы можете использовать различные методы, предоставляемые модулями TextHero в вашем собственном проекте NLP.

Мы начнем, импортируя важные пакеты Python, которые мы собираемся использовать.

#import important packages

import texthero as hero
import pandas as pd

Затем мы загрузим набор данных из каталога данных. Набор данных для этой статьи ориентирован на новости в Суахили Язык.

#load dataset 

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

Давайте посмотрим на 5 лучших рядов набора данных:

# show top 5 rows 

data.head()

Как видите, в нашем наборе данных у нас есть три столбца (идентификатор, контент и категория). Для этой статьи мы сосредоточимся на функции содержимого.

# select news content only and show top 5 rows

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

Мы создали новое значение DataFrame, ориентированное на содержимое только, а затем мы покажем 5 лучших рядов.

Предварительная обработка с текстуром.

Мы можем использовать чистый(). Способ для предварительной обработки текстовых пандов серии PandA.

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

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

чистый () Способ выполняет семь функций при прохождении серии Panda. Эти семь функций:

  • Строчные буквы (ы): нижние детали все текст.
  • Удалить диакритики (): удалить все акценты из строк.
  • remust_stopwords (): удаляет все сложные слова.
  • Remove_Digits (): Удаляет все блоки цифр.
  • Remove_puncturation (): Удаляет всю строку.puncturation (! »# $% & ‘() * +, -./:; <=>? @ [] ^ _` {|} ~).
  • Fillna (ы): заменяет неназначенные значения с пустыми пробелами.
  • Remove_WhiteSpace (): удаляет все пробелы между словами

Теперь мы можем увидеть очищенный новостной контент.

#show unclean and clean news content

news_content.head()

Пользовательская очистка

Если трубопровод по умолчанию из чистый () Метод не соответствует вашим потребностям, вы можете создать пользовательский конвейер со списком функций, которые вы хотите подать заявку в ваш набор данных.

В качестве примера я создал пользовательский конвейер только с 5 функциями для очистки моего набора данных.

#create custom pipeline
from texthero import preprocessing

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

Теперь я могу использовать Custome_Pipeline для очистки моего набора данных.

#altearnative for custom pipeline

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

Вы можете увидеть чистый набор данных, который мы создали, используя пользовательский трубопровод.

# show output of custome pipeline

news_content.clean_custom_content.head() 

Полезные методы предварительной обработки

Вот некоторые другие полезные функции из предварительно обработанных модулей, которые вы можете попытаться очистить ваш текстовый набор данных.

Удалить цифры

Вы можете использовать Remove_digits () Функция для удаления цифр в ваших текстовых наборах данных.

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)

Выход: Привет мой номер телефона + звоните мне по адресу: AM DTYPE: объект

Удалить стоп-слова

Вы можете использовать remust_stopwords () Функция для удаления стоп-слов в ваших текстовых наборах данных.

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

print(clean_text) 

Выход: нужно знать NLP Разработка ЧАСТБОКА DESIRE DTYPE: объект

Удалить URL-адреса

Вы можете использовать remove_urls () Функция для удаления ссылок в ваших текстовых наборах данных.

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)

Выход: Переместите дополнительные статьи, которые вам нравятся DTYPE: объект

Токена

Токените каждую строку данной серии Panda с помощью Tokenize () Способ и вернуть серию Panda, где каждая строка содержит список токенов.

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)

Выход: [Вы, можете, подумать, о, тексторе, как, а, инструмент, чтобы, помочь, вы, понимаете, и, работаю, с текстом, на основе набора данных] dtype: объект

Удалить HTML-теги

Вы можете удалить теги HTML из данных серии Panda, используя remust_html_tags () метод.

text = pd.Series("

hello world

") clean_text = hero.remove_html_tags(text) print(clean_text)

Выход: Hello World Dtype: объект

Полезные методы визуализации

TextHero содержит другой метод для визуализации представлений и статистики текстовых панелей PandaSAframe.

Лучшие слова

Если вы хотите узнать верхние слова в текстовом наборе данных, вы можете использовать top_words () Метод из модуля визуализации. Этот метод полезен, если вы хотите увидеть дополнительные слова, которые вы можете добавить к спискам слов стоп.

Этот метод не возвращает гистограмма, поэтому я буду использовать Матплотлиб Чтобы визуализировать верхние слова в гистограмме.

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);

На графике выше мы можем визуализировать топ-20 слов из наших новостей набора данных.

WordClouds

WordCloud () Метод из модуля визуализации графикирует изображение с помощью WordCloud из пакета Word_Cloud.

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

Мы передали серии DataFrame и количество максимальных слов (для этого примера, это 100 слов) в WordCloud () метод.

Полезные методы представления

TextHero содержит различные методы из модуля представления, который поможет вам отображать слова на векторы, используя различные алгоритмы, такие как TF-IDF, Word2Vec или Glove. В этом разделе я покажу вам, как вы можете использовать эти методы.

TF-IDF.

Вы можете представлять текстовые панды, используя TF-IDF. Я создал новую серию Panda с двумя кусками новостей и представлял их в функциях TF_IDF, используя TFIDF () метод.

# 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)

Выход: [0.187132760851739, 0.0, 0.187132760851739, 0 …. [0.0, 0.18557550845969953, 0.0, 0.185575508459 … dtype: объект

Примечание: TF-IDF обозначает Термин частотно-обратная частота документа.

Частота срока

Вы можете представлять текстовые панды, используя term_frequency () метод. Термин частота (TF) используется для показать, как часто выражение (термин или слово) происходит в документе или контент текста.

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"])

# Represent a text-based Pandas Series using term_frequency.
hero.term_frequency(news)

Выход: [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: объект

K-означает

TextHero может выполнять k-означает алгоритм кластеризации, используя kmeans () метод. Если у вас есть незамеченный текстовый набор данных, вы можете использовать этот метод для группового контента в соответствии с их сходством.

В этом примере я создадим новые Pandas DataFrame под названием Новости со следующими столбцами Содержание, tfidf и kmans_labels.

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

news = pd.DataFrame(columns = column_names)

Мы будем использовать только первые 30 кусков очищенного контента от нашего News_content DataFrame и класть их на группы, используя kmeans () метод.

# 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)
)

В приведенном выше исходном коде в трубопроводе метода K-означает мы пропустили количество кластеров, которое составляет 5. Это означает, что мы будем группировать эти содержимое на 5 групп.

Теперь выбранный новостной контент был помечен на пять групп.

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

PCA

Вы также можете использовать PCA () Способ выполнения основного компонентного анализа в данной серии Panda. Главный компонентный анализ ( PCA ) – это методика уменьшения размерности ваших наборов данных. Это увеличивает интерпретатор, но в то же время минимизирует потерю информации.

В этом примере мы используем функции TFIDF из News DataFrame и представляют их на два компонента, используя PCA () метод. Наконец мы покажем разброс, используя ScatterPlot () метод.

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

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

Заворачивать

В этой статье вы узнали основы, как использовать пакет TextHero Toolkit Python в вашем проекте NLP. Вы можете узнать больше о методах, доступных в Документация Отказ

Вы можете скачать набор данных и ноутбук, используемый в этой статье здесь: https://github.com/davisy/texthero-python-toolkit Отказ

Если вы узнали что-то новое или наслаждались чтением этой статьи, пожалуйста, поделитесь этим, чтобы другие могли его увидеть. До этого увидимся в следующем посте! Я также можно добраться в Twitter @Davis_mcdavid